increase BACKOFF_OFFSET from 3 to 10 + fixed BACKOFF_TIME (1 hour)

This commit is contained in:
Ivan Socolsky 2016-03-15 17:21:22 -03:00
parent 4892e23100
commit ea94ec9963
3 changed files with 27 additions and 10 deletions

View File

@ -14,10 +14,10 @@ Defaults.MAX_KEYS = 100;
Defaults.DELETE_LOCKTIME = 1 * 3600;
// Allowed consecutive txp rejections before backoff is applied.
Defaults.BACKOFF_OFFSET = 3;
Defaults.BACKOFF_OFFSET = 10;
// Time a copayer need to wait to create a new TX after her tx previous proposal we rejected. (incremental). in Minutes.
Defaults.BACKOFF_TIME = 2;
// Time a copayer need to wait to create a new TX after her tx previous proposal we rejected. in seconds.
Defaults.BACKOFF_TIME = 1 * 3600;
Defaults.MAX_MAIN_ADDRESS_GAP = 20;

View File

@ -1532,7 +1532,7 @@ WalletService.prototype._canCreateTx = function(cb) {
var lastTxTs = txs[0].createdOn;
var now = Math.floor(Date.now() / 1000);
var timeSinceLastRejection = now - lastTxTs;
var backoffTime = 60 * Math.pow(Defaults.BACKOFF_TIME, exceededRejections);
var backoffTime = Defaults.BACKOFF_TIME;
if (timeSinceLastRejection <= backoffTime)
log.debug('Not allowing to create TX: timeSinceLastRejection/backoffTime', timeSinceLastRejection, backoffTime);

View File

@ -3116,9 +3116,10 @@ describe('Wallet service', function() {
});
describe('Backoff time', function(done) {
var server, wallet, txid;
var server, wallet, txid, clock;
var _oldBackoffOffset = Defaults.BACKOFF_OFFSET;
beforeEach(function(done) {
Defaults.BACKOFF_OFFSET = 3;
helpers.createAndJoinWallet(2, 2, function(s, w) {
server = s;
wallet = w;
@ -3127,8 +3128,14 @@ describe('Wallet service', function() {
});
});
});
afterEach(function(done) {
Defaults.BACKOFF_OFFSET = _oldBackoffOffset;
clock.restore();
done();
});
it('should follow backoff time after consecutive rejections', function(done) {
clock = sinon.useFakeTimers(Date.now(), 'Date');
async.series([
function(next) {
@ -3164,10 +3171,10 @@ describe('Wallet service', function() {
});
},
function(next) {
var clock = sinon.useFakeTimers(Date.now() + (Defaults.BACKOFF_TIME + 2) * 60 * 1000, 'Date');
clock.tick((Defaults.BACKOFF_TIME + 1) * 1000);
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1, TestData.copayers[0].privKey_1H_0);
server.createTxLegacy(txOpts, function(err, tx) {
clock.restore();
should.not.exist(err);
server.rejectTx({
txProposalId: tx.id,
reason: 'some reason',
@ -3176,15 +3183,25 @@ describe('Wallet service', function() {
},
function(next) {
// Do not allow a 5th tx before backoff time
var clock = sinon.useFakeTimers(Date.now() + (Defaults.BACKOFF_TIME + 2) * 60 * 1000 + 1, 'Date');
clock.tick((Defaults.BACKOFF_TIME - 1) * 1000);
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1, TestData.copayers[0].privKey_1H_0);
server.createTxLegacy(txOpts, function(err, tx) {
clock.restore();
should.exist(err);
err.code.should.equal('TX_CANNOT_CREATE');
next();
});
},
function(next) {
clock.tick(2000);
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1, TestData.copayers[0].privKey_1H_0);
server.createTxLegacy(txOpts, function(err, tx) {
should.not.exist(err);
server.rejectTx({
txProposalId: tx.id,
reason: 'some reason',
}, next);
});
},
], function(err) {
should.not.exist(err);
done();