From 6c3d7b35168d91f75567585a21df4af9ce4bd684 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Thu, 17 Dec 2015 22:58:06 +0100
Subject: [PATCH] Fix #273 Testing peers are alive: negative wait
---
app/service/PeeringService.js | 42 ++++++++++++++++++++++++++---------
1 file changed, 31 insertions(+), 11 deletions(-)
diff --git a/app/service/PeeringService.js b/app/service/PeeringService.js
index f71942c59..41000a897 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();
--
GitLab