[jbosscache-commits] JBoss Cache SVN: r6335 - in core/trunk/src/main/java/org/jboss/cache: mvcc and 1 other directory.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Fri Jul 18 11:47:42 EDT 2008
Author: manik.surtani at jboss.com
Date: 2008-07-18 11:47:42 -0400 (Fri, 18 Jul 2008)
New Revision: 6335
Modified:
core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java
core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java
Log:
Further enhancements
Modified: core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java 2008-07-18 15:03:00 UTC (rev 6334)
+++ core/trunk/src/main/java/org/jboss/cache/PessimisticUnversionedNode.java 2008-07-18 15:47:42 UTC (rev 6335)
@@ -71,6 +71,15 @@
return sb.toString();
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public InternalNode<K, V> copy()
+ {
+ PessimisticUnversionedNode<K, V> n = new PessimisticUnversionedNode<K, V>(fqn.getLastElement(), fqn, data, cache);
+ copyInternals(n);
+ return n;
+ }
+
// ------ legacy addChild methods that used a lot of implicit locks.
@Override
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java 2008-07-18 15:03:00 UTC (rev 6334)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java 2008-07-18 15:47:42 UTC (rev 6335)
@@ -10,6 +10,7 @@
import org.jboss.cache.NodeSPI;
import org.jboss.cache.invocation.InvocationContext;
import org.jboss.cache.invocation.NodeInvocationDelegate;
+import static org.jboss.cache.mvcc.ReadCommittedNode.Flags.*;
/**
* A node delegate that encapsulates read committed semantics when writes are initiated, committed or rolled back.
@@ -23,15 +24,55 @@
private static final boolean trace = log.isTraceEnabled();
protected volatile InternalNode backup;
- protected boolean changed;
- protected boolean created;
- protected boolean deleted;
+ protected byte flags = 0;
+ protected static enum Flags
+ {
+ CHANGED(0x1), CREATED(0x2), DELETED(0x4);
+ final byte mask;
+
+ Flags(int mask)
+ {
+ this.mask = (byte) mask;
+ }
+ }
+
public ReadCommittedNode(InternalNode node)
{
super(node);
}
+ /**
+ * Tests whether a flag is set.
+ *
+ * @param flag flag to test
+ * @return true if set, false otherwise.
+ */
+ protected final boolean isFlagSet(Flags flag)
+ {
+ return (flags & flag.mask) != 0;
+ }
+
+ /**
+ * Unility method that sets the value of the given flag to true.
+ *
+ * @param flag flag to set
+ */
+ protected final void setFlag(Flags flag)
+ {
+ flags |= flag.mask;
+ }
+
+ /**
+ * Utility method that sets the value of the flag to false.
+ *
+ * @param flag flag to unset
+ */
+ protected final void unsetFlag(Flags flag)
+ {
+ flags ^= flag.mask;
+ }
+
public boolean isNullNode()
{
return false;
@@ -48,10 +89,10 @@
*/
public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
{
- if (changed) return; // already copied
+ if (isFlagSet(CHANGED)) return; // already copied
- changed = true;
- if (!created)
+ setFlag(CHANGED);
+ if (!isFlagSet(CREATED))
{
backup = node;
InternalNode backupDelegationTarget = ((NodeReference) backup).getDelegate();
@@ -68,14 +109,14 @@
*/
public void commitUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory)
{
- if (changed)
+ if (isFlagSet(CHANGED))
{
Fqn fqn = getFqn();
if (trace)
- log.trace("Updating node [" + fqn + "]. deleted=" + isDeleted() + " valid=" + isValid() + " changed=" + isChanged() + " created=" + created);
+ log.trace("Updating node [" + fqn + "]. deleted=" + isDeleted() + " valid=" + isValid() + " changed=" + isChanged() + " created=" + isFlagSet(CREATED));
// check if node has been deleted.
- if (deleted)
+ if (isFlagSet(DELETED))
{
if (!fqn.isRoot())
{
@@ -89,7 +130,7 @@
log.warn("Attempting to remove the root node. Not doing anything!");
}
}
- else if (created)
+ else if (isFlagSet(CREATED))
{
// add newly created nodes to parents.
NodeSPI parent = lookupParent(fqn, ctx, container);
@@ -107,9 +148,7 @@
private void reset()
{
backup = null;
- changed = false;
- created = false;
- deleted = false;
+ flags = 0;
}
/**
@@ -143,15 +182,14 @@
protected void updateNode(InvocationContext ctx, DataContainer dataContainer, NodeFactory nf)
{
// swap refs
- if (!created) ((NodeReference) backup).setDelegate(node);
+ if (!isFlagSet(CREATED)) ((NodeReference) backup).setDelegate(node);
node = backup;
}
public void rollbackUpdate()
{
node = backup;
- backup = null;
- changed = false;
+ reset();
}
/**
@@ -159,7 +197,7 @@
*/
public boolean isChanged()
{
- return changed;
+ return isFlagSet(CHANGED);
}
/**
@@ -167,12 +205,15 @@
*/
public boolean isCreated()
{
- return created;
+ return isFlagSet(CREATED);
}
public void setCreated(boolean created)
{
- this.created = created;
+ if (created)
+ setFlag(CREATED);
+ else
+ unsetFlag(CREATED);
}
// do not propagate deletion flags to the underlying node.
@@ -180,13 +221,16 @@
@Override
public boolean isDeleted()
{
- return deleted;
+ return isFlagSet(DELETED);
}
@Override
public void markAsDeleted(boolean deleted)
{
- this.deleted = deleted;
+ if (deleted)
+ setFlag(DELETED);
+ else
+ unsetFlag(DELETED);
}
@Override
Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java 2008-07-18 15:03:00 UTC (rev 6334)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java 2008-07-18 15:47:42 UTC (rev 6335)
@@ -9,6 +9,8 @@
import org.jboss.cache.NodeSPI;
import org.jboss.cache.invocation.InvocationContext;
import org.jboss.cache.invocation.NodeInvocationDelegate;
+import static org.jboss.cache.mvcc.ReadCommittedNode.Flags.CHANGED;
+import static org.jboss.cache.mvcc.ReadCommittedNode.Flags.DELETED;
import org.jboss.cache.optimistic.DataVersioningException;
/**
@@ -29,12 +31,12 @@
@Override
public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
{
- if (changed) return; // already copied
+ if (isFlagSet(CHANGED)) return; // already copied
Fqn fqn = getFqn();
// mark node as changed.
- changed = true;
+ setFlag(CHANGED);
if (writeSkewCheck)
{
@@ -61,7 +63,7 @@
{
dataContainer.setRoot(nf.createNodeInvocationDelegate(node, false));
}
- else if (!deleted)
+ else if (!isFlagSet(DELETED))
{
NodeSPI parent = lookupParent(getFqn(), ctx, dataContainer);
parent.addChildDirect(nf.createNodeInvocationDelegate(node, false));
More information about the jbosscache-commits
mailing list