diff --git a/app/service/PeeringService.js b/app/service/PeeringService.js index f71942c5984a5f5b2040c24fb622ee886ef32f7d..41000a897fff3d02312d43c9a87dc51da2479bf4 100644 --- a/app/service/PeeringService.js +++ b/app/service/PeeringService.js @@ -217,16 +217,8 @@ function PeeringService(server, pair, dal) { if (p.status == 'DOWN') { let shouldDisplayDelays = displayDelays; let downAt = p.first_down || now; - let downDelay = Math.floor((now - downAt) / 1000); - let waitedSinceLastTest = Math.floor((now - (p.last_try || now)) / 1000); - let waitRemaining = downDelay <= constants.DURATIONS.A_MINUTE ? constants.DURATIONS.TEN_SECONDS - waitedSinceLastTest : ( - downDelay <= constants.DURATIONS.TEN_MINUTES ? constants.DURATIONS.A_MINUTE - waitedSinceLastTest : ( - downDelay <= constants.DURATIONS.AN_HOUR ? constants.DURATIONS.TEN_MINUTES - waitedSinceLastTest : ( - downDelay <= constants.DURATIONS.A_DAY ? constants.DURATIONS.AN_HOUR - waitedSinceLastTest : ( - downDelay <= constants.DURATIONS.A_WEEK ? constants.DURATIONS.A_DAY - waitedSinceLastTest : ( - downDelay <= constants.DURATIONS.A_MONTH ? constants.DURATIONS.A_WEEK - waitedSinceLastTest : - 1 // Do not check it, DOWN for too long - ))))); + let waitRemaining = getWaitRemaining(now, downAt, p.last_try); + let nextWaitRemaining = getWaitRemaining(now, downAt, now); let testIt = waitRemaining <= 0; if (testIt) { // We try to reconnect only with peers marked as DOWN @@ -244,6 +236,8 @@ function PeeringService(server, pair, dal) { // The peering changed yield Q.nfcall(that.submit, peering); } + // Do not need to display when next check will occur: the node is now UP + shouldDisplayDelays = false; } catch (err) { // Error: we set the peer as DOWN logger.warn("Peer record %s: %s", p.pubkey, err.code || err.message || err); @@ -252,7 +246,7 @@ function PeeringService(server, pair, dal) { } } if (shouldDisplayDelays) { - logger.info('Will check that node %s (%s:%s) is UP in %s min...', p.pubkey.substr(0, 6), p.getHostPreferDNS(), p.getPort(), (waitRemaining / 60).toFixed(0)); + logger.info('Will check that node %s (%s:%s) is UP in %s min...', p.pubkey.substr(0, 6), p.getHostPreferDNS(), p.getPort(), (nextWaitRemaining / 60).toFixed(0)); } } } @@ -261,6 +255,32 @@ function PeeringService(server, pair, dal) { .catch(done); } + function getWaitRemaining(now, downAt, last_try) { + let downDelay = Math.floor((now - downAt) / 1000); + let waitedSinceLastTest = Math.floor((now - (last_try || now)) / 1000); + let waitRemaining = 1; + if (downDelay <= constants.DURATIONS.A_MINUTE) { + waitRemaining = constants.DURATIONS.TEN_SECONDS - waitedSinceLastTest; + } + else if (downDelay <= constants.DURATIONS.TEN_MINUTES) { + waitRemaining = constants.DURATIONS.A_MINUTE - waitedSinceLastTest; + } + else if (downDelay <= constants.DURATIONS.AN_HOUR) { + waitRemaining = constants.DURATIONS.TEN_MINUTES - waitedSinceLastTest; + } + else if (downDelay <= constants.DURATIONS.A_DAY) { + waitRemaining = constants.DURATIONS.AN_HOUR - waitedSinceLastTest; + } + else if (downDelay <= constants.DURATIONS.A_WEEK) { + waitRemaining = constants.DURATIONS.A_DAY - waitedSinceLastTest; + } + else if (downDelay <= constants.DURATIONS.A_MONTH) { + waitRemaining = constants.DURATIONS.A_WEEK - waitedSinceLastTest; + } + // Else do not check it, DOWN for too long + return waitRemaining; + } + function syncBlock(callback) { return co(function *() { let current = yield dal.getCurrentBlockOrNull();