diff --git a/lib/services/block/index.js b/lib/services/block/index.js index c2b14302..0a2bee90 100644 --- a/lib/services/block/index.js +++ b/lib/services/block/index.js @@ -537,21 +537,13 @@ BlockService.prototype._processBlock = function(block) { function(err) { if (err) { - if (!self.node.stopping) { - log.error('Block Service: ' + err); - self.node.stop(); - } - return; + return self._handleError(err); } self._db.batch(operations, function(err) { if (err) { - if (!self.node.stopping) { - log.error('Block Service: ' + err); - self.node.stop(); - } - return; + return self._handleError(err); } self._tip.height = self._tip.height + 1; @@ -561,14 +553,11 @@ BlockService.prototype._processBlock = function(block) { self._db.put(tipOps.key, tipOps.value, function(err) { if (err) { - if (!self.node.stopping) { - log.error('Block Service: ' + err); - self.node.stop(); - } - return; + return self._handleError(err); } self._syncing = false; + self._reorging = false; self._sync(); }); }); @@ -576,6 +565,13 @@ BlockService.prototype._processBlock = function(block) { ); }; +BlockService.prototype._handleError = function(err) { + if (!this.node.stopping) { + log.error('Block Service: ' + err); + return this.node.stop(); + } +}; + BlockService.prototype.onBlock = function(block, callback) { var self = this; @@ -616,12 +612,23 @@ BlockService.prototype._setListeners = function() { BlockService.prototype.newReorg = function(block, headers, callback) { var self = this; + self._reorging = true; log.info('Block Service: detected a reorg from the header service.'); self._handleReorg(block.rhash(), headers, function(err) { if (err) { return callback(err); } - self.newBlock(block, callback); + self.newBlock(block); + + async.retry({ interval: 100, times: 1000 }, function(next) { + next(self._reorging); + }, function(err) { + if (err) { + return callback(err); + } + callback(); + }); + }); }; diff --git a/lib/services/header/index.js b/lib/services/header/index.js index bf607da9..dfe0b9a8 100644 --- a/lib/services/header/index.js +++ b/lib/services/header/index.js @@ -370,6 +370,8 @@ HeaderService.prototype._onHeader = function(header) { } this._lastHeader = header; + this._tip.height = header.height; + this._tip.hash = header.hash; return [ { @@ -412,8 +414,6 @@ HeaderService.prototype._onHeaders = function(headers) { dbOps = dbOps.concat(ops); - self._tip.height = header.height; - self._tip.hash = header.hash; } self._saveHeaders(dbOps, function(err) { @@ -800,7 +800,6 @@ HeaderService.prototype._handleLowTipHeight = function() { } self._startHeaderSubscription(); - self._sync(); });