bitcoind: try querying all bitcoind nodes
This commit is contained in:
parent
d7f49cc192
commit
5bea36edc6
|
@ -235,6 +235,10 @@ Bitcoin.prototype._resetCaches = function() {
|
|||
this.summaryCache.reset();
|
||||
};
|
||||
|
||||
Bitcoin.prototype._tryAll = function(func, callback) {
|
||||
async.retry({times: this.nodes.length, interval: 1000}, func, callback);
|
||||
};
|
||||
|
||||
Bitcoin.prototype._wrapRPCError = function(errObj) {
|
||||
var err = new Error(errObj.message);
|
||||
err.code = errObj.code;
|
||||
|
@ -1036,14 +1040,16 @@ Bitcoin.prototype.getBlock = function(blockArg, callback) {
|
|||
var self = this;
|
||||
|
||||
function queryBlock(blockhash) {
|
||||
self.client.getBlock(blockhash, false, function(err, response) {
|
||||
if (err) {
|
||||
return callback(self._wrapRPCError(err));
|
||||
}
|
||||
var blockObj = bitcore.Block.fromString(response.result);
|
||||
self.blockCache.set(blockhash, blockObj);
|
||||
callback(null, blockObj);
|
||||
});
|
||||
self._tryAll(function(done) {
|
||||
self.client.getBlock(blockhash, false, function(err, response) {
|
||||
if (err) {
|
||||
return done(self._wrapRPCError(err));
|
||||
}
|
||||
var blockObj = bitcore.Block.fromString(response.result);
|
||||
self.blockCache.set(blockhash, blockObj);
|
||||
done(null, blockObj);
|
||||
});
|
||||
}, callback);
|
||||
}
|
||||
|
||||
var cachedBlock = self.blockCache.get(blockArg);
|
||||
|
@ -1053,11 +1059,17 @@ Bitcoin.prototype.getBlock = function(blockArg, callback) {
|
|||
});
|
||||
} else {
|
||||
if (_.isNumber(blockArg)) {
|
||||
self.client.getBlockHash(blockArg, function(err, response) {
|
||||
self._tryAll(function(done) {
|
||||
self.client.getBlockHash(blockArg, function(err, response) {
|
||||
if (err) {
|
||||
return done(self._wrapRPCError(err));
|
||||
}
|
||||
done(null, response.result);
|
||||
});
|
||||
}, function(err, blockhash) {
|
||||
if (err) {
|
||||
return callback(self._wrapRPCError(err));
|
||||
return callback(err);
|
||||
}
|
||||
var blockhash = response.result;
|
||||
queryBlock(blockhash);
|
||||
});
|
||||
} else {
|
||||
|
|
|
@ -157,9 +157,7 @@ describe('Bitcoin Cluster', function() {
|
|||
it('step 2: receive block events', function(done) {
|
||||
this.timeout(10000);
|
||||
node.services.bitcoind.once('tip', function() {
|
||||
setTimeout(function() {
|
||||
done();
|
||||
}, 1000);
|
||||
done();
|
||||
});
|
||||
node.generateBlock(1, function(err, hashes) {
|
||||
if (err) {
|
||||
|
|
Loading…
Reference in New Issue