[jbosscache-commits] JBoss Cache SVN: r6287 - in core/trunk/src: main/java/org/jboss/cache/config and 5 other directories.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Wed Jul 16 04:31:16 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-07-16 04:31:16 -0400 (Wed, 16 Jul 2008)
New Revision: 6287

Modified:
   core/trunk/src/main/java/org/jboss/cache/InternalNode.java
   core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java
   core/trunk/src/main/java/org/jboss/cache/config/Configuration.java
   core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java
   core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java
   core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java
   core/trunk/src/main/java/org/jboss/cache/mvcc/NodeReference.java
   core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
   core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java
   core/trunk/src/main/resources/jbosscache-config-3.0.xsd
   core/trunk/src/test/resources/configs/parser-test.xml
Log:
allowWriteSkew -> writeSkewCheck

Modified: core/trunk/src/main/java/org/jboss/cache/InternalNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/InternalNode.java	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/InternalNode.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -121,12 +121,4 @@
    void addChild(Object nodeName, Node<K, V> nodeToAdd);
 
    void printDetails(StringBuilder sb, int indent);
-
-   /**
-    * Very similar to getChildrenMapDirect() except that if the internal map is null, it initialises the map if init is true.
-    *
-    * @param init if true, will init internal data structures.
-    * @return a Map or null.
-    */
-   Map<Object, Node<K, V>> getChildrenMapDirect(boolean init);
 }

Modified: core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -531,11 +531,6 @@
       return children;
    }
 
-   public Map<Object, Node<K, V>> getChildrenMapDirect(boolean init)
-   {
-      return init ? children() : children;
-   }
-
    public void setChildrenMapDirect(Map<Object, Node<K, V>> children)
    {
       if (children == null)

Modified: core/trunk/src/main/java/org/jboss/cache/config/Configuration.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/config/Configuration.java	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/config/Configuration.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -203,7 +203,7 @@
    private int objectInputStreamPoolSize = 50;
    private int objectOutputStreamPoolSize = 50;
    private List<CustomInterceptorConfig> customInterceptors = Collections.emptyList();
-   private boolean allowWriteSkew = false;
+   private boolean writeSkewCheck = false;
    private int concurrencyLevel = 50;
 
    @Start(priority = 1)
@@ -216,7 +216,6 @@
          {
             case NONE:
             case READ_UNCOMMITTED:
-               System.out.println("Upgrading!");
                isolationLevel = IsolationLevel.READ_COMMITTED;
                break;
             case SERIALIZABLE:
@@ -240,15 +239,15 @@
       return marshaller;
    }
 
-   public boolean isAllowWriteSkew()
+   public boolean isWriteSkewCheck()
    {
-      return allowWriteSkew;
+      return writeSkewCheck;
    }
 
-   public void setAllowWriteSkew(boolean allowWriteSkew)
+   public void setWriteSkewCheck(boolean writeSkewCheck)
    {
-      testImmutability("allowWriteSkew");
-      this.allowWriteSkew = allowWriteSkew;
+      testImmutability("writeSkewCheck");
+      this.writeSkewCheck = writeSkewCheck;
    }
 
    public int getConcurrencyLevel()

Modified: core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/config/parsing/XmlConfigurationParser.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -23,16 +23,20 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.jboss.cache.config.*;
+import org.jboss.cache.config.BuddyReplicationConfig;
+import org.jboss.cache.config.CacheLoaderConfig;
+import org.jboss.cache.config.Configuration;
+import org.jboss.cache.config.ConfigurationException;
+import org.jboss.cache.config.CustomInterceptorConfig;
+import org.jboss.cache.config.OldFileFormatException;
 import org.jboss.cache.config.parsing.element.BuddyElementParser;
+import org.jboss.cache.config.parsing.element.CustomInterceptorsElementParser;
 import org.jboss.cache.config.parsing.element.EvictionElementParser;
 import org.jboss.cache.config.parsing.element.LoadersElementParser;
-import org.jboss.cache.config.parsing.element.CustomInterceptorsElementParser;
 import org.jboss.cache.lock.IsolationLevel;
 import org.jboss.cache.util.FileLookup;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -40,9 +44,7 @@
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.InputStream;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Properties;
 
 /**
  * Reads in XMLconfiguration files and spits out a {@link org.jboss.cache.config.Configuration} object.
@@ -173,7 +175,8 @@
          configureEviction(getSingleElement("eviction"));
          configureCacheLoaders(getSingleElement("loaders"));
          configureCustomInterceptors(getSingleElement("customInterceptors"));
-      } catch (Exception e)
+      }
+      catch (Exception e)
       {
          throw new ConfigurationException("Unexpected excetion while parsing the configuration file", e);
       }
@@ -353,8 +356,8 @@
       if (existsAttribute(lockAcquisitionTimeout)) config.setLockAcquisitionTimeout(getLong(lockAcquisitionTimeout));
       String nodeLockingScheme = getAttributeValue(element, "nodeLockingScheme");
       if (existsAttribute(nodeLockingScheme)) config.setNodeLockingScheme(nodeLockingScheme);
-      String allowWriteSkew = getAttributeValue(element, "allowWriteSkew");
-      if (existsAttribute(allowWriteSkew)) config.setAllowWriteSkew(getBoolean(allowWriteSkew));
+      String writeSkewCheck = getAttributeValue(element, "writeSkewCheck");
+      if (existsAttribute(writeSkewCheck)) config.setWriteSkewCheck(getBoolean(writeSkewCheck));
       String concurrencyLevel = getAttributeValue(element, "concurrencyLevel");
       if (existsAttribute(concurrencyLevel)) config.setConcurrencyLevel(getInt(concurrencyLevel));
    }
@@ -380,7 +383,8 @@
          Document doc = parser.parse(config);
          root = doc.getDocumentElement();
          root.normalize();
-      } catch (Exception e)
+      }
+      catch (Exception e)
       {
          log.error(e);
          throw new ConfigurationException("Could not parse the config file");

Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -26,7 +26,6 @@
 import org.jboss.cache.commands.write.RemoveKeyCommand;
 import org.jboss.cache.commands.write.RemoveNodeCommand;
 import org.jboss.cache.factories.annotations.Inject;
-import org.jboss.cache.factories.annotations.Start;
 import org.jboss.cache.interceptors.base.PrePostProcessingCommandInterceptor;
 import org.jboss.cache.invocation.InvocationContext;
 import org.jboss.cache.lock.LockManager;
@@ -47,7 +46,6 @@
  */
 public class MVCCLockingInterceptor extends PrePostProcessingCommandInterceptor
 {
-   boolean allowWriteSkew;
    LockManager lockManager;
    DataContainer dataContainer;
    NodeFactory nodeFactory;
@@ -62,12 +60,6 @@
       this.helper = helper;
    }
 
-   @Start
-   public void start()
-   {
-      allowWriteSkew = configuration.isAllowWriteSkew();
-   }
-
    @Override
    protected boolean doBeforeCall(InvocationContext ctx, VisitableCommand command)
    {

Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -41,7 +41,7 @@
    private long defaultLockAcquisitionTimeout;
    private LockManager lockManager;
    private Configuration configuration;
-   private boolean allowWriteSkew;
+   private boolean writeSkewCheck;
    private boolean lockParentForChildInsertRemove;
 
    @Inject
@@ -57,7 +57,7 @@
    public void start()
    {
       defaultLockAcquisitionTimeout = configuration.getLockAcquisitionTimeout();
-      allowWriteSkew = configuration.isAllowWriteSkew();
+      writeSkewCheck = configuration.isWriteSkewCheck();
       lockParentForChildInsertRemove = configuration.isLockParentForChildInsertRemove();
    }
 
@@ -176,7 +176,7 @@
          if (lockForWriting && acquireLock(context, fqn))
          {
             // create a copy of the underlying node
-            n.markForUpdate(context, dataContainer, nodeFactory, allowWriteSkew);
+            n.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
          }
          if (trace) log.trace("Retrieving wrapped node " + fqn);
          if (n.isDeleted() && createIfAbsent)
@@ -201,7 +201,7 @@
             }
             n = nodeFactory.createWrappedNode(in);
             context.putLookedUpNode(fqn, n);
-            if (needToCopy) n.markForUpdate(context, dataContainer, nodeFactory, allowWriteSkew);
+            if (needToCopy) n.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
          }
          else if (createIfAbsent) // else, do we need to create one?
          {
@@ -213,7 +213,7 @@
             if (parentLockNeeded && acquireLock(context, parentFqn))
             {
                ReadCommittedNode parentRCN = (ReadCommittedNode) context.lookUpNode(parentFqn);
-               parentRCN.markForUpdate(context, dataContainer, nodeFactory, allowWriteSkew);
+               parentRCN.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
             }
 
             // now to lock and create the node.
@@ -227,7 +227,7 @@
             n = nodeFactory.createWrappedNode(in);
             n.setCreated(true);
             context.putLookedUpNode(fqn, n);
-            n.markForUpdate(context, dataContainer, nodeFactory, allowWriteSkew);
+            n.markForUpdate(context, dataContainer, nodeFactory, writeSkewCheck);
          }
       }
 
@@ -308,7 +308,7 @@
       ReadCommittedNode rcn = wrapNodeForWriting(ctx, fqn, true, false, true, false, false);
       if (rcn != null)
       {
-         rcn.markForUpdate(ctx, dataContainer, nodeFactory, allowWriteSkew);
+         rcn.markForUpdate(ctx, dataContainer, nodeFactory, writeSkewCheck);
          ReadCommittedNode parent = (ReadCommittedNode) ctx.lookUpNode(fqn.getParent());
          parent.addChildDirect(nodeFactory.createNodeInvocationDelegate(rcn.getDelegationTarget(), configuration.getIsolationLevel() == IsolationLevel.READ_COMMITTED));
 
@@ -335,7 +335,7 @@
 
       if (needToCopyNode && node != null && !node.isChanged()) // node could be null if using read-committed
       {
-         node.markForUpdate(ctx, dataContainer, nodeFactory, allowWriteSkew);
+         node.markForUpdate(ctx, dataContainer, nodeFactory, writeSkewCheck);
       }
    }
 

Modified: core/trunk/src/main/java/org/jboss/cache/mvcc/NodeReference.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/mvcc/NodeReference.java	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/NodeReference.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -155,11 +155,6 @@
       return delegate.getChildrenMapDirect();
    }
 
-   public Map<Object, Node<K, V>> getChildrenMapDirect(boolean b)
-   {
-      return delegate.getChildrenMapDirect(b);
-   }
-
    public void setChildrenMapDirect(Map<Object, Node<K, V>> children)
    {
       delegate.setChildrenMapDirect(children);

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-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -44,9 +44,9 @@
     * @param ctx            invocation context
     * @param container      data container
     * @param nodeFactory    node factory for creating new nodes/copies.
-    * @param allowWriteSkew if true, write skews are allowed.  Only makes sense with repeatable read.
+    * @param writeSkewCheck if true, and the node supports write skew checking, nodes are tested for write skews.
     */
-   public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean allowWriteSkew)
+   public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
    {
       if (changed) return; // already copied
 

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-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/RepeatableReadNode.java	2008-07-16 08:31:16 UTC (rev 6287)
@@ -27,7 +27,7 @@
    }
 
    @Override
-   public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean allowWriteSkew)
+   public void markForUpdate(InvocationContext ctx, DataContainer container, NodeFactory nodeFactory, boolean writeSkewCheck)
    {
       if (changed) return; // already copied
 
@@ -36,14 +36,17 @@
       // mark node as changed.
       changed = true;
 
-      // check for write skew.
-      NodeInvocationDelegate underlyingNode = (NodeInvocationDelegate) container.peek(fqn, false, true);  // even check for invalid nodes.  we should check tombstones too.
+      if (writeSkewCheck)
+      {
+         // check for write skew.
+         NodeInvocationDelegate underlyingNode = (NodeInvocationDelegate) container.peek(fqn, false, true);  // even check for invalid nodes.  we should check tombstones too.
 
-      if (!allowWriteSkew && underlyingNode != null && underlyingNode.getDelegationTarget() != node)
-      {
-         String errormsg = new StringBuilder().append("Detected write skew on Fqn [").append(fqn).append("].  Another process has changed the node since we last read it!").toString();
-         if (log.isWarnEnabled()) log.warn(errormsg + ".  Unable to copy node for update.");
-         throw new DataVersioningException(errormsg);
+         if (underlyingNode != null && underlyingNode.getDelegationTarget() != node)
+         {
+            String errormsg = new StringBuilder().append("Detected write skew on Fqn [").append(fqn).append("].  Another process has changed the node since we last read it!").toString();
+            if (log.isWarnEnabled()) log.warn(errormsg + ".  Unable to copy node for update.");
+            throw new DataVersioningException(errormsg);
+         }
       }
 
       // make a backup copy

Modified: core/trunk/src/main/resources/jbosscache-config-3.0.xsd
===================================================================
--- core/trunk/src/main/resources/jbosscache-config-3.0.xsd	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/main/resources/jbosscache-config-3.0.xsd	2008-07-16 08:31:16 UTC (rev 6287)
@@ -38,7 +38,7 @@
             </xs:restriction>
          </xs:simpleType>
       </xs:attribute>
-      <xs:attribute name="allowWriteSkew" type="booleanType"/>
+      <xs:attribute name="writeSkewCheck" type="booleanType"/>
       <xs:attribute name="concurrencyLevel" type="xs:integer"/>
    </xs:complexType>
 

Modified: core/trunk/src/test/resources/configs/parser-test.xml
===================================================================
--- core/trunk/src/test/resources/configs/parser-test.xml	2008-07-16 01:12:42 UTC (rev 6286)
+++ core/trunk/src/test/resources/configs/parser-test.xml	2008-07-16 08:31:16 UTC (rev 6287)
@@ -7,7 +7,7 @@
 
 
    <locking isolationLevel="REPEATABLE_READ" lockParentForChildInsertRemove="true" lockAcquisitionTimeout="10234"
-            nodeLockingScheme="mvcc" allowWriteSkew="true" concurrencyLevel="21"/>
+            nodeLockingScheme="mvcc" writeSkewCheck="false" concurrencyLevel="21"/>
 
    <transaction transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"
                 syncRollbackPhase="true" syncCommitPhase="true"/>




More information about the jbosscache-commits mailing list