[jbosscache-commits] JBoss Cache SVN: r4651 - in core/trunk/src: test/java/org/jboss/cache/statetransfer and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Fri Oct 19 13:55:04 EDT 2007


Author: manik.surtani at jboss.com
Date: 2007-10-19 13:55:03 -0400 (Fri, 19 Oct 2007)
New Revision: 4651

Modified:
   core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferGenerator.java
   core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferIntegrator.java
   core/trunk/src/main/java/org/jboss/cache/statetransfer/StateTransferManager.java
   core/trunk/src/test/java/org/jboss/cache/statetransfer/DataVersionTransferTest.java
Log:
Updated test for JBCACHE-1202 and a fix for the same

Modified: core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferGenerator.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferGenerator.java	2007-10-19 17:37:24 UTC (rev 4650)
+++ core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferGenerator.java	2007-10-19 17:55:03 UTC (rev 4651)
@@ -19,6 +19,7 @@
 
 import java.io.IOException;
 import java.io.ObjectOutputStream;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -152,6 +153,14 @@
 
       // first handle the current node
       attrs = node.getDataDirect();
+
+      // add a dummy attribute to hold the data version if any
+      if (cache.getConfiguration().isNodeLockingOptimistic())
+      {
+         attrs = new HashMap(attrs);
+         attrs.put(StateTransferManager.DATA_VERSION_KEY, node.getVersion());
+      }
+
       if (attrs.size() == 0)
       {
          nd = new NodeData(node.getFqn());

Modified: core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferIntegrator.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferIntegrator.java	2007-10-19 17:37:24 UTC (rev 4650)
+++ core/trunk/src/main/java/org/jboss/cache/statetransfer/DefaultStateTransferIntegrator.java	2007-10-19 17:55:03 UTC (rev 4651)
@@ -23,6 +23,7 @@
 import org.jboss.cache.marshall.NodeData;
 import org.jboss.cache.marshall.NodeDataExceptionMarker;
 import org.jboss.cache.marshall.NodeDataMarker;
+import org.jboss.cache.optimistic.DataVersion;
 
 import java.io.IOException;
 import java.io.ObjectInputStream;
@@ -247,7 +248,10 @@
             //are there any transient nodes at all?
             if (nd != null && !nd.isMarker())
             {
-               target.putAllDirect(nd.getAttributes());
+               Map attributes = nd.getAttributes();
+               DataVersion version = (DataVersion) attributes.remove(StateTransferManager.DATA_VERSION_KEY);
+               target.putAllDirect(attributes);
+               if (version != null) target.setVersion(version);
 
                // Check whether this is an integration into the buddy backup
                // subtree
@@ -323,8 +327,10 @@
          Map attrs = nd.getAttributes();
 
          // We handle this NodeData.  Create a TreeNode and
-         // integrate its data            
+         // integrate its data
+         DataVersion version = (DataVersion) attrs.remove(StateTransferManager.DATA_VERSION_KEY);
          NodeSPI target = factory.createDataNode(name, fqn, parent, attrs, false);
+         if (version != null) target.setVersion(version);
          parent.addChild(name, target);
 
          // JBCACHE-913

Modified: core/trunk/src/main/java/org/jboss/cache/statetransfer/StateTransferManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/statetransfer/StateTransferManager.java	2007-10-19 17:37:24 UTC (rev 4650)
+++ core/trunk/src/main/java/org/jboss/cache/statetransfer/StateTransferManager.java	2007-10-19 17:55:03 UTC (rev 4651)
@@ -30,6 +30,8 @@
 
    public static final String PARTIAL_STATE_DELIMITER = "_PARTIAL_STATE_DELIMITER";
 
+   public static final String DATA_VERSION_KEY = "_jboss_internal_data_version";
+
    private final CacheImpl cache;
 
    public StateTransferManager(CacheImpl cache)

Modified: core/trunk/src/test/java/org/jboss/cache/statetransfer/DataVersionTransferTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/statetransfer/DataVersionTransferTest.java	2007-10-19 17:37:24 UTC (rev 4650)
+++ core/trunk/src/test/java/org/jboss/cache/statetransfer/DataVersionTransferTest.java	2007-10-19 17:55:03 UTC (rev 4651)
@@ -127,6 +127,67 @@
       assert ((CharVersion) dv).version == 'C' : "Version should have transferred";
    }
 
+    public void testStateTransferIntermediateNodeDefaultVersions() throws Exception
+   {
+      Fqn f = Fqn.fromString("/one/two/three");
+      Fqn intermediate = f.getParent();
+
+      caches.get(0).put(f, "k", "v");
+      caches.get(0).put(intermediate, "k", "v");
+
+      NodeSPI n = (NodeSPI) caches.get(0).getRoot().getChild(intermediate);
+      DataVersion dv = n.getVersion();
+
+      assert dv instanceof DefaultDataVersion : "Should be an instance of DefaultDataVersion";
+
+      assert ((DefaultDataVersion) dv).getRawVersion() == 1 : "Should have accurate data version";
+
+      // now start next cache instance
+      caches.get(1).start();
+
+      TestingUtil.blockUntilViewsReceived(10000, caches.get(0), caches.get(1));
+
+      assert caches.get(1).get(intermediate, "k").equals("v") : "Value should have transferred";
+
+      n = (NodeSPI) caches.get(0).getRoot().getChild(intermediate);
+      dv = n.getVersion();
+
+      assert dv instanceof DefaultDataVersion : "Should be an instance of DefaultDataVersion";
+
+      assert ((DefaultDataVersion) dv).getRawVersion() == 1 : "Should have accurate data version";
+   }
+
+   public void testStateTransferIntermediateNodeCustomVersion() throws Exception
+   {
+      Fqn f = Fqn.fromString("/one/two/three");
+      Fqn intermediate = f.getParent();
+
+      caches.get(0).put(f, "k", "v");
+      caches.get(0).getInvocationContext().getOptionOverrides().setDataVersion(new CharVersion('X'));
+      caches.get(0).put(intermediate, "k", "v");
+
+      NodeSPI n = (NodeSPI) caches.get(0).getRoot().getChild(intermediate);
+      DataVersion dv = n.getVersion();
+
+      assert dv instanceof CharVersion : "Should be an instance of CharVersion";
+
+      assert ((CharVersion) dv).version == 'X' : "Should have accurate data version";
+
+      // now start next cache instance
+      caches.get(1).start();
+
+      TestingUtil.blockUntilViewsReceived(10000, caches.get(0), caches.get(1));
+
+      assert caches.get(1).get(intermediate, "k").equals("v") : "Value should have transferred";
+
+      n = (NodeSPI) caches.get(0).getRoot().getChild(intermediate);
+      dv = n.getVersion();
+
+      assert dv instanceof CharVersion : "Should be an instance of CharVersion";
+
+      assert ((CharVersion) dv).version == 'X' : "Should have accurate data version";
+   }
+
    public void testStateTransferDefaultVersionAfterRemoval() throws Exception
    {
       Fqn f = Fqn.fromString("/one/two/three");
@@ -208,7 +269,7 @@
          }
          else
          {
-            throw new DataVersioningException("Incompatible version types");
+            return true;
          }
       }
    }




More information about the jbosscache-commits mailing list