Author: manik.surtani(a)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