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) {
+        }
        }
 }
 


Reply via email to