[jbosscache-commits] JBoss Cache SVN: r7218 - in core/trunk/src: main/java/org/jboss/cache/loader/bdbje and 3 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Thu Nov 27 12:45:46 EST 2008


Author: manik.surtani at jboss.com
Date: 2008-11-27 12:45:46 -0500 (Thu, 27 Nov 2008)
New Revision: 7218

Modified:
   core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoader.java
   core/trunk/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoader.java
   core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java
   core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java
   core/trunk/src/test/java/org/jboss/cache/passivation/PassivationTestsBase.java
Log:
Fixed failures to do with passivation

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/ActivationInterceptor.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -106,7 +106,7 @@
    public Object visitGetChildrenNamesCommand(InvocationContext ctx, GetChildrenNamesCommand command) throws Throwable
    {
       Object returnValue = super.visitGetChildrenNamesCommand(ctx, command);
-      removeNodeFromCacheLoader(ctx, command.getFqn());
+      removeNodeFromCacheLoader(ctx, command.getFqn(), true);
       return returnValue;
    }
 
@@ -114,7 +114,7 @@
    public Object visitGetKeysCommand(InvocationContext ctx, GetKeysCommand command) throws Throwable
    {
       Object returnValue = super.visitGetKeysCommand(ctx, command);
-      removeNodeFromCacheLoader(ctx, command.getFqn());
+      removeNodeFromCacheLoader(ctx, command.getFqn(), true);
       return returnValue;
    }
 
@@ -122,7 +122,7 @@
    public Object visitGetNodeCommand(InvocationContext ctx, GetNodeCommand command) throws Throwable
    {
       Object returnValue = super.visitGetNodeCommand(ctx, command);
-      removeNodeFromCacheLoader(ctx, command.getFqn());
+      removeNodeFromCacheLoader(ctx, command.getFqn(), true);
       return returnValue;
    }
 
@@ -130,7 +130,7 @@
    public Object visitGetKeyValueCommand(InvocationContext ctx, GetKeyValueCommand command) throws Throwable
    {
       Object returnValue = super.visitGetKeyValueCommand(ctx, command);
-      removeNodeFromCacheLoader(ctx, command.getFqn());
+      removeNodeFromCacheLoader(ctx, command.getFqn(), true);
       return returnValue;
    }
 
@@ -144,7 +144,7 @@
    public Object visitPutKeyValueCommand(InvocationContext ctx, PutKeyValueCommand command) throws Throwable
    {
       Object returnValue = super.visitPutKeyValueCommand(ctx, command);
-      removeNodeFromCacheLoader(ctx, command.getFqn());
+      removeNodeFromCacheLoader(ctx, command.getFqn(), true);
       return returnValue;
    }
 
@@ -152,7 +152,7 @@
    public Object visitPutDataMapCommand(InvocationContext ctx, PutDataMapCommand command) throws Throwable
    {
       Object returnValue = super.visitPutDataMapCommand(ctx, command);
-      removeNodeFromCacheLoader(ctx, command.getFqn());
+      removeNodeFromCacheLoader(ctx, command.getFqn(), true);
       return returnValue;
    }
 
@@ -160,7 +160,7 @@
    public Object visitRemoveKeyCommand(InvocationContext ctx, RemoveKeyCommand command) throws Throwable
    {
       Object returnValue = super.visitRemoveKeyCommand(ctx, command);
-      removeNodeFromCacheLoader(ctx, command.getFqn());
+      removeNodeFromCacheLoader(ctx, command.getFqn(), true);
       return returnValue;
    }
 
@@ -173,18 +173,14 @@
          log.trace("This is a move operation; removing the FROM node from the loader, no activation processing needed.");
       }
       loader.remove(command.getFqn());
-      removeNodeFromCacheLoader(ctx, command.getFqn().getParent());
-      removeNodeFromCacheLoader(ctx, command.getTo());
+      removeNodeFromCacheLoader(ctx, command.getFqn().getParent(), true);
+      removeNodeFromCacheLoader(ctx, command.getTo(), true);
       return returnValue;
    }
 
    private boolean wasLoadedIntoMemory(InvocationContext ctx, Fqn fqn)
    {
       Set<Fqn> fqnsLoaded = ctx.getFqnsLoaded();
-      // make sure we wipe this in the context otherwise this will leak.
-      // TODO: This should ideally be done in the InvocationContextInterceptor by calling InvocationContext.reset() on exit
-      // for now, just remove this here
-      ctx.setFqnsLoaded(null);
       return fqnsLoaded != null && fqnsLoaded.contains(fqn);
    }
 
@@ -193,29 +189,41 @@
     * its attributes have been initialized, its children have been loaded,
     * AND it was found in the cache loader (nodeLoaded = true).
     */
-   private void removeNodeFromCacheLoader(InvocationContext ctx, Fqn fqn) throws Throwable
+   private void removeNodeFromCacheLoader(InvocationContext ctx, Fqn fqn, boolean checkIfLoaded) throws Throwable
    {
-      if (fqn != null && wasLoadedIntoMemory(ctx, fqn))
+      if (fqn != null)
       {
-         InternalNode n;
-         if (((n = findNode(ctx, fqn)) != null) && n.isDataLoaded() && loader.exists(fqn))
+         boolean remove = false;
+         if (!checkIfLoaded || wasLoadedIntoMemory(ctx, fqn))
          {
-            // node not null and attributes have been loaded?
-            if (n.hasChildren())
+            InternalNode n;
+            if (((n = findNode(ctx, fqn)) != null) && n.isDataLoaded() && loader.exists(fqn))
             {
-               boolean result = childrenLoaded(n);
-               if (result)
+               // node not null and attributes have been loaded?
+               if (n.hasChildren())
                {
-                  log.debug("children all initialized");
+                  boolean result = childrenLoaded(n);
+                  if (result)
+                  {
+                     log.debug("children all initialized");
+                     remove(fqn);
+                     remove = true;
+                  }
+               }
+               else if (loaderNoChildren(fqn))
+               {
+                  if (log.isDebugEnabled()) log.debug("no children " + n);
                   remove(fqn);
+                  remove = true;
                }
             }
-            else if (loaderNoChildren(fqn))
-            {
-               if (log.isDebugEnabled()) log.debug("no children " + n);
-               remove(fqn);
-            }
          }
+
+         if (!fqn.isRoot() && remove)
+         {
+            // check fqn parent, since the parent may not be needed on disk anymore
+            removeNodeFromCacheLoader(ctx, fqn.getParent(), false);
+         }
       }
    }
 
@@ -232,11 +240,11 @@
       }
    }
 
-   private boolean childrenLoaded(InternalNode<?, ?> node)
+   private boolean childrenLoaded(InternalNode<?, ?> node) throws Exception
    {
       if (!node.isChildrenLoaded())
       {
-         return false;
+         if (loader.getChildrenNames(node.getFqn()) != null) return false;
       }
       for (InternalNode child : node.getChildren())
       {

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/InvocationContextInterceptor.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -208,8 +208,11 @@
          if (trace) log.trace("Resetting invocation-scope options");
          ctx.getOptionOverrides().reset();
 
+         // make sure we wipe fqns loaded in the context otherwise this will leak.
+         // TODO: This should ideally be done by calling InvocationContext.reset() on exit
+         ctx.setFqnsLoaded(null);
+
          // if this is a prepare, opt prepare or
-
          if (resumeSuspended)
          {
             txManager.resume(suspendedTransaction);

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyActivationInterceptor.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -181,10 +181,6 @@
    private boolean wasLoadedIntoMemory(InvocationContext ctx, Fqn fqn)
    {
       Set<Fqn> fqnsLoaded = ctx.getFqnsLoaded();
-      // make sure we wipe this in the context otherwise this will leak.
-      // TODO: This should ideally be done in the InvocationContextInterceptor by calling InvocationContext.reset() on exit
-      // for now, just remove this here
-      ctx.setFqnsLoaded(null);
       return fqnsLoaded != null && fqnsLoaded.contains(fqn);
    }
 

Modified: core/trunk/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoader.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoader.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/main/java/org/jboss/cache/loader/bdbje/BdbjeCacheLoader.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -174,7 +174,6 @@
       // JBCACHE-1448 db name parsing fix courtesy of Ciro Cavani
       /* Parse config string. */
       int offset = configStr.indexOf('#');
-      String cacheDbName;
       if (offset >= 0 && offset < configStr.length() - 1)
       {
          cacheDbName = configStr.substring(offset + 1);
@@ -183,6 +182,7 @@
       else
       {
          cacheDbName = cache.getClusterName();
+         if (cacheDbName == null) cacheDbName = "CacheInstance-" + System.identityHashCode(cache);
       }
 
       // test location

Modified: core/trunk/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoader.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoader.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/main/java/org/jboss/cache/loader/jdbm/JdbmCacheLoader.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -135,6 +135,7 @@
       else
       {
          cacheDbName = cache.getClusterName();
+         if (cacheDbName == null) cacheDbName = "CacheInstance-" + System.identityHashCode(cache);
       }
 
       // test location

Modified: core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/test/java/org/jboss/cache/mgmt/CacheLoaderTest.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -3,7 +3,10 @@
 import org.jboss.cache.interceptors.CacheLoaderInterceptor;
 import org.jboss.cache.interceptors.CacheStoreInterceptor;
 import org.jboss.cache.util.TestingUtil;
-import static org.testng.AssertJUnit.*;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertNull;
 import org.testng.annotations.Test;
 
 import java.util.HashMap;
@@ -41,6 +44,8 @@
       assertNotNull("Retrieval error: expected to retrieve " + CAPITAL + " for " + AUSTRIA, cache.get(AUSTRIA, CAPITAL));
       assertNull("Retrieval error: did not expect to retrieve " + AREA + " for " + AUSTRIA, cache.get(AUSTRIA, AREA));
 
+      load++;
+
       // verify statistics after retrieving entries - misses should still be same since nodes were already loaded
       assertEquals("CacheLoaderLoads count error: ", load, loader.getCacheLoaderLoads());
       assertEquals("CacheLoaderMisses count error: ", miss, loader.getCacheLoaderMisses());
@@ -99,6 +104,7 @@
 
       // add two attributes - this should cause two stores
       stores += 2;
+      load++;
       cache.put(POLAND, CAPITAL, "Warsaw");
       cache.put(POLAND, CURRENCY, "Zloty");
       assertEquals("CacheLoaderLoads count error: ", load, loader.getCacheLoaderLoads());

Modified: core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/test/java/org/jboss/cache/mgmt/PassivationTest.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -3,7 +3,10 @@
 import org.jboss.cache.interceptors.ActivationInterceptor;
 import org.jboss.cache.interceptors.PassivationInterceptor;
 import org.jboss.cache.util.TestingUtil;
-import static org.testng.AssertJUnit.*;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertNull;
 import org.testng.annotations.Test;
 
 import java.util.HashMap;
@@ -50,6 +53,8 @@
       assertNotNull("Retrieval error: expected to retrieve " + CAPITAL + " for " + AUSTRIA, cache.get(AUSTRIA, CAPITAL));
       assertNull("Retrieval error: did not expect to retrieve " + AREA + " for " + AUSTRIA, cache.get(AUSTRIA, AREA));
 
+      miss++;
+
       // verify statistics after retrieving entries - no change since nodes were already loaded
       assertEquals("CacheLoaderLoads count error: ", 0, act.getCacheLoaderLoads());
       assertEquals("CacheLoaderMisses count error: ", miss, act.getCacheLoaderMisses());
@@ -109,7 +114,7 @@
       cache.put(POLAND, new HashMap<String, Object>());
       cache.put(POLAND, CAPITAL, "Warsaw");
       cache.put(POLAND, CURRENCY, "Zloty");
-      miss++;
+      miss += 3;
       assertEquals("CacheLoaderLoads count error: ", 1, act.getCacheLoaderLoads());
       assertEquals("CacheLoaderMisses count error: ", miss, act.getCacheLoaderMisses());
       assertEquals("Activations count error: ", activations, act.getActivations());

Modified: core/trunk/src/test/java/org/jboss/cache/passivation/PassivationTestsBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/passivation/PassivationTestsBase.java	2008-11-27 14:49:26 UTC (rev 7217)
+++ core/trunk/src/test/java/org/jboss/cache/passivation/PassivationTestsBase.java	2008-11-27 17:45:46 UTC (rev 7218)
@@ -472,7 +472,7 @@
       assertFalse(loader.exists(Fqn.fromString("/a/2")));
       cache.get("/a/3", "test");// activate node
       assertFalse(loader.exists(Fqn.fromString("/a/3")));
-      assertTrue(loader.exists(Fqn.fromString("/a")));
+      assertFalse(loader.exists(Fqn.fromString("/a")));
    }
 
    public void testGetChildren8Passivation() throws Exception




More information about the jbosscache-commits mailing list