Fixed logging issues.
This commit is contained in:
parent
1f4c5e5e1f
commit
67ce58d698
@ -149,6 +149,9 @@ BlockService.prototype.getRawBlock = function(hash, callback) {
|
|||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
if (!block) {
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
callback(null, block.toRaw().toString('hex'));
|
callback(null, block.toRaw().toString('hex'));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -189,7 +192,6 @@ BlockService.prototype._checkTip = function(callback) {
|
|||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
self._reorging = true;
|
|
||||||
self._findCommonAncestor(function(err, commonAncestorHeader) {
|
self._findCommonAncestor(function(err, commonAncestorHeader) {
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
@ -365,6 +367,14 @@ BlockService.prototype.start = function(callback) {
|
|||||||
return callback();
|
return callback();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self._header.on('reorg', function() {
|
||||||
|
self._reorging = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
self._header.on('reorg complete', function() {
|
||||||
|
self._reorging = false;
|
||||||
|
});
|
||||||
|
|
||||||
self._setTip(tip, callback);
|
self._setTip(tip, callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -376,25 +386,34 @@ BlockService.prototype.stop = function(callback) {
|
|||||||
setImmediate(callback);
|
setImmediate(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BlockService.prototype._getTimeSinceLastBlock = function(blockHash, prevBlockHash, callback) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
async.map([ blockHash, prevBlockHash ], function(hash, next) {
|
||||||
|
self._timestamp.getTimestamp(hash, next);
|
||||||
|
}, function(err, times) {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
return callback(null, utils.convertMillisecondsToHumanReadable((times[0] * 1000) - (times[1] * 1000)));
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
BlockService.prototype._queueBlock = function(block) {
|
BlockService.prototype._queueBlock = function(block) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self._blocksInQueue++;
|
self._blocksInQueue++;
|
||||||
|
|
||||||
self._blockProcessor.push(block, function(err) {
|
self._blockProcessor.push(block, function(err) {
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
return self._handleError(err);
|
return self._handleError(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info('Block Service: The best block hash is: ' + self._tip.hash +
|
self._logSynced(block.rhash());
|
||||||
' at height: ' + self._tip.height + ' Time since last block: ' +
|
|
||||||
utils.convertMillisecondsToHumanReadable(Date.now() - self._timeOfLastBlockReport));
|
|
||||||
self._timeOfLastBlockReport = Date.now();
|
|
||||||
|
|
||||||
log.debug('Block Service: completed processing block: ' + block.rhash() +
|
|
||||||
' prev hash: ' + bcoin.util.revHex(block.prevBlock) + ' height: ' + self._tip.height);
|
|
||||||
|
|
||||||
self._blocksInQueue--;
|
self._blocksInQueue--;
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -693,6 +712,11 @@ BlockService.prototype._getReorgBlock = function(tip, callback) {
|
|||||||
BlockService.prototype._onBlock = function(block, callback) {
|
BlockService.prototype._onBlock = function(block, callback) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
if (self._reorging) {
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
|
|
||||||
self._getBlock(block.rhash(), function(err, _block) {
|
self._getBlock(block.rhash(), function(err, _block) {
|
||||||
|
|
||||||
if(err) {
|
if(err) {
|
||||||
@ -813,6 +837,51 @@ BlockService.prototype._setTip = function(tip, callback) {
|
|||||||
this._saveTip(tip, callback);
|
this._saveTip(tip, callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
BlockService.prototype._logSynced = function(blockHash) {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
if (self._reorging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var blockHeight;
|
||||||
|
var timeDiff;
|
||||||
|
|
||||||
|
async.waterfall([
|
||||||
|
function(next) {
|
||||||
|
self._header.getBlockHeader(blockHash, function(err, header) {
|
||||||
|
if (err) {
|
||||||
|
return next(err);
|
||||||
|
}
|
||||||
|
blockHeight = header.height;
|
||||||
|
next(null, header.prevHash);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
function(prevBlockHash, next) {
|
||||||
|
self._getTimeSinceLastBlock(blockHash, prevBlockHash, function(err, diff) {
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
return self._handleError(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
timeDiff = diff;
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
], function(err) {
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
return self._handleError(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info('Block Service: The best block hash is: ' + blockHash +
|
||||||
|
' at height: ' + blockHeight + '. Time between the last 2 blocks (adjusted): ' + timeDiff);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
BlockService.prototype._onSynced = function() {
|
BlockService.prototype._onSynced = function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
@ -823,8 +892,7 @@ BlockService.prototype._onSynced = function() {
|
|||||||
self._logProgress();
|
self._logProgress();
|
||||||
self._initialSync = false;
|
self._initialSync = false;
|
||||||
self._startBlockSubscription();
|
self._startBlockSubscription();
|
||||||
log.info('Block Service: The best block hash is: ' + self._tip.hash +
|
self._logSynced(self._tip.hash);
|
||||||
' at height: ' + self._tip.height);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
BlockService.prototype._startSync = function() {
|
BlockService.prototype._startSync = function() {
|
||||||
|
|||||||
@ -28,6 +28,7 @@ var HeaderService = function(options) {
|
|||||||
this.GENESIS_HASH = constants.BITCOIN_GENESIS_HASH[this.node.network];
|
this.GENESIS_HASH = constants.BITCOIN_GENESIS_HASH[this.node.network];
|
||||||
this._lastHeader = null;
|
this._lastHeader = null;
|
||||||
this._initialSync = true;
|
this._initialSync = true;
|
||||||
|
this._originalHeight = 0;
|
||||||
|
|
||||||
this._slowMode = options.slowMode;
|
this._slowMode = options.slowMode;
|
||||||
};
|
};
|
||||||
@ -126,6 +127,8 @@ HeaderService.prototype.getBestHeight = function() {
|
|||||||
|
|
||||||
HeaderService.prototype._adjustTipBackToCheckpoint = function() {
|
HeaderService.prototype._adjustTipBackToCheckpoint = function() {
|
||||||
|
|
||||||
|
this._originalHeight = this._tip.height;
|
||||||
|
|
||||||
if (this._checkpoint === -1 || this._tip.height < this._checkpoint) {
|
if (this._checkpoint === -1 || this._tip.height < this._checkpoint) {
|
||||||
|
|
||||||
this._tip.height = 0;
|
this._tip.height = 0;
|
||||||
@ -300,6 +303,7 @@ HeaderService.prototype._persistHeader = function(block, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self._reorging = true;
|
self._reorging = true;
|
||||||
|
self.emit('reorg');
|
||||||
|
|
||||||
self._handleReorg(block, function(err) {
|
self._handleReorg(block, function(err) {
|
||||||
|
|
||||||
@ -507,7 +511,17 @@ HeaderService.prototype._onHeadersSave = function(callback) {
|
|||||||
return service.onHeaders.call(service, next);
|
return service.onHeaders.call(service, next);
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
}, callback);
|
}, function(err) {
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.emit('reorg complete');
|
||||||
|
self._reorging = false;
|
||||||
|
callback();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -603,6 +617,7 @@ HeaderService.prototype._handleReorg = function(block, callback) {
|
|||||||
// then, we'll get the last header from the database which will nuke out all the
|
// then, we'll get the last header from the database which will nuke out all the
|
||||||
// headers that are greater than new tip height.
|
// headers that are greater than new tip height.
|
||||||
self._adjustHeadersForCheckPointTip(function(err) {
|
self._adjustHeadersForCheckPointTip(function(err) {
|
||||||
|
|
||||||
if(err) {
|
if(err) {
|
||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
@ -611,7 +626,6 @@ HeaderService.prototype._handleReorg = function(block, callback) {
|
|||||||
// it can check to ensure the final set of header contains the reorg block.
|
// it can check to ensure the final set of header contains the reorg block.
|
||||||
// in other words, our peer has completed its own reorg process and is delievering
|
// in other words, our peer has completed its own reorg process and is delievering
|
||||||
// us a valid set of headers.
|
// us a valid set of headers.
|
||||||
self._reorgBlock = block;
|
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -650,7 +664,7 @@ HeaderService.prototype._startSync = function() {
|
|||||||
}, function() {
|
}, function() {
|
||||||
|
|
||||||
self._reorging = false;
|
self._reorging = false;
|
||||||
var numNeeded = self._bestHeight - self._tip.height;
|
var numNeeded = Math.max(self._bestHeight, self._originalHeight) - self._tip.height;
|
||||||
|
|
||||||
// common case
|
// common case
|
||||||
if (numNeeded > 0) {
|
if (numNeeded > 0) {
|
||||||
@ -961,6 +975,7 @@ HeaderService.prototype._adjustHeadersForCheckPointTip = function(callback) {
|
|||||||
|
|
||||||
assert(self._lastHeader, 'The last synced header was not in the database.');
|
assert(self._lastHeader, 'The last synced header was not in the database.');
|
||||||
self._tip.hash = self._lastHeader.hash;
|
self._tip.hash = self._lastHeader.hash;
|
||||||
|
self._tip.height = self._lastHeader.height;
|
||||||
self._db.batch(removalOps, callback);
|
self._db.batch(removalOps, callback);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@ -158,7 +158,6 @@ TimestampService.prototype.getTimestampSync = function(hash) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
TimestampService.prototype.getTimestamp = function(hash, callback) {
|
TimestampService.prototype.getTimestamp = function(hash, callback) {
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self._db.get(self._encoding.encodeBlockTimestampKey(hash), function(err, data) {
|
self._db.get(self._encoding.encodeBlockTimestampKey(hash), function(err, data) {
|
||||||
|
|||||||
@ -269,6 +269,8 @@ TransactionService.prototype.onBlock = function(block, callback) {
|
|||||||
return callback(err);
|
return callback(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(block.txs.length === operations.length, 'It seems we are not indexing the correct number of transactions.');
|
||||||
|
|
||||||
callback(null, operations);
|
callback(null, operations);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user