chaindb: better loading.
This commit is contained in:
parent
495dda79ef
commit
c950a30330
@ -46,7 +46,7 @@ function Chain(options) {
|
||||
size: 0
|
||||
};
|
||||
|
||||
this._addIndex(ChainBlock.fromJSON(this, {
|
||||
this._saveEntry(ChainBlock.fromJSON(this, {
|
||||
hash: network.genesis.hash,
|
||||
version: network.genesis.version,
|
||||
prevBlock: network.genesis.prevBlock,
|
||||
@ -100,7 +100,7 @@ Chain.prototype._init = function _init() {
|
||||
var i, entry;
|
||||
|
||||
for (i = 1; i < count; i++)
|
||||
self._addIndex(self.db.get(i));
|
||||
self._saveEntry(self.db.get(i));
|
||||
|
||||
self.loading = false;
|
||||
self.emit('load');
|
||||
@ -109,7 +109,7 @@ Chain.prototype._init = function _init() {
|
||||
});
|
||||
};
|
||||
|
||||
Chain.prototype._addIndex = function _addIndex(entry, save) {
|
||||
Chain.prototype._addEntry = function _addEntry(entry) {
|
||||
var self = this;
|
||||
var existing;
|
||||
|
||||
@ -138,6 +138,12 @@ Chain.prototype._addIndex = function _addIndex(entry, save) {
|
||||
}
|
||||
}
|
||||
|
||||
this._saveEntry(entry, true);
|
||||
|
||||
return Chain.codes.okay;
|
||||
};
|
||||
|
||||
Chain.prototype._saveEntry = function _saveEntry(entry, save) {
|
||||
if (save)
|
||||
this.db.save(entry);
|
||||
|
||||
@ -147,8 +153,6 @@ Chain.prototype._addIndex = function _addIndex(entry, save) {
|
||||
this.tip = entry;
|
||||
this.emit('tip', this.tip);
|
||||
}
|
||||
|
||||
return Chain.codes.okay;
|
||||
};
|
||||
|
||||
Chain.prototype.resetLastCheckpoint = function resetLastCheckpoint(height) {
|
||||
@ -323,7 +327,7 @@ Chain.prototype.add = function add(block, peer) {
|
||||
}
|
||||
|
||||
// Attempt to add block to the chain index.
|
||||
code = this._addIndex(entry, true);
|
||||
code = this._addEntry(entry);
|
||||
|
||||
// Result should never be `unchanged` since
|
||||
// we already verified there were no
|
||||
@ -677,7 +681,7 @@ Chain.prototype.fromJSON = function fromJSON(json) {
|
||||
assert.equal(json.network, network.type);
|
||||
|
||||
json.entries.forEach(function(entry) {
|
||||
this._addIndex(ChainBlock.fromJSON(this, entry));
|
||||
this._saveEntry(ChainBlock.fromJSON(this, entry));
|
||||
}, this);
|
||||
};
|
||||
|
||||
@ -723,10 +727,12 @@ function ChainDB(chain, options) {
|
||||
}
|
||||
|
||||
ChainDB.prototype._init = function _init() {
|
||||
try {
|
||||
fs.unlinkSync(this.file);
|
||||
} catch (e) {
|
||||
;
|
||||
if (+process.env.BCOIN_FRESH === 1) {
|
||||
try {
|
||||
fs.unlinkSync(this.file);
|
||||
} catch (e) {
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.exists()) {
|
||||
@ -750,7 +756,7 @@ ChainDB.prototype.getBuffer = function(size) {
|
||||
|
||||
ChainDB.prototype.exists = function exists() {
|
||||
try {
|
||||
fs.statSync(file);
|
||||
fs.statSync(this.file);
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
@ -774,7 +780,8 @@ ChainDB.prototype.count = function count() {
|
||||
ChainDB.prototype.cache = function cache(entry) {
|
||||
// Could use this.count() - 1 here as
|
||||
// long as we're not using saveAsync.
|
||||
assert.equal(this.tip, this.count() - 1);
|
||||
// if (this.tip !== -1)
|
||||
// assert.equal(this.tip, this.count() - 1);
|
||||
if (entry.height > this.tip) {
|
||||
this.tip = entry.height;
|
||||
delete this._cache[entry.height - this._cacheWindow];
|
||||
@ -934,6 +941,7 @@ ChainDB.prototype._read = function _read(size, offset) {
|
||||
|
||||
ChainDB.prototype._writeAsync = function _writeAsync(data, offset, callback) {
|
||||
var self = this;
|
||||
var added = Math.max(0, (offset + data.length) - this.size);
|
||||
var size = data.length;
|
||||
var index = 0;
|
||||
|
||||
@ -950,7 +958,7 @@ ChainDB.prototype._writeAsync = function _writeAsync(data, offset, callback) {
|
||||
offset += bytes;
|
||||
|
||||
if (index === data.length) {
|
||||
self.size += data.length;
|
||||
self.size += added;
|
||||
return callback(null, true);
|
||||
}
|
||||
|
||||
@ -961,6 +969,7 @@ ChainDB.prototype._writeAsync = function _writeAsync(data, offset, callback) {
|
||||
|
||||
ChainDB.prototype._write = function _write(data, offset) {
|
||||
var size = data.length;
|
||||
var added = Math.max(0, (offset + data.length) - this.size);
|
||||
var index = 0;
|
||||
var bytes;
|
||||
|
||||
@ -972,7 +981,7 @@ ChainDB.prototype._write = function _write(data, offset) {
|
||||
size -= bytes;
|
||||
offset += bytes;
|
||||
if (index === data.length) {
|
||||
this.size += data.length;
|
||||
this.size += added;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user