From: <tho...@us...> - 2011-03-11 15:12:34
|
Revision: 4290 http://bigdata.svn.sourceforge.net/bigdata/?rev=4290&view=rev Author: thompsonbry Date: 2011-03-11 15:12:26 +0000 (Fri, 11 Mar 2011) Log Message: ----------- Added support for searching a variety of well known paths to locate pidstat, sar, and iostat and made start of the statistics collection robust even when one or more external processes could not be located. Moved methods related to whether we collect OS statistics, queue statistics, and whether we run an embedded servlet to report performance counters onto IIndexStore. Removed counters from NSS status page which were already reported by the Journal/Federation. A Modified Paths: -------------- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/engine/QueryEngine.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/DelegateIndexManager.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/PIDStatCollector.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SarCpuUtilizationCollector.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/StatisticsCollectorForLinux.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SysstatUtil.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/IIndexStore.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/Journal.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/JournalDelegate.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/TemporaryStore.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/relation/rule/eval/pipeline/JoinTaskFactoryTask.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/resources/StoreManager.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractClient.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractFederation.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/IBigdataClient.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorBaseStatisticsTask.java branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorStatisticsTask.java branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/resources/AbstractResourceManagerTestCase.java branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/TestEventReceiver.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/QueryHints.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/bench/NanoSparqlServer.java Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/engine/QueryEngine.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/engine/QueryEngine.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/engine/QueryEngine.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -350,7 +350,9 @@ final Counters counters = e.getValue(); - groups.makePath(tag).attach(counters.getCounters()); + // Note: path component may not be empty! + groups.makePath(tag == null | tag.length() == 0 ? "None" : tag) + .attach(counters.getCounters()); } @@ -624,8 +626,7 @@ QueryEngine.class + ".engineService"))); engineService.get().execute(ft); -// localIndexManager.getExecutorService().execute(ft); - + } else { throw new IllegalStateException("Already running"); Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/DelegateIndexManager.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/DelegateIndexManager.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/fed/DelegateIndexManager.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -1,6 +1,8 @@ package com.bigdata.bop.fed; import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import com.bigdata.bfs.BigdataFileSystem; import com.bigdata.btree.BTree; @@ -129,8 +131,25 @@ } - public String toString() { + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return dataService.getFederation().addScheduledTask(task, initialDelay, delay, unit); + } + public boolean getCollectPlatformStatistics() { + return dataService.getFederation().getCollectPlatformStatistics(); + } + + public boolean getCollectQueueStatistics() { + return dataService.getFederation().getCollectQueueStatistics(); + } + + public int getHttpdPort() { + return dataService.getFederation().getHttpdPort(); + } + + public String toString() { + return super.toString() + "{dataServiceUUID=" + dataService.getServiceUUID() + "}"; Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/PIDStatCollector.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/PIDStatCollector.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/PIDStatCollector.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -251,7 +251,7 @@ final List<String> command = new LinkedList<String>(); - command.add(new File(SysstatUtil.getPath(), "pidstat").getPath()); + command.add(SysstatUtil.getPath("pidstat").getPath()); command.add("-p"); command.add(""+pid); Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SarCpuUtilizationCollector.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SarCpuUtilizationCollector.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SarCpuUtilizationCollector.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -177,7 +177,7 @@ final List<String> command = new LinkedList<String>(); - command.add(new File(SysstatUtil.getPath(), "sar").getPath()); + command.add(SysstatUtil.getPath("sar").getPath()); // Note: Request the CPU stats. command.add("-u"); Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/StatisticsCollectorForLinux.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/StatisticsCollectorForLinux.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/StatisticsCollectorForLinux.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -68,13 +68,25 @@ super.start(); if (sar1 != null) - sar1.start(); + try { + sar1.start(); + } catch (Throwable t) { + log.error(t, t); + } if (vmstat != null) - vmstat.start(); + try { + vmstat.start(); + } catch (Throwable t) { + log.error(t, t); + } if (pidstat != null) - pidstat.start(); + try { + pidstat.start(); + } catch (Throwable t) { + log.error(t, t); + } } @@ -86,13 +98,25 @@ super.stop(); if (sar1 != null) - sar1.stop(); + try { + sar1.stop(); + } catch (Throwable t) { + log.error(t, t); + } if (vmstat != null) - vmstat.stop(); + try { + vmstat.stop(); + } catch (Throwable t) { + log.error(t, t); + } if (pidstat != null) - pidstat.stop(); + try { + pidstat.stop(); + } catch (Throwable t) { + log.error(t, t); + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SysstatUtil.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SysstatUtil.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/counters/linux/SysstatUtil.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -49,24 +49,72 @@ final protected static Logger log = Logger .getLogger(AbstractStatisticsCollector.class); - /** - * Returns the path to the sysstat utilities (pidstat, sar, etc). The - * default is <code>/usr/bin</code>. This may be overridden using the - * <code>com.bigdata.counters.linux.sysstat.path</code> property. - * - * @return The path. - */ - static public final File getPath() { + public interface Options { + + String PATH = "com.bigdata.counters.linux.sysstat.path"; + + String DEFAULT_PATH = "/usr/bin"; + } - final String PATH = "com.bigdata.counters.linux.sysstat.path"; + /** + * Returns the path to the specified sysstat utility (pidstat, sar, etc). + * The default is directory is {@value Options#DEFAULT_PATH}. This may be + * overridden using the {@value Options#PATH} property. The following + * directories are also searched if the program is not found in the + * configured default location: + * <ul> + * <li>/usr/bin</li> + * <li>/usr/local/bin</li> + * </ul> + * + * @return The path to the specified utility. If the utility was not found, + * then the configured path to the utility will be returned anyway. + */ + static public final File getPath(final String cmd) { - final File file = new File(System.getProperty(PATH, "/usr/bin/")); + File f, path; + final File configuredPath = path = new File(System.getProperty(Options.PATH, + Options.DEFAULT_PATH)); if (log.isInfoEnabled()) - log.info(PATH + "=" + file); + log.info(Options.PATH + "=" + configuredPath); - return file; - + if (!(f=new File(path, cmd)).exists() && true) { + + log.warn("Not found: " + f); + + path = new File("/usr/bin"); + + if (!(f = new File(path, cmd)).exists()) { + + log.warn("Not found: " + f); + + path = new File("/usr/local/bin"); + + if (!(f = new File(path, cmd)).exists()) { + + log.warn("Not found: " + f); + + log.error("Could not locate: '" + cmd + "'. Set '-D" + + Options.PATH + "=<dir>'"); + + // restore default even though not found. + path = configuredPath; + + } + + } + + } + + if (configuredPath != path) { + + log.warn("Using effective path: " + Options.PATH + "=" + path); + + } + + return new File(path, cmd); + } /** Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/AbstractTask.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -42,6 +42,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -2531,8 +2532,25 @@ delegate.detachContext(this); } - } + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return delegate.addScheduledTask(task, initialDelay, delay, unit); + } + public boolean getCollectPlatformStatistics() { + return delegate.getCollectPlatformStatistics(); + } + + public boolean getCollectQueueStatistics() { + return delegate.getCollectQueueStatistics(); + } + + public int getHttpdPort() { + return delegate.getHttpdPort(); + } + + } // class IsolatatedActionJournal + /** * A read-only view of an {@link IJournal} that is used to enforce read-only * semantics on tasks using {@link AbstractTask#getJournal()} to access the @@ -2900,8 +2918,25 @@ return delegate.getRootBlocks(startTime); } - } + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return delegate.addScheduledTask(task, initialDelay, delay, unit); + } + public boolean getCollectPlatformStatistics() { + return delegate.getCollectPlatformStatistics(); + } + + public boolean getCollectQueueStatistics() { + return delegate.getCollectQueueStatistics(); + } + + public int getHttpdPort() { + return delegate.getHttpdPort(); + } + + } // class ReadOnlyJournal + /** * Delegate pattern for {@link IIndexManager}. * @@ -2959,6 +2994,23 @@ public TemporaryStore getTempStore() { return delegate.getTempStore(); } + + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return delegate.addScheduledTask(task, initialDelay, delay, unit); + } + + public boolean getCollectPlatformStatistics() { + return delegate.getCollectPlatformStatistics(); + } + + public boolean getCollectQueueStatistics() { + return delegate.getCollectQueueStatistics(); + } + + public int getHttpdPort() { + return delegate.getHttpdPort(); + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/IIndexStore.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/IIndexStore.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/IIndexStore.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -24,12 +24,18 @@ package com.bigdata.journal; import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import com.bigdata.bfs.BigdataFileSystem; import com.bigdata.btree.AbstractBTree; import com.bigdata.btree.IIndex; +import com.bigdata.counters.CounterSet; +import com.bigdata.counters.ICounter; import com.bigdata.rawstore.IRawStore; import com.bigdata.relation.locator.IResourceLocator; +import com.bigdata.service.ILoadBalancerService; +import com.bigdata.service.IBigdataClient.Options; import com.bigdata.sparse.GlobalRowStoreSchema; import com.bigdata.sparse.SparseRowStore; @@ -121,10 +127,47 @@ */ public ExecutorService getExecutorService(); + /** + * Adds a task which will run until canceled, until it throws an exception, + * or until the service is shutdown. + * + * @param task + * The task. + * @param initialDelay + * The initial delay. + * @param delay + * The delay between invocations. + * @param unit + * The units for the delay parameters. + * + * @return The {@link ScheduledFuture} for that task. + */ + public ScheduledFuture<?> addScheduledTask(final Runnable task, + final long initialDelay, final long delay, final TimeUnit unit); + /** - * The service that may be used to acquire synchronous distributed locks - * <strong>without deadlock detection</strong>. + * <code>true</code> iff performance counters will be collected for the + * platform on which the client is running. */ + public boolean getCollectPlatformStatistics(); + + /** + * <code>true</code> iff statistics will be collected for work queues. + */ + public boolean getCollectQueueStatistics(); + + /** + * The port on which the optional httpd service will be run. The httpd + * service exposes statistics about the client, its work queues, the + * platform on which it is running, etc. If this is ZERO (0), then the + * port will be chosen randomly. + */ + public int getHttpdPort(); + + /** + * The service that may be used to acquire synchronous distributed locks + * <strong>without deadlock detection</strong>. + */ public IResourceLockService getResourceLockService(); /** Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/Journal.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/Journal.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/Journal.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -36,6 +36,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -73,14 +74,12 @@ import com.bigdata.service.DataService; import com.bigdata.service.IBigdataClient; import com.bigdata.service.IBigdataFederation; -import com.bigdata.service.LoadBalancerService; import com.bigdata.sparse.GlobalRowStoreHelper; import com.bigdata.sparse.SparseRowStore; import com.bigdata.util.concurrent.DaemonThreadFactory; import com.bigdata.util.concurrent.LatchedExecutor; import com.bigdata.util.concurrent.ShutdownHelper; -import com.bigdata.util.concurrent.TaskCounters; -import com.bigdata.util.concurrent.ThreadPoolExecutorStatisticsTask; +import com.bigdata.util.concurrent.ThreadPoolExecutorBaseStatisticsTask; import com.bigdata.util.httpd.AbstractHTTPD; /** @@ -179,28 +178,20 @@ * Boolean option for the collection of statistics from the various * queues using to run tasks (default * {@link #DEFAULT_COLLECT_QUEUE_STATISTICS}). - * - * @see ThreadPoolExecutorStatisticsTask */ String COLLECT_QUEUE_STATISTICS = Journal.class.getName() + ".collectQueueStatistics"; String DEFAULT_COLLECT_QUEUE_STATISTICS = "false"; - /** - * Integer option specifies the port on which an httpd service will be - * started that exposes the {@link CounterSet} for the client (default - * {@value #DEFAULT_HTTPD_PORT}). When ZERO (0), a random port will be - * used. The httpd service may be disabled by specifying <code>-1</code> - * as the port. - * <p> - * Note: The httpd service for the {@link LoadBalancerService} is - * normally run on a known port in order to make it easy to locate that - * service, e.g., port 80, 8000 or 8080, etc. This MUST be overridden for - * the {@link LoadBalancerService} it its configuration since - * {@link #DEFAULT_HTTPD_PORT} will otherwise cause a random port to be - * assigned. - */ + /** + * Integer option specifies the port on which an httpd service will be + * started that exposes the {@link CounterSet} for the client (default + * {@value #DEFAULT_HTTPD_PORT}). When ZERO (0), a random port will be + * used and the actual port selected may be discovered using + * {@link Journal#getHttpdURL()}. The httpd service may be disabled by + * specifying <code>-1</code> as the port. + */ String HTTPD_PORT = Journal.class.getName() + ".httpdPort"; /** @@ -455,10 +446,10 @@ tmp.makePath(IJournalCounters.transactionManager) .attach(localTransactionManager.getCounters()); - if (threadPoolExecutorStatisticsTask != null) { + if (queueSampleTask != null) { tmp.makePath(IJournalCounters.executorService) - .attach(threadPoolExecutorStatisticsTask.getCounters()); + .attach(queueSampleTask.getCounters()); } @@ -1485,18 +1476,9 @@ * * @see Options#COLLECT_QUEUE_STATISTICS */ - private ThreadPoolExecutorStatisticsTask threadPoolExecutorStatisticsTask = null; + private ThreadPoolExecutorBaseStatisticsTask queueSampleTask = null; /** - * Counters that aggregate across all tasks submitted to the Journal's - * {@link ExecutorService}. Those counters are sampled by a - * {@link ThreadPoolExecutorStatisticsTask}. - * - * @see Options#COLLECT_QUEUE_STATISTICS - */ - private final TaskCounters taskCounters = new TaskCounters(); - - /** * Collects interesting statistics on the host and process. * * @see Options#COLLECT_PLATFORM_STATISTICS @@ -1627,18 +1609,15 @@ } final long initialDelay = 0; // initial delay in ms. - final long delay = 1000; // delay in ms. - final TimeUnit unit = TimeUnit.MILLISECONDS; + final long delay = 1000; // delay in ms. + final TimeUnit unit = TimeUnit.MILLISECONDS; - final String relpath = "Thread Pool"; + queueSampleTask = new ThreadPoolExecutorBaseStatisticsTask( + executorService); - threadPoolExecutorStatisticsTask = new ThreadPoolExecutorStatisticsTask( - relpath, executorService, taskCounters); + addScheduledTask(queueSampleTask, initialDelay, + delay, unit); - scheduledExecutorService - .scheduleWithFixedDelay(threadPoolExecutorStatisticsTask, - initialDelay, delay, unit); - } /** @@ -1749,8 +1728,8 @@ + ":" + httpd.getPort() + "/?path=" + URLEncoder.encode("", "UTF-8"); - if (log.isInfoEnabled()) - log.info("start:\n" + httpdURL); + if(log.isInfoEnabled()) + log.info("Performance counters: " + httpdURL); } @@ -1760,4 +1739,52 @@ } // class StartDeferredTasks + public ScheduledFuture<?> addScheduledTask(final Runnable task, + final long initialDelay, final long delay, final TimeUnit unit) { + + if (task == null) + throw new IllegalArgumentException(); + + if (log.isInfoEnabled()) + log.info("Scheduling task: task=" + task.getClass() + + ", initialDelay=" + initialDelay + ", delay=" + delay + + ", unit=" + unit); + + return scheduledExecutorService.scheduleWithFixedDelay(task, + initialDelay, delay, unit); + + } + + /** + * {@inheritDoc} + * + * @see Options#COLLECT_PLATFORM_STATISTICS + */ + final public boolean getCollectPlatformStatistics() { + return Boolean.valueOf(properties.getProperty( + Options.COLLECT_PLATFORM_STATISTICS, + Options.DEFAULT_COLLECT_PLATFORM_STATISTICS)); + } + + /** + * {@inheritDoc} + * + * @see Options#COLLECT_QUEUE_STATISTICS + */ + final public boolean getCollectQueueStatistics() { + return Boolean.valueOf(properties.getProperty( + Options.COLLECT_QUEUE_STATISTICS, + Options.DEFAULT_COLLECT_QUEUE_STATISTICS)); + } + + /** + * {@inheritDoc} + * + * @see Options#HTTPD_PORT + */ + final public int getHttpdPort() { + return Integer.valueOf(properties.getProperty(Options.HTTPD_PORT, + Options.DEFAULT_HTTPD_PORT)); + } + } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/JournalDelegate.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/JournalDelegate.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/JournalDelegate.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -30,6 +30,8 @@ import java.util.Properties; import java.util.UUID; import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import com.bigdata.bfs.BigdataFileSystem; import com.bigdata.btree.BTree; @@ -226,4 +228,22 @@ public TemporaryStore getTempStore() { return delegate.getTempStore(); } + + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return delegate.addScheduledTask(task, initialDelay, delay, unit); + } + + @Override + public boolean getCollectPlatformStatistics() { + return delegate.getCollectPlatformStatistics(); + } + + public boolean getCollectQueueStatistics() { + return delegate.getCollectQueueStatistics(); + } + + public int getHttpdPort() { + return delegate.getHttpdPort(); + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/TemporaryStore.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/TemporaryStore.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/journal/TemporaryStore.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -31,6 +31,8 @@ import java.util.Properties; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import com.bigdata.bfs.BigdataFileSystem; import com.bigdata.bfs.GlobalFileSystemHelper; @@ -437,5 +439,34 @@ return this; } + + /** + * Not supported, returns <code>null</code>. + */ + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return null; + } + + /** + * Not supported, returns <code>false</code>. + */ + public boolean getCollectPlatformStatistics() { + return false; + } + + /** + * Not supported, returns <code>false</code>. + */ + public boolean getCollectQueueStatistics() { + return false; + } + + /** + * Not supported, returns <code>false</code>. + */ + public int getHttpdPort() { + return -1; + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/relation/rule/eval/pipeline/JoinTaskFactoryTask.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/relation/rule/eval/pipeline/JoinTaskFactoryTask.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/relation/rule/eval/pipeline/JoinTaskFactoryTask.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -3,6 +3,8 @@ import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import org.apache.log4j.Logger; @@ -488,6 +490,23 @@ } + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return dataService.getFederation().addScheduledTask(task, initialDelay, delay, unit); + } + + public boolean getCollectPlatformStatistics() { + return dataService.getFederation().getCollectPlatformStatistics(); + } + + public boolean getCollectQueueStatistics() { + return dataService.getFederation().getCollectQueueStatistics(); + } + + public int getHttpdPort() { + return dataService.getFederation().getHttpdPort(); + } + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/resources/StoreManager.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/resources/StoreManager.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/resources/StoreManager.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -46,6 +46,7 @@ import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; @@ -2701,6 +2702,23 @@ } + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return getFederation().addScheduledTask(task, initialDelay, delay, unit); + } + + public boolean getCollectPlatformStatistics() { + return getFederation().getCollectPlatformStatistics(); + } + + public boolean getCollectQueueStatistics() { + return getFederation().getCollectQueueStatistics(); + } + + public int getHttpdPort() { + return getFederation().getHttpdPort(); + } + } // class ManagedJournal /** Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractClient.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractClient.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractClient.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -66,9 +66,6 @@ private final int indexCacheCapacity; private final long indexCacheTimeout; // private final long tempStoreMaxExtent; - private final boolean collectPlatformStatistics; - private final boolean collectQueueStatistics; - private final int httpdPort; /* * IBigdataClient API. @@ -140,24 +137,6 @@ // // } - public boolean getCollectPlatformStatistics() { - - return collectPlatformStatistics; - - } - - public boolean getCollectQueueStatistics() { - - return collectQueueStatistics; - - } - - public int getHttpdPort() { - - return httpdPort; - - } - /** * * @param properties @@ -337,47 +316,6 @@ // // } - { - - collectPlatformStatistics = Boolean.parseBoolean(properties - .getProperty(Options.COLLECT_PLATFORM_STATISTICS, - Options.DEFAULT_COLLECT_PLATFORM_STATISTICS)); - - if (log.isInfoEnabled()) - log.info(Options.COLLECT_PLATFORM_STATISTICS + "=" - + collectPlatformStatistics); - - } - - { - - collectQueueStatistics = Boolean.parseBoolean(properties - .getProperty(Options.COLLECT_QUEUE_STATISTICS, - Options.DEFAULT_COLLECT_QUEUE_STATISTICS)); - - if (log.isInfoEnabled()) - log.info(Options.COLLECT_QUEUE_STATISTICS + "=" - + collectQueueStatistics); - - } - - { - - httpdPort = Integer.parseInt(properties.getProperty( - Options.HTTPD_PORT, - Options.DEFAULT_HTTPD_PORT)); - - if (log.isInfoEnabled()) - log.info(Options.HTTPD_PORT+ "=" - + httpdPort); - - if (httpdPort < 0 && httpdPort != -1) - throw new RuntimeException( - Options.HTTPD_PORT - + " must be -1 (disabled), 0 (random port), or positive"); - - } - } private IFederationDelegate<T> delegate = null; Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractFederation.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractFederation.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/AbstractFederation.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -98,6 +98,10 @@ */ private AbstractClient<T> client; + private final boolean collectPlatformStatistics; + private final boolean collectQueueStatistics; + private final int httpdPort; + /** * <code>true</code> iff open. Note that during shutdown this will be set * to <code>false</code> before the client reference is cleared in order to @@ -340,6 +344,38 @@ } /** + * {@inheritDoc} + * @see IBigdataClient.Options#COLLECT_PLATFORM_STATISTICS + */ + public boolean getCollectPlatformStatistics() { + + return collectPlatformStatistics; + + } + + /** + * {@inheritDoc} + * + * @see IBigdataClient.Options#COLLECT_QUEUE_STATISTICS + */ + public boolean getCollectQueueStatistics() { + + return collectQueueStatistics; + + } + + /** + * {@inheritDoc} + * + * @see IBigdataClient.Options#HTTPD_PORT + */ + public int getHttpdPort() { + + return httpdPort; + + } + + /** * httpd reporting the live counters for the client while it is connected to * the federation. */ @@ -459,33 +495,8 @@ */ private AbstractStatisticsCollector statisticsCollector; - /** - * Adds a task which will run until canceled, until it throws an exception, - * or until the federation is {@link #shutdown()}. - * <p> - * Note: Tasks run on this service generally update sampled values on - * {@link ICounter}s reported to the {@link ILoadBalancerService}. Basic - * information on the {@link #getExecutorService()} is reported - * automatically. Clients may add additional tasks to report on client-side - * aspects of their application. - * <p> - * Note: Non-sampled counters are automatically conveyed to the - * {@link ILoadBalancerService} once added to the basic {@link CounterSet} - * returned by {@link #getCounterSet()}. - * - * @param task - * The task. - * @param initialDelay - * The initial delay. - * @param delay - * The delay between invocations. - * @param unit - * The units for the delay parameters. - * - * @return The {@link ScheduledFuture} for that task. - */ - public ScheduledFuture addScheduledTask(Runnable task, - long initialDelay, long delay, TimeUnit unit) { + public ScheduledFuture<?> addScheduledTask(final Runnable task, + final long initialDelay, final long delay, final TimeUnit unit) { if (task == null) throw new IllegalArgumentException(); @@ -495,8 +506,8 @@ + ", initialDelay=" + initialDelay + ", delay=" + delay + ", unit=" + unit); - return scheduledExecutorService.scheduleWithFixedDelay(task, initialDelay, delay, - unit); + return scheduledExecutorService.scheduleWithFixedDelay(task, + initialDelay, delay, unit); } @@ -660,6 +671,48 @@ // tempStoreFactory = new TemporaryStoreFactory(this.client // .getTempStoreMaxExtent()); + final Properties properties = client.getProperties(); + { + + collectPlatformStatistics = Boolean.parseBoolean(properties + .getProperty(Options.COLLECT_PLATFORM_STATISTICS, + Options.DEFAULT_COLLECT_PLATFORM_STATISTICS)); + + if (log.isInfoEnabled()) + log.info(Options.COLLECT_PLATFORM_STATISTICS + "=" + + collectPlatformStatistics); + + } + + { + + collectQueueStatistics = Boolean.parseBoolean(properties + .getProperty(Options.COLLECT_QUEUE_STATISTICS, + Options.DEFAULT_COLLECT_QUEUE_STATISTICS)); + + if (log.isInfoEnabled()) + log.info(Options.COLLECT_QUEUE_STATISTICS + "=" + + collectQueueStatistics); + + } + + { + + httpdPort = Integer.parseInt(properties.getProperty( + Options.HTTPD_PORT, + Options.DEFAULT_HTTPD_PORT)); + + if (log.isInfoEnabled()) + log.info(Options.HTTPD_PORT+ "=" + + httpdPort); + + if (httpdPort < 0 && httpdPort != -1) + throw new RuntimeException( + Options.HTTPD_PORT + + " must be -1 (disabled), 0 (random port), or positive"); + + } + addScheduledTask( new SendEventsTask(),// task to run. 100, // initialDelay (ms) @@ -1140,7 +1193,7 @@ */ protected void startQueueStatisticsCollection() { - if (!client.getCollectQueueStatistics()) { + if (!getCollectQueueStatistics()) { if (log.isInfoEnabled()) log.info("Queue statistics collection disabled: " @@ -1176,7 +1229,7 @@ final Properties p = getClient().getProperties(); - if (!getClient().getCollectPlatformStatistics()) { + if (!getCollectPlatformStatistics()) { return; @@ -1238,22 +1291,21 @@ } - /** - * Start the local httpd service (if enabled). The service is started on - * the {@link IBigdataClient#getHttpdPort()}, on a randomly assigned - * port if the port is <code>0</code>, or NOT started if the port is - * <code>-1</code>. If the service is started, then the URL for the - * service is reported to the load balancer and also written into the - * file system. When started, the httpd service will be shutdown with - * the federation. - * - * @throws UnsupportedEncodingException - */ + /** + * Start the local httpd service (if enabled). The service is started on + * the {@link #getHttpdPort()}, on a randomly assigned port if the port + * is <code>0</code>, or NOT started if the port is <code>-1</code>. If + * the service is started, then the URL for the service is reported to + * the load balancer and also written into the file system. When + * started, the httpd service will be shutdown with the federation. + * + * @throws UnsupportedEncodingException + */ protected void startHttpdService() throws UnsupportedEncodingException { final String path = getServiceCounterPathPrefix(); - final int httpdPort = client.getHttpdPort(); + final int httpdPort = getHttpdPort(); if (httpdPort == -1) { Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/IBigdataClient.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/IBigdataClient.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/service/IBigdataClient.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -196,30 +196,6 @@ public long getIndexCacheTimeout(); /** - * <code>true</code> iff performance counters will be collected for the - * platform on which the client is running. - * - * @see Options#COLLECT_PLATFORM_STATISTICS - */ - public boolean getCollectPlatformStatistics(); - - /** - * <code>true</code> iff statistics will be collected for work queues. - * - * @see Options#COLLECT_QUEUE_STATISTICS - */ - public boolean getCollectQueueStatistics(); - - /** - * The port on which the optional httpd service will be run. The httpd - * service exposes statistics about the client, its work queues, the - * platform on which it is running, etc. - * - * @see Options#HTTPD_PORT - */ - public int getHttpdPort(); - - /** * An object wrapping the properties used to configure the client. */ public Properties getProperties(); Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorBaseStatisticsTask.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorBaseStatisticsTask.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorBaseStatisticsTask.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -21,7 +21,7 @@ */ public class ThreadPoolExecutorBaseStatisticsTask implements Runnable { - protected static final Logger log = Logger + private static final Logger log = Logger .getLogger(ThreadPoolExecutorBaseStatisticsTask.class); /** Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorStatisticsTask.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorStatisticsTask.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/util/concurrent/ThreadPoolExecutorStatisticsTask.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -29,7 +29,7 @@ */ public class ThreadPoolExecutorStatisticsTask implements Runnable { - protected static final Logger log = Logger.getLogger(ThreadPoolExecutorStatisticsTask.class); + private static final Logger log = Logger.getLogger(ThreadPoolExecutorStatisticsTask.class); /** * The label for the executor service (used in log messages). Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/resources/AbstractResourceManagerTestCase.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/resources/AbstractResourceManagerTestCase.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/resources/AbstractResourceManagerTestCase.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -39,6 +39,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import com.bigdata.bfs.BigdataFileSystem; @@ -621,9 +623,25 @@ } public CounterSet getHostCounterSet() { - // TODO Auto-generated method stub return null; } + + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return null; + } + + public boolean getCollectPlatformStatistics() { + return false; + } + + public boolean getCollectQueueStatistics() { + return false; + } + + public int getHttpdPort() { + return 0; + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/TestEventReceiver.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/TestEventReceiver.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata/src/test/com/bigdata/service/TestEventReceiver.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -40,6 +40,8 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import junit.framework.TestCase2; @@ -717,6 +719,23 @@ public CounterSet getHostCounterSet() { return null; } + + public ScheduledFuture<?> addScheduledTask(Runnable task, + long initialDelay, long delay, TimeUnit unit) { + return null; + } + + public boolean getCollectPlatformStatistics() { + return false; + } + + public boolean getCollectQueueStatistics() { + return false; + } + + public int getHttpdPort() { + return 0; + } } Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/QueryHints.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/QueryHints.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/QueryHints.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -94,6 +94,6 @@ /** * @see #TAG */ - String DEFAULT_TAG = "N/A"; + String DEFAULT_TAG = ""; } Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/bench/NanoSparqlServer.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/bench/NanoSparqlServer.java 2011-03-10 21:22:30 UTC (rev 4289) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/bench/NanoSparqlServer.java 2011-03-11 15:12:26 UTC (rev 4290) @@ -57,6 +57,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -82,7 +83,6 @@ import org.openrdf.rio.rdfxml.RDFXMLWriter; import org.openrdf.sail.SailException; -import com.bigdata.LRUNexus; import com.bigdata.bop.BOpUtility; import com.bigdata.bop.BufferAnnotations; import com.bigdata.bop.IPredicate; @@ -93,11 +93,9 @@ import com.bigdata.btree.BytesUtil; import com.bigdata.btree.IndexMetadata; import com.bigdata.counters.httpd.CounterSetHTTPD; -import com.bigdata.journal.AbstractJournal; import com.bigdata.journal.IAtomicStore; import com.bigdata.journal.IBufferStrategy; import com.bigdata.journal.IIndexManager; -import com.bigdata.journal.IJournal; import com.bigdata.journal.ITransactionService; import com.bigdata.journal.ITx; import com.bigdata.journal.Journal; @@ -121,6 +119,7 @@ import com.bigdata.service.jini.JiniClient; import com.bigdata.sparse.ITPS; import com.bigdata.util.concurrent.DaemonThreadFactory; +import com.bigdata.util.concurrent.ThreadPoolExecutorBaseStatisticsTask; import com.bigdata.util.httpd.AbstractHTTPD; import com.bigdata.util.httpd.NanoHTTPD; @@ -321,7 +320,29 @@ } + if (indexManager.getCollectQueueStatistics()) { + + final long initialDelay = 0; // initial delay in ms. + final long delay = 1000; // delay in ms. + final TimeUnit unit = TimeUnit.MILLISECONDS; + + queueSampleTask = new ThreadPoolExecutorBaseStatisticsTask( + (ThreadPoolExecutor) queryService); + + queueStatsFuture = indexManager.addScheduledTask(queueSampleTask, + initialDelay, delay, unit); + + } else { + + queueSampleTask = null; + + queueStatsFuture = null; + + } + } + private final ScheduledFuture<?> queueStatsFuture; + private final ThreadPoolExecutorBaseStatisticsTask queueSampleTask; /** * Return a list of the registered {@link AbstractTripleStore}s. @@ -585,6 +606,9 @@ public void shutdown() { if(log.isInfoEnabled()) log.info("Normal shutdown."); + // Stop collecting queue statistics. + if (queueStatsFuture != null) + queueStatsFuture.cancel(true/* mayInterruptIfRunning */); // Tell NanoHTTP to stop accepting new requests. super.shutdown(); // Stop servicing new requests. @@ -618,6 +642,9 @@ public void shutdownNow() { if(log.isInfoEnabled()) log.info("Normal shutdown."); + // Stop collecting queue statistics. + if (queueStatsFuture != null) + queueStatsFuture.cancel(true/* mayInterruptIfRunning */); // Immediately stop accepting connections and interrupt open requests. super.shutdownNow(); // Interrupt all running queries. @@ -1508,10 +1535,8 @@ * @todo add statistics for top-N queries based on query template * identifiers, which can be communicated using query hints. See // * wait for the subquery. - * @todo Report on the average query latency, average concurrency of query - * evaluation, etc. */ - public Response doStatus(final Request req) throws Exception { + private Response doStatus(final Request req) throws Exception { // SPARQL queries accepted by the SPARQL end point. final boolean showQueries = req.params.get("showQueries") != null; @@ -1554,40 +1579,47 @@ req.params))); } + + if(queueSampleTask != null) { + + // Performance counters for the NSS queries. + sb.append(queueSampleTask.getCounters().toString()); + + } - if (indexManager instanceof IJournal) { - - /* - * Stuff which is specific to a local/embedded database. - */ - - final AbstractJournal jnl = (AbstractJournal) indexManager; - - sb.append("file\t= " + jnl.getFile() + "\n"); - - sb.append("BufferMode\t= " - + jnl.getBufferStrategy().getBufferMode() + "\n"); - - sb.append("nextOffset\t= " + jnl.getRootBlockView().getNextOffset() - + "\n"); - - if (LRUNexus.INSTANCE != null) { - - sb.append(LRUNexus.Options.CLASS + "=" - + LRUNexus.INSTANCE.toString().getClass() + "\n"); - - sb.append(LRUNexus.INSTANCE.toString() + "\n"); - - } else { - - sb.append("LRUNexus is disabled."); - - } - - // show the disk access details. - sb.append(jnl.getBufferStrategy().getCounters().toString()+"\n"); - - } +// if (indexManager instanceof IJournal) { +// +// /* +// * Stuff which is specific to a local/embedded database. +// */ +// +// final AbstractJournal jnl = (AbstractJournal) indexManager; +// +// sb.append("file\t= " + jnl.getFile() + "\n"); +// +// sb.append("BufferMode\t= " +// + jnl.getBufferStrategy().getBufferMode() + "\n"); +// +// sb.append("nextOffset\t= " + jnl.getRootBlockView().getNextOffset() +// + "\n"); +// +// if (LRUNexus.INSTANCE != null) { +// +// sb.append(LRUNexus.Options.CLASS + "=" +// + LRUNexus.INSTANCE.toString().getClass() + "\n"); +// +// sb.append(LRUNexus.INSTANCE.toString() + "\n"); +// +// } else { +// +// sb.append("LRUNexus is disabled."); +// +// } +// +// // show the disk access details. +// sb.append(jnl.getBufferStrategy().getCounters().toString()+"\n"); +// +// } if(showQueries) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |