[jbosscache-commits] JBoss Cache SVN: r7427 - in core/trunk/src: main/java/org/jboss/cache/mvcc and 1 other directories.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Fri Jan 9 09:08:22 EST 2009
Author: manik.surtani at jboss.com
Date: 2009-01-09 09:08:22 -0500 (Fri, 09 Jan 2009)
New Revision: 7427
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java
core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderWithRollbackTest.java
Log:
JBCACHE-1455 - Rollback corrupts nodes loaded from cache loader
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java 2009-01-09 12:45:40 UTC (rev 7426)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java 2009-01-09 14:08:22 UTC (rev 7427)
@@ -117,11 +117,11 @@
{
if (command.isErase())
{
- replace(ctx, command.getFqn());
+ replace(ctx, command.getFqn());
}
else
{
- loadIfNeeded(ctx, command.getFqn(), null, true, true, false, false, false, false, true);
+ loadIfNeeded(ctx, command.getFqn(), null, true, true, false, false, false, false, true);
}
}
return invokeNextInterceptor(ctx, command);
@@ -215,7 +215,7 @@
public Object visitRollbackCommand(InvocationContext ctx, RollbackCommand command) throws Throwable
{
// clean up nodesCreated map
- if (trace) log.trace("Removing temporarily created nodes from treecache");
+ if (trace) log.trace("Removing temporarily created nodes");
// this needs to be done in reverse order.
List list = ctx.getTransactionContext().getDummyNodesCreatedByCacheLoader();
@@ -268,7 +268,7 @@
}
return invokeNextInterceptor(ctx, command);
}
-
+
private void replace(InvocationContext ctx, Fqn fqn) throws InterruptedException
{
NodeSPI n = helper.wrapNodeForReading(ctx, fqn, true);
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java 2009-01-09 12:45:40 UTC (rev 7426)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java 2009-01-09 14:08:22 UTC (rev 7427)
@@ -50,7 +50,7 @@
protected static enum Flags
{
- CHANGED(0x1), CREATED(0x2), DELETED(0x4);
+ CHANGED(0x1), CREATED(0x2), DELETED(0x4), ORIG_DATA_LOADED(0x8), ORIG_CHILDREN_LOADED(0x16);
final byte mask;
Flags(int mask)
@@ -132,7 +132,9 @@
{
Fqn fqn = getFqn();
if (trace)
+ {
log.trace("Updating node [" + fqn + "]. deleted=" + isDeleted() + " valid=" + isValid() + " changed=" + isChanged() + " created=" + isFlagSet(CREATED));
+ }
// check if node has been deleted.
if (isFlagSet(DELETED))
@@ -170,6 +172,8 @@
private void reset()
{
backup = null;
+ super.setChildrenLoaded(isFlagSet(ORIG_CHILDREN_LOADED));
+ super.setDataLoaded(isFlagSet(ORIG_DATA_LOADED));
flags = 0;
}
@@ -201,7 +205,9 @@
retval = container.peekInternalNode(parentFqn, false);
}
if (retval == null)
+ {
throw new NodeNotExistsException("Node " + parentFqn + " cannot be found in any context or data container!");
+ }
return retval;
}
@@ -242,9 +248,13 @@
public void setCreated(boolean created)
{
if (created)
+ {
setFlag(CREATED);
+ }
else
+ {
unsetFlag(CREATED);
+ }
}
// do not delegate deletion flags to the InternalNode since this will cause problems with concurrent readers. Maintain
@@ -260,9 +270,13 @@
public void markAsDeleted(boolean deleted)
{
if (deleted)
+ {
setFlag(DELETED);
+ }
else
+ {
unsetFlag(DELETED);
+ }
}
@Override
@@ -270,4 +284,18 @@
{
throw new UnsupportedOperationException("Recursive deletion not allowed!");
}
+
+ @Override
+ public void setChildrenLoaded(boolean loaded)
+ {
+ if (node.isChildrenLoaded()) setFlag(ORIG_CHILDREN_LOADED);
+ super.setChildrenLoaded(loaded);
+ }
+
+ @Override
+ public void setDataLoaded(boolean loaded)
+ {
+ if (node.isDataLoaded()) setFlag(ORIG_DATA_LOADED);
+ super.setDataLoaded(loaded);
+ }
}
Modified: core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderWithRollbackTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderWithRollbackTest.java 2009-01-09 12:45:40 UTC (rev 7426)
+++ core/trunk/src/test/java/org/jboss/cache/loader/CacheLoaderWithRollbackTest.java 2009-01-09 14:08:22 UTC (rev 7427)
@@ -19,10 +19,17 @@
final Fqn fqn = Fqn.fromString("/a/b");
final String key = "key";
+ protected Configuration.NodeLockingScheme getNodeLockingScheme()
+ {
+ return Configuration.NodeLockingScheme.MVCC;
+ }
+
+
public Cache<String, String> init(boolean passivation) throws Exception
{
CacheLoaderConfig cacheLoaderConfig = UnitTestConfigurationFactory.buildSingleCacheLoaderConfig(passivation, "", DummyInMemoryCacheLoader.class.getName(), "", false, true, false, false, false);
Configuration cfg = new Configuration();
+ cfg.setNodeLockingScheme(getNodeLockingScheme());
cfg.setCacheLoaderConfig(cacheLoaderConfig);
cfg.getRuntimeConfig().setTransactionManager(new DummyTransactionManager());
Cache<String, String> cache = new DefaultCacheFactory<String, String>().createCache(cfg);
More information about the jbosscache-commits
mailing list