From 35f6a2e2bfa003c62d5f85c86a4b1f55184846d0 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 21 Oct 2020 13:46:31 +0000 Subject: [PATCH] NetDB: Reseed after a long downtime --- .../i2p/router/networkdb/reseed/ReseedChecker.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/router/java/src/net/i2p/router/networkdb/reseed/ReseedChecker.java b/router/java/src/net/i2p/router/networkdb/reseed/ReseedChecker.java index 309e35e66c..d88b6e1db4 100644 --- a/router/java/src/net/i2p/router/networkdb/reseed/ReseedChecker.java +++ b/router/java/src/net/i2p/router/networkdb/reseed/ReseedChecker.java @@ -32,9 +32,12 @@ public class ReseedChecker { private volatile String _lastStatus = ""; private volatile String _lastError = ""; private volatile boolean _networkLogged; + private volatile boolean _alreadyRun; public static final int MINIMUM = 50; private static final long STATUS_CLEAN_TIME = 20*60*1000; + // if down this long, reseed at startup + private static final long RESEED_MIN_DOWNTIME = 60*24*60*60*1000L; /** * All reseeding must be done through this instance. @@ -54,8 +57,14 @@ public class ReseedChecker { * @return true if a reseed was started */ public boolean checkReseed(int count) { - if (count >= MINIMUM) - return false; + if (_alreadyRun) { + if (count >= MINIMUM) + return false; + } else { + _alreadyRun = true; + if (count >= MINIMUM && _context.getEstimatedDowntime() < RESEED_MIN_DOWNTIME) + return false; + } if (_context.getBooleanProperty(Reseeder.PROP_DISABLE)) { int x = count - 1; // us @@ -126,6 +135,7 @@ public class ReseedChecker { */ public boolean requestReseed() { if (_inProgress.compareAndSet(false, true)) { + _alreadyRun = true; try { Reseeder reseeder = new Reseeder(_context, this); reseeder.requestReseed();