Sybil: Thread analyzer at reduced priority

Don't do pair distance check unless enough memory
This commit is contained in:
zzz
2023-02-08 07:28:46 -05:00
parent c6fca9da6a
commit 338985a4cc

View File

@@ -40,6 +40,7 @@ import net.i2p.stat.Rate;
import net.i2p.stat.RateAverages;
import net.i2p.stat.RateStat;
import net.i2p.util.Addresses;
import net.i2p.util.I2PAppThread;
import net.i2p.util.Log;
import net.i2p.util.ObjectCounterUnsafe;
import net.i2p.util.SystemVersion;
@@ -50,7 +51,7 @@ import net.i2p.util.Translate;
* @since 0.9.38 split out from SybilRenderer
*
*/
public class Analysis extends JobImpl implements RouterApp {
public class Analysis extends JobImpl implements RouterApp, Runnable {
private final RouterContext _context;
private final Log _log;
@@ -181,6 +182,16 @@ public class Analysis extends JobImpl implements RouterApp {
/////// begin Job methods
public void runJob() {
Thread t = new I2PAppThread(this, getDisplayName());
t.setPriority(Thread.MIN_PRIORITY);
t.start();
schedule();
}
/**
* @since 0.9.58
*/
public void run() {
long now = _context.clock().now();
_log.info("Running analysis");
Map<Hash, Points> points = backgroundAnalysis(_context.getBooleanProperty(PROP_NONFF));
@@ -194,7 +205,6 @@ public class Analysis extends JobImpl implements RouterApp {
_log.error("Failed to store analysis", ioe);
}
}
schedule();
}
/////// end Job methods
@@ -391,8 +401,12 @@ public class Analysis extends JobImpl implements RouterApp {
calculateIPGroups48(ris, points);
// Pairwise distance analysis
List<Pair> pairs = new ArrayList<Pair>(PAIRMAX);
calculatePairDistance(ris, points, pairs);
// O(n**2)
long sz = ris.size();
if (sz * sz < SystemVersion.getMaxMemory() / 10) {
List<Pair> pairs = new ArrayList<Pair>(PAIRMAX);
calculatePairDistance(ris, points, pairs);
}
// Distance to our router analysis
// closest to our routing key today