You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2010/08/12 20:18:44 UTC
svn commit: r984896 - in /openjpa/trunk:
openjpa-integration/jmx/src/test/java/org/apache/openjpa/integration/jmx/
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/
openjpa-kernel/src/main/java/org/apache/openjpa/datacache/
openjpa-kernel/src/...
Author: jrbauer
Date: Thu Aug 12 18:18:43 2010
New Revision: 984896
URL: http://svn.apache.org/viewvc?rev=984896&view=rev
Log:
OPENJPA-1739 Added additional metrics to cache statistics and updated instrumentation.
Modified:
openjpa/trunk/openjpa-integration/jmx/src/test/java/org/apache/openjpa/integration/jmx/TestJMXPlatformMBeans.java
openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryCacheImpl.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractQueryCache.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractDataCacheInstrument.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractQueryCacheInstrument.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/DataCacheInstrument.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/QueryCacheInstrument.java
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryStatistics.java
Modified: openjpa/trunk/openjpa-integration/jmx/src/test/java/org/apache/openjpa/integration/jmx/TestJMXPlatformMBeans.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-integration/jmx/src/test/java/org/apache/openjpa/integration/jmx/TestJMXPlatformMBeans.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-integration/jmx/src/test/java/org/apache/openjpa/integration/jmx/TestJMXPlatformMBeans.java (original)
+++ openjpa/trunk/openjpa-integration/jmx/src/test/java/org/apache/openjpa/integration/jmx/TestJMXPlatformMBeans.java Thu Aug 12 18:18:43 2010
@@ -82,6 +82,14 @@ public class TestJMXPlatformMBeans exten
assertTrue(oemf.getCache().contains(CachedEntity.class, id));
ce = oem.find(CachedEntity.class, id);
+ assertTrue(dci.getHitCount() > 0);
+ try {
+ assertTrue(dci.getHitCount(CachedEntity.class.getName()) > 0);
+ } catch (ClassNotFoundException e) {
+ fail("CachedEntity class not found");
+ }
+ assertTrue(dci.getWriteCount() > 0);
+ assertTrue(dci.classNames().contains(CachedEntity.class.getName()));
// Thread out to do out-of-band MBean-based validation. This could
// have been done on the same thread, but threading out makes for a
// more realistic test.
@@ -271,6 +279,9 @@ public class TestJMXPlatformMBeans exten
assertTrue(clsHitCount > 0);
assertTrue(clsReadCount > 0);
assertTrue(clsWriteCount > 0);
+ Set<String> classNames = (Set<String>)mbs.invoke(on, "classNames", null, null);
+ assertNotNull(classNames);
+ assertTrue(classNames.contains(CachedEntity.class.getName()));
// Invoke the reset method and recollect stats
mbs.invoke(on, "reset", null, null);
hitCount = (Long)mbs.getAttribute(on, "HitCount");
Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryCacheImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryCacheImpl.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryCacheImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PreparedQueryCacheImpl.java Thu Aug 12 18:18:43 2010
@@ -152,7 +152,11 @@ public class PreparedQueryCacheImpl impl
try {
if (_log != null && _log.isTraceEnabled())
_log.trace(_loc.get("prepared-query-invalidate", id));
- return _delegate.remove(id) != null;
+ boolean rc = _delegate.remove(id) != null;
+ if (_statsEnabled && rc) {
+ _stats.recordEviction(id);
+ }
+ return rc;
} finally {
unlock(false);
}
@@ -187,7 +191,11 @@ public class PreparedQueryCacheImpl impl
if (_log != null && _log.isTraceEnabled())
_log.trace(_loc.get("prepared-query-uncache", id, exclusion));
}
- return _delegate.remove(id);
+ PreparedQuery pq = _delegate.remove(id);
+ if (_statsEnabled && pq != null) {
+ _stats.recordEviction(id);
+ }
+ return pq;
} finally {
unlock(false);
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractDataCache.java Thu Aug 12 18:18:43 2010
@@ -40,8 +40,6 @@ import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.lib.util.Localizer;
import org.apache.openjpa.lib.util.concurrent.AbstractConcurrentEventManager;
import org.apache.openjpa.util.GeneralException;
-import org.apache.openjpa.util.OpenJPAException;
-
import serp.util.Strings;
/**
@@ -235,6 +233,9 @@ public abstract class AbstractDataCache
public DataCachePCData remove(Object key) {
DataCachePCData o = removeInternal(key);
+ if (stats.isEnabled()) {
+ stats.newEvict(o == null ? null : o.getType());
+ }
if (o != null && o.isTimedOut())
o = null;
if (log.isTraceEnabled()) {
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractQueryCache.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractQueryCache.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractQueryCache.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/AbstractQueryCache.java Thu Aug 12 18:18:43 2010
@@ -187,6 +187,9 @@ public abstract class AbstractQueryCache
public QueryResult remove(QueryKey key) {
QueryResult o = removeInternal(key);
+ if (_statsEnabled) {
+ _stats.recordEviction(key);
+ }
if (o != null && o.isTimedOut())
o = null;
if (log.isTraceEnabled()) {
@@ -448,6 +451,10 @@ public abstract class AbstractQueryCache
return _name;
}
+ public int count() {
+ return keySet().size();
+ }
+
/**
* A default implementation of query statistics for the Query result cache.
*
@@ -463,9 +470,10 @@ public abstract class AbstractQueryCache
private static final float LOAD_FACTOR = 0.75f;
private static final int CONCURRENCY = 16;
- private static final int ARRAY_SIZE = 2;
+ private static final int ARRAY_SIZE = 3;
private static final int READ = 0;
private static final int HIT = 1;
+ private static final int EVICT = 2;
private long[] astat = new long[ARRAY_SIZE];
private long[] stat = new long[ARRAY_SIZE];
@@ -510,6 +518,14 @@ public abstract class AbstractQueryCache
return getCount(astats, query, HIT);
}
+ public long getEvictionCount() {
+ return stat[EVICT];
+ }
+
+ public long getTotalEvictionCount() {
+ return astat[EVICT];
+ }
+
private long getCount(Map<T, long[]> target, T query, int i) {
long[] row = target.get(query);
return (row == null) ? 0 : row[i];
@@ -565,6 +581,12 @@ public abstract class AbstractQueryCache
addSample(query, HIT);
}
+ public void recordEviction(T query) {
+ if (query == null)
+ return;
+ addSample(query, EVICT);
+ }
+
public void dump(PrintStream out) {
String header = "Query Statistics starting from " + start;
out.print(header);
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/datacache/CacheStatistics.java Thu Aug 12 18:18:43 2010
@@ -22,6 +22,7 @@ import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
/**
* Counts number of read/write requests and hit ratio for a cache in total and
@@ -74,34 +75,54 @@ public interface CacheStatistics extends
/**
* Gets number of total read requests for the given class since last reset.
*/
- public long getReadCount(Class c);
+ public long getReadCount(Class<?> c);
/**
* Gets number of total read requests that has been found in cache for the
* given class since last reset.
*/
- public long getHitCount(Class c);
+ public long getHitCount(Class<?> c);
/**
* Gets number of total write requests for the given class since last reset.
*/
- public long getWriteCount(Class c);
+ public long getWriteCount(Class<?> c);
/**
* Gets number of total read requests for the given class since start.
*/
- public long getTotalReadCount(Class c);
+ public long getTotalReadCount(Class<?> c);
/**
* Gets number of total read requests that has been found in cache for the
* given class since start.
*/
- public long getTotalHitCount(Class c);
+ public long getTotalHitCount(Class<?> c);
/**
* Gets number of total write requests for the given class since start.
*/
- public long getTotalWriteCount(Class c);
+ public long getTotalWriteCount(Class<?> c);
+
+ /**
+ * Gets number of total evictions since last reset.
+ */
+ public long getEvictionCount();
+
+ /**
+ * Gets number of total evictions for the given class since last reset.
+ */
+ public long getEvictionCount(Class<?> c);
+
+ /**
+ * Gets number of total evictions in cache since start.
+ */
+ public long getTotalEvictionCount();
+
+ /**
+ * Gets number of total evictions for the given class since start.
+ */
+ public long getTotalEvictionCount(Class<?> c);
/**
* Gets the time of last reset.
@@ -124,14 +145,21 @@ public interface CacheStatistics extends
public boolean isEnabled();
/**
+ * Returns the classes being tracked.
+ * @return
+ */
+ public Set<Class<?>> classNames();
+
+ /**
* A default implementation.
*
*/
public static class Default implements CacheStatistics {
- private long[] astat = new long[3];
- private long[] stat = new long[3];
- private Map<Class, long[]> stats = new HashMap<Class, long[]>();
- private Map<Class, long[]> astats = new HashMap<Class, long[]>();
+ private static final int ARRAY_SIZE = 4;
+ private long[] astat = new long[ARRAY_SIZE];
+ private long[] stat = new long[ARRAY_SIZE];
+ private Map<Class<?>, long[]> stats = new HashMap<Class<?>, long[]>();
+ private Map<Class<?>, long[]> astats = new HashMap<Class<?>, long[]>();
private Date start = new Date();
private Date since = new Date();
private boolean enabled = false;
@@ -139,6 +167,7 @@ public interface CacheStatistics extends
private static final int READ = 0;
private static final int HIT = 1;
private static final int WRITE = 2;
+ private static final int EVICT = 3;
public long getReadCount() {
return stat[READ];
@@ -152,6 +181,10 @@ public interface CacheStatistics extends
return stat[WRITE];
}
+ public long getEvictionCount() {
+ return stat[EVICT];
+ }
+
public long getTotalReadCount() {
return astat[READ];
}
@@ -164,31 +197,43 @@ public interface CacheStatistics extends
return astat[WRITE];
}
- public long getReadCount(Class c) {
+ public long getTotalEvictionCount() {
+ return astat[EVICT];
+ }
+
+ public long getReadCount(Class<?> c) {
return getCount(stats, c, READ);
}
- public long getHitCount(Class c) {
+ public long getHitCount(Class<?> c) {
return getCount(stats, c, HIT);
}
- public long getWriteCount(Class c) {
+ public long getWriteCount(Class<?> c) {
return getCount(stats, c, WRITE);
}
- public long getTotalReadCount(Class c) {
+ public long getEvictionCount(Class<?> c) {
+ return getCount(stats, c, EVICT);
+ }
+
+ public long getTotalReadCount(Class<?> c) {
return getCount(astats, c, READ);
}
- public long getTotalHitCount(Class c) {
+ public long getTotalHitCount(Class<?> c) {
return getCount(astats, c, HIT);
}
- public long getTotalWriteCount(Class c) {
+ public long getTotalWriteCount(Class<?> c) {
return getCount(astats, c, WRITE);
}
-
- private long getCount(Map<Class, long[]> target, Class c, int index) {
+
+ public long getTotalEvictionCount(Class<?> c) {
+ return getCount(astats, c, EVICT);
+ }
+
+ private long getCount(Map<Class<?>, long[]> target, Class<?> c, int index) {
long[] row = target.get(c);
return (row == null) ? 0 : row[index];
}
@@ -202,7 +247,7 @@ public interface CacheStatistics extends
}
public void reset() {
- stat = new long[3];
+ stat = new long[ARRAY_SIZE];
stats.clear();
since = new Date();
}
@@ -216,7 +261,7 @@ public interface CacheStatistics extends
void disable() {
enabled = false;
}
- void newGet(Class cls, boolean hit) {
+ void newGet(Class<?> cls, boolean hit) {
cls = (cls == null) ? Object.class : cls;
addSample(cls, READ);
if (hit) {
@@ -224,25 +269,34 @@ public interface CacheStatistics extends
}
}
- void newPut(Class cls) {
+ void newPut(Class<?> cls) {
cls = (cls == null) ? Object.class : cls;
addSample(cls, WRITE);
}
+
+ void newEvict(Class<?> cls) {
+ cls = (cls == null) ? Object.class : cls;
+ addSample(cls, EVICT);
+ }
- private void addSample(Class c, int index) {
+ private void addSample(Class<?> c, int index) {
stat[index]++;
astat[index]++;
addSample(stats, c, index);
addSample(astats, c, index);
}
- private void addSample(Map<Class, long[]> target, Class c, int index) {
+ private void addSample(Map<Class<?>, long[]> target, Class<?> c, int index) {
long[] row = target.get(c);
if (row == null) {
- row = new long[3];
+ row = new long[ARRAY_SIZE];
}
row[index]++;
target.put(c, row);
}
+
+ public Set<Class<?>> classNames() {
+ return astats.keySet();
+ }
}
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractDataCacheInstrument.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractDataCacheInstrument.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractDataCacheInstrument.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractDataCacheInstrument.java Thu Aug 12 18:18:43 2010
@@ -18,7 +18,10 @@
*/
package org.apache.openjpa.instrumentation;
+import java.util.Collections;
import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
import org.apache.openjpa.datacache.CacheStatistics;
import org.apache.openjpa.datacache.DataCache;
@@ -152,22 +155,6 @@ public abstract class AbstractDataCacheI
return null;
}
- public long getEvictionCount() {
- CacheStatistics stats = getStatistics();
-// TODO : Implement eviction count in data cache stats
-// if (stats != null)
-// return stats.getEvictionCount();
- return NO_STATS;
- }
-
- public long getTotalEvictionCount() {
- CacheStatistics stats = getStatistics();
- // TODO : Implement eviction count in data cache stats
-// if (stats != null)
-// return stats.getTotalEvictionCount();
- return NO_STATS;
- }
-
public String getConfigId() {
return _configID;
}
@@ -231,8 +218,63 @@ public abstract class AbstractDataCacheI
return NO_STATS;
}
+ public long getEvictionCount() {
+ CacheStatistics stats = getStatistics();
+ if (stats != null)
+ return stats.getEvictionCount();
+ return NO_STATS;
+ }
+
+ public long getEvictionCount(String className)
+ throws ClassNotFoundException {
+ Class<?> clazz = Class.forName(className);
+ return getEvictionCount(clazz);
+ }
+
+ public long getEvictionCount(Class<?> c) {
+ CacheStatistics stats = getStatistics();
+ if (stats != null)
+ return stats.getEvictionCount(c);
+ return NO_STATS;
+ }
+
+ public long getTotalEvictionCount() {
+ CacheStatistics stats = getStatistics();
+ if (stats != null)
+ return stats.getTotalEvictionCount();
+ return NO_STATS;
+ }
+
+ public long getTotalEvictionCount(String className)
+ throws ClassNotFoundException {
+ Class<?> clazz = Class.forName(className);
+ return getTotalEvictionCount(clazz);
+ }
+
+ public long getTotalEvictionCount(Class<?> c) {
+ CacheStatistics stats = getStatistics();
+ if (stats != null)
+ return stats.getTotalEvictionCount(c);
+ return NO_STATS;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Set<String> classNames() {
+ CacheStatistics stats = getStatistics();
+ if (stats != null) {
+ Set<String> classNames = new HashSet<String>();
+ Set<Class<?>> clazzNames = stats.classNames();
+ for (Class<?> clazz : clazzNames) {
+ if (clazz != null) {
+ classNames.add(clazz.getName());
+ }
+ }
+ return classNames;
+ }
+ return Collections.EMPTY_SET;
+ }
+
public InstrumentationLevel getLevel() {
return InstrumentationLevel.FACTORY;
}
-
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractQueryCacheInstrument.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractQueryCacheInstrument.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractQueryCacheInstrument.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/AbstractQueryCacheInstrument.java Thu Aug 12 18:18:43 2010
@@ -22,6 +22,7 @@ import java.util.Date;
import java.util.HashSet;
import java.util.Set;
+import org.apache.openjpa.datacache.AbstractQueryCache;
import org.apache.openjpa.datacache.QueryCache;
import org.apache.openjpa.datacache.QueryKey;
import org.apache.openjpa.kernel.QueryStatistics;
@@ -160,6 +161,26 @@ public abstract class AbstractQueryCache
}
/**
+ * Returns number of total evictions since last reset
+ */
+ public long getEvictionCount() {
+ QueryStatistics<QueryKey> stats = getStatistics();
+ if (stats != null)
+ return stats.getEvictionCount();
+ return NO_STATS;
+ }
+
+ /**
+ * Returns number of total eviction requests since start.
+ */
+ public long getTotalEvictionCount() {
+ QueryStatistics<QueryKey> stats = getStatistics();
+ if (stats != null)
+ return stats.getTotalEvictionCount();
+ return NO_STATS;
+ }
+
+ /**
* Returns all query keys currently tracked in the cache.
* @return
*/
@@ -184,6 +205,17 @@ public abstract class AbstractQueryCache
}
return null;
}
+
+ public long count() {
+ if (_qc == null) {
+ return NO_STATS;
+ }
+ if (_qc instanceof AbstractQueryCache) {
+ AbstractQueryCache aqc = (AbstractQueryCache)_qc;
+ return aqc.count();
+ }
+ return NO_STATS;
+ }
public InstrumentationLevel getLevel() {
return InstrumentationLevel.FACTORY;
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/DataCacheInstrument.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/DataCacheInstrument.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/DataCacheInstrument.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/DataCacheInstrument.java Thu Aug 12 18:18:43 2010
@@ -19,6 +19,7 @@
package org.apache.openjpa.instrumentation;
import java.util.Date;
+import java.util.Set;
/**
* Interface for providing instrumented data cache metrics and operations.
@@ -119,4 +120,9 @@ public interface DataCacheInstrument {
* Returns date cache statistics collection started.
*/
public Date startDate();
+
+ /**
+ * Returns the names of classes currently tracked in the cache.
+ */
+ public Set<String> classNames();
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/QueryCacheInstrument.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/QueryCacheInstrument.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/QueryCacheInstrument.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/instrumentation/QueryCacheInstrument.java Thu Aug 12 18:18:43 2010
@@ -32,7 +32,8 @@ public interface QueryCacheInstrument {
public long getTotalExecutionCount();
/**
- * Returns number of total exec requests since start.
+ * Returns number of total exec requests since start for
+ * the specified string-ified query key.
*/
public long getTotalExecutionCount(String queryKey);
@@ -42,7 +43,8 @@ public interface QueryCacheInstrument {
public long getExecutionCount();
/**
- * Returns number of total execution requests since last reset
+ * Returns number of total execution requests since last reset for
+ * the specified string-ified query key.
*/
public long getExecutionCount(String queryKey);
@@ -54,7 +56,7 @@ public interface QueryCacheInstrument {
/**
* Returns number of total read requests that have been found in cache since
- * last reset.
+ * last reset for the specified string-ified query key.
*/
public long getHitCount(String queryKey);
@@ -64,7 +66,8 @@ public interface QueryCacheInstrument {
public long getTotalHitCount();
/**
- * Returns number of total read requests that has been found since start.
+ * Returns number of total read requests that has been found since start for
+ * the specified string-ified query key.
*/
public long getTotalHitCount(String queryKey);
@@ -84,8 +87,25 @@ public interface QueryCacheInstrument {
public Date startDate();
/**
- * Returns all query keys currently in the cache.
+ * Returns all the string-ified keys for query results in the cache.
* @return
*/
public Set<String> queryKeys();
+
+ /**
+ * Returns number of total evictions since last reset
+ */
+ public long getEvictionCount();
+
+ /**
+ * Returns number of total eviction requests since start.
+ */
+ public long getTotalEvictionCount();
+
+ /**
+ * Returns the number of total entries in the cache.
+ * @return entries
+ */
+ public long count();
+
}
Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryStatistics.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryStatistics.java?rev=984896&r1=984895&r2=984896&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryStatistics.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/QueryStatistics.java Thu Aug 12 18:18:43 2010
@@ -51,7 +51,12 @@ public interface QueryStatistics<T> exte
* Record that the given query has been executed.
*/
void recordExecution(T query);
-
+
+ /**
+ * Record that the given query has been evicted.
+ */
+ void recordEviction(T query);
+
/**
* Gets number of total query execution since last reset.
*/
@@ -94,6 +99,16 @@ public interface QueryStatistics<T> exte
*/
public long getTotalHitCount(T query);
+ /**
+ * Gets number of total query evictions since last reset.
+ */
+ public long getEvictionCount();
+
+ /**
+ * Gets number of total query evictions since start.
+ */
+ public long getTotalEvictionCount();
+
/**
* Gets the time of last reset.
*/
@@ -131,9 +146,10 @@ public interface QueryStatistics<T> exte
private static final float LOAD_FACTOR = 0.75f;
private static final int CONCURRENCY = 16;
- private static final int ARRAY_SIZE = 2;
+ private static final int ARRAY_SIZE = 3;
private static final int READ = 0;
private static final int HIT = 1;
+ private static final int EVICT = 2;
private long[] astat = new long[ARRAY_SIZE];
private long[] stat = new long[ARRAY_SIZE];
@@ -232,6 +248,13 @@ public interface QueryStatistics<T> exte
addSample(query, HIT);
}
+ public void recordEviction(T query) {
+ if (query == null) {
+ return;
+ }
+ addSample(query, EVICT);
+ }
+
public void dump(PrintStream out) {
String header = "Query Statistics starting from " + start;
out.print(header);
@@ -267,6 +290,14 @@ public interface QueryStatistics<T> exte
String toString(long[] row) {
return row[READ] + ":" + row[HIT] + "(" + pct(row[HIT], row[READ]) + "%)";
}
+
+ public long getEvictionCount() {
+ return stat[EVICT];
+ }
+
+ public long getTotalEvictionCount() {
+ return astat[EVICT];
+ }
}
/**
@@ -318,6 +349,14 @@ public interface QueryStatistics<T> exte
return 0;
}
+ public long getEvictionCount() {
+ return 0;
+ }
+
+ public long getTotalEvictionCount() {
+ return 0;
+ }
+
public Set<T> keys() {
return Collections.emptySet();
}
@@ -337,6 +376,9 @@ public interface QueryStatistics<T> exte
public Date start() {
return start;
}
+
+ public void recordEviction(T query) {
+ }
}
}