[jboss-cvs] JBossCache/src/org/jboss/cache/interceptors ...
Galder Zamarreno
galder.zamarreno at jboss.com
Wed Feb 28 05:58:41 EST 2007
User: gzamarreno
Date: 07/02/28 05:58:41
Modified: src/org/jboss/cache/interceptors Tag:
Branch_JBossCache_1_4_0
OptimisticNodeInterceptor.java
Log:
[JBCACHE-927] Fix backported to the 1.4.x branch
Revision Changes Path
No revision
No revision
1.21.2.8 +27 -9 JBossCache/src/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: OptimisticNodeInterceptor.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/interceptors/OptimisticNodeInterceptor.java,v
retrieving revision 1.21.2.7
retrieving revision 1.21.2.8
diff -u -b -r1.21.2.7 -r1.21.2.8
--- OptimisticNodeInterceptor.java 11 Dec 2006 17:29:44 -0000 1.21.2.7
+++ OptimisticNodeInterceptor.java 28 Feb 2007 10:58:41 -0000 1.21.2.8
@@ -20,6 +20,7 @@
import org.jboss.cache.optimistic.DataVersion;
import org.jboss.cache.optimistic.TransactionWorkspace;
import org.jboss.cache.optimistic.WorkspaceNode;
+import org.jboss.cache.optimistic.DefaultDataVersion;
import org.jgroups.blocks.MethodCall;
import javax.transaction.Transaction;
@@ -33,6 +34,7 @@
*
* @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
* @author <a href="mailto:stevew at jofti.com">Steve Woodcock (stevew at jofti.com)</a>
+ * @author <a href="mailto:galder.zamarreno at jboss.com">Galder Zamarreno</a>
*/
public class OptimisticNodeInterceptor extends OptimisticInterceptor
{
@@ -66,7 +68,7 @@
throw new CacheException("Must be in a valid transaction " + m);
}
- WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(getFqn(args), workspace, cache);
+ WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(getFqn(args), workspace, true);
if (workspaceNode != null)
@@ -213,7 +215,7 @@
Fqn parentFqn = temp.getFqn();
// get a wrapped parent
- WorkspaceNode parentNode = getOrCreateWorkspaceNode(parentFqn, workspace, cache);
+ WorkspaceNode parentNode = getOrCreateWorkspaceNode(parentFqn, workspace, false);
if (parentNode == null)
throw new CacheException("Unable to find parent node with Fqn " + parentFqn);
@@ -232,7 +234,7 @@
if (toDelete.getFqn().isChildOrEquals(nodeFqn))
{
if (debug) log.debug("marking node " + toDelete.getFqn() + " as deleted");
- toDelete.markAsDeleted();
+ toDelete.markAsDeleted(true);
}
else
{
@@ -263,7 +265,7 @@
{
Fqn fqn = (Fqn) args[0];
Object key = args[1];
- WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
+ WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
if (workspaceNode == null)
{
@@ -283,7 +285,7 @@
{
Fqn fqn = (Fqn) args[0];
- WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
+ WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
if (workspaceNode == null)
{
@@ -301,7 +303,7 @@
{
Fqn fqn = (Fqn) args[0];
- WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
+ WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
if (workspaceNode == null)
{
@@ -320,7 +322,7 @@
{
Fqn fqn = (Fqn) args[0];
- WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, cache);
+ WorkspaceNode workspaceNode = getOrCreateWorkspaceNode(fqn, workspace, false);
if (workspaceNode == null)
{
@@ -335,7 +337,7 @@
}
}
- private WorkspaceNode getOrCreateWorkspaceNode(Fqn fqn, TransactionWorkspace workspace, TreeCache cache)
+ private WorkspaceNode getOrCreateWorkspaceNode(Fqn fqn, TransactionWorkspace workspace, boolean undeleteIfNecessary)
{
WorkspaceNode workspaceNode = workspace.getNode(fqn);
// if we do not have the node then we need to add it to the workspace
@@ -343,15 +345,31 @@
{
DataNode node = cache.peek(fqn);
if (node == null)
+ {
return null; // seems to happen quite a bit
+ }
workspaceNode = NodeFactory.getInstance().createWorkspaceNode(node, workspace);
+ workspace.addNode(workspaceNode);
}
// the node has been deleted dude!
if (workspaceNode.isDeleted())
{
if (log.isDebugEnabled()) log.debug("Node " + fqn + " has been deleted in the workspace.");
- return null;
+ if (undeleteIfNecessary)
+ {
+ workspaceNode.markAsDeleted(false);
+ // re-add to parent
+ WorkspaceNode parent = getOrCreateWorkspaceNode(fqn.getParent(), workspace, true);
+ parent.addChild(workspaceNode);
}
+ else
+ {
+ workspaceNode = null;
+ }
+ }
+
+ if (workspaceNode != null && !(workspaceNode.getVersion() instanceof DefaultDataVersion))
+ workspaceNode.setVersioningImplicit(false);
return workspaceNode;
}
}
More information about the jboss-cvs-commits
mailing list