add getAsync.
This commit is contained in:
parent
b65ed25b29
commit
c5bc356bc9
@ -756,6 +756,9 @@ ChainDB.prototype.getBuffer = function(size) {
|
|||||||
if (!this._bufferPool[size])
|
if (!this._bufferPool[size])
|
||||||
this._bufferPool[size] = new Buffer(size);
|
this._bufferPool[size] = new Buffer(size);
|
||||||
|
|
||||||
|
// if (this._bufferPool[size].__used)
|
||||||
|
// return new Buffer(size);
|
||||||
|
|
||||||
return this._bufferPool[size];
|
return this._bufferPool[size];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -828,6 +831,46 @@ ChainDB.prototype.get = function get(height) {
|
|||||||
return entry;
|
return entry;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ChainDB.prototype.getAsync = function getAsync(height, callback) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
callback = utils.asyncify(callback);
|
||||||
|
|
||||||
|
if (this._cache[height])
|
||||||
|
return callback(null, this._cache[height]);
|
||||||
|
|
||||||
|
if (this._queue[height])
|
||||||
|
return callback(null, this._queue[height]);
|
||||||
|
|
||||||
|
if (height < 0 || height == null)
|
||||||
|
return callback();
|
||||||
|
|
||||||
|
if ((height + 1) * BLOCK_SIZE > this.size)
|
||||||
|
return callback();
|
||||||
|
|
||||||
|
this._readAsync(BLOCK_SIZE, height * BLOCK_SIZE, function(err, data) {
|
||||||
|
var entry;
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
return callback(err);
|
||||||
|
|
||||||
|
if (!data)
|
||||||
|
return callback();
|
||||||
|
|
||||||
|
// Ignore if it is a null block.
|
||||||
|
if (utils.read32(data, 0) === 0)
|
||||||
|
return callback();
|
||||||
|
|
||||||
|
entry = ChainBlock.fromRaw(self.chain, height, data);
|
||||||
|
|
||||||
|
// Cache the past 1001 blocks in memory
|
||||||
|
// (necessary for isSuperMajority)
|
||||||
|
self.cache(entry);
|
||||||
|
|
||||||
|
return callback(null, entry);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
ChainDB.prototype.save = function save(entry) {
|
ChainDB.prototype.save = function save(entry) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var raw, offset;
|
var raw, offset;
|
||||||
@ -843,7 +886,7 @@ ChainDB.prototype.save = function save(entry) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// This causes weird race conditions with size/count/tip.
|
// This causes weird race conditions with size/count/tip.
|
||||||
ChainDB.prototype.saveAsync = function save(entry, callback) {
|
ChainDB.prototype.saveAsync = function saveAsync(entry, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var raw, offset;
|
var raw, offset;
|
||||||
|
|
||||||
@ -953,6 +996,32 @@ ChainDB.prototype._read = function _read(size, offset) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ChainDB.prototype._readAsync = function _read(size, offset) {
|
||||||
|
var self = this;
|
||||||
|
var data = new Buffer(size);
|
||||||
|
var index = 0;
|
||||||
|
var bytes;
|
||||||
|
|
||||||
|
if (offset < 0 || offset == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
(function callee() {
|
||||||
|
fs.read(self.fd, data, index, size, offset, function(err, bytes) {
|
||||||
|
if (err)
|
||||||
|
return callback(err);
|
||||||
|
|
||||||
|
index += bytes;
|
||||||
|
size -= bytes;
|
||||||
|
offset += bytes;
|
||||||
|
|
||||||
|
if (index === data.length)
|
||||||
|
return callback(null, data);
|
||||||
|
|
||||||
|
callee();
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
};
|
||||||
|
|
||||||
ChainDB.prototype._writeAsync = function _writeAsync(data, offset, callback) {
|
ChainDB.prototype._writeAsync = function _writeAsync(data, offset, callback) {
|
||||||
var self = this;
|
var self = this;
|
||||||
var added = Math.max(0, (offset + data.length) - this.size);
|
var added = Math.max(0, (offset + data.length) - this.size);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user