diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java index 764e8d7995d57f11a11f2c717de99356f74180d1..bac0fb2fd747736981162b70c2f52a93aa6b43a8 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java @@ -11,6 +11,9 @@ import java.util.StringTokenizer; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Semaphore; +import org.rrd4j.core.RrdBackendFactory; +import org.rrd4j.core.RrdNioBackendFactory; + import net.i2p.I2PAppContext; import net.i2p.app.ClientApp; import net.i2p.app.ClientAppState; @@ -83,15 +86,27 @@ public class StatSummarizer implements Runnable, ClientApp { } _isRunning = true; boolean isPersistent = _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT); - if (!isPersistent) + int syncThreads; + if (isPersistent) { + String spec = _context.getProperty("stat.summaries", DEFAULT_DATABASES); + String[] rates = DataHelper.split(spec, ","); + syncThreads = Math.min(rates.length / 2, 4); + } else { + syncThreads = 0; deleteOldRRDs(); + } + RrdNioBackendFactory.setSyncPoolSize(syncThreads); _thread = Thread.currentThread(); _context.clientAppManager().register(this); String specs = ""; try { while (_isRunning && _context.router().isAlive()) { specs = adjustDatabases(specs); - try { Thread.sleep(60*1000); } catch (InterruptedException ie) {} + try { + Thread.sleep(60*1000); + } catch (InterruptedException ie) { + break; + } } } finally { _isRunning = false; @@ -463,6 +478,11 @@ public class StatSummarizer implements Runnable, ClientApp { lsnr.stopListening(); } _listeners.clear(); + // stops the sync thread pool in NIO; noop if not persistent, + // we set num threads to zero in run() above + try { + RrdBackendFactory.getDefaultFactory().close(); + } catch (IOException ioe) {} } } }