You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2006/07/25 16:14:52 UTC

svn commit: r425398 - in /jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state: ItemStateCache.java ItemStateReferenceCache.java LRUItemStateCache.java MLRUItemStateCache.java

Author: tripod
Date: Tue Jul 25 07:14:52 2006
New Revision: 425398

URL: http://svn.apache.org/viewvc?rev=425398&view=rev
Log:
Allow updating of cached item resource consumption.

Modified:
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateCache.java
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateCache.java?rev=425398&r1=425397&r2=425398&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateCache.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateCache.java Tue Jul 25 07:14:52 2006
@@ -100,4 +100,12 @@
      * @return a collection view of the values contained in this cache.
      */
     Collection values();
+
+    /**
+     * Informs the cache that the item was modified and the cache might need to
+     * recalc the items caching weight.
+     *
+     * @param id the id of the item that was modified.
+     */
+    void update(ItemId id);
 }

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java?rev=425398&r1=425397&r2=425398&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/ItemStateReferenceCache.java Tue Jul 25 07:14:52 2006
@@ -140,6 +140,14 @@
     /**
      * {@inheritDoc}
      */
+    public void update(ItemId id) {
+        // delegate
+        cache.update(id);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public boolean isEmpty() {
         // check primary cache
         return refs.isEmpty();

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java?rev=425398&r1=425397&r2=425398&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/LRUItemStateCache.java Tue Jul 25 07:14:52 2006
@@ -103,6 +103,13 @@
     /**
      * {@inheritDoc}
      */
+    public void update(ItemId id) {
+        // do nothing
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public boolean isEmpty() {
         return cache.isEmpty();
     }

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java?rev=425398&r1=425397&r2=425398&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/state/MLRUItemStateCache.java Tue Jul 25 07:14:52 2006
@@ -39,7 +39,7 @@
     private static Logger log = LoggerFactory.getLogger(LRUItemStateCache.class);
 
     /** default maximum memory to use */
-    public static final int DEFAULT_MAX_MEM = 8 * 1024 * 1024;
+    public static final int DEFAULT_MAX_MEM = 4 * 1024 * 1024;
 
     /** the amount of memory the entries use */
     private long totalMem;
@@ -47,6 +47,9 @@
     /** the maximum of memory the cache may use */
     private final long maxMem;
 
+    /** the number of writes */
+    private long numWrites = 0;
+
     /**
      * A cache for <code>ItemState</code> instances
      */
@@ -99,6 +102,20 @@
     /**
      * {@inheritDoc}
      */
+    public void update(ItemId id) {
+        synchronized (cache) {
+            Entry entry = (Entry) cache.get(id);
+            if (entry != null) {
+                totalMem -= entry.size;
+                entry.recalc();
+                totalMem += entry.size;
+            }
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public void cache(ItemState state) {
         synchronized (cache) {
             ItemId id = state.getId();
@@ -114,7 +131,7 @@
                 id = (ItemId) cache.firstKey();
                 evict(id);
             }
-            if (log.isDebugEnabled()) {
+            if (numWrites++%10000 == 0 && log.isDebugEnabled()) {
                 log.info(this + " size=" + cache.size() + ", " + totalMem + "/" + maxMem);
             }
         }
@@ -191,11 +208,15 @@
 
         private final ItemState state;
 
-        private final long size;
+        private long size;
 
         public Entry(ItemState state) {
             this.state = state;
             this.size = 64 + state.calculateMemoryFootprint();
+        }
+
+        public void recalc() {
+            size = 64 + state.calculateMemoryFootprint();
         }
     }
 }