[jbosscache-commits] JBoss Cache SVN: r6265 - 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
Tue Jul 15 07:11:16 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-07-15 07:11:16 -0400 (Tue, 15 Jul 2008)
New Revision: 6265

Added:
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMVCCTestBase.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticTestBase.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticTestBase.java
Modified:
   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/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationAsyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationSyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplAsyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplSyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationAsyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationSyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplAsyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplSyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationAsyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationSyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplAsyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplSyncTest.java
   core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java
Log:
Fixed PFER tests

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-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/MVCCLockingInterceptor.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -13,6 +13,7 @@
 import org.jboss.cache.commands.read.GetNodeCommand;
 import org.jboss.cache.commands.read.GravitateDataCommand;
 import org.jboss.cache.commands.tx.CommitCommand;
+import org.jboss.cache.commands.tx.PrepareCommand;
 import org.jboss.cache.commands.tx.RollbackCommand;
 import org.jboss.cache.commands.write.ClearDataCommand;
 import org.jboss.cache.commands.write.CreateNodeCommand;
@@ -292,6 +293,21 @@
       return retval;
    }
 
+   @Override
+   public Object handlePrepareCommand(InvocationContext ctx, PrepareCommand command) throws Throwable
+   {
+      Object retval = null;
+      try
+      {
+         retval = invokeNextInterceptor(ctx, command);
+      }
+      finally
+      {
+         if (command.isOnePhaseCommit()) transactionalCleanup(true, ctx);
+      }
+      return retval;
+   }
+
    protected void doAfterCall(InvocationContext ctx, VisitableCommand command)
    {
       // for non-transactional stuff.

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-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/MVCCNodeHelper.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -142,7 +142,10 @@
       if (!ctx.getLocks().contains(fqn))
       {
          if (!lockManager.lockAndRecord(fqn, WRITE, ctx))
-            throw new TimeoutException("Unable to acquire lock on Fqn [" + fqn + "] after [" + ctx.getLockAcquisitionTimeout(defaultLockAcquisitionTimeout) + "] milliseconds!");
+         {
+            Object owner = lockManager.getWriteOwner(fqn);
+            throw new TimeoutException("Unable to acquire lock on Fqn [" + fqn + "] after [" + ctx.getLockAcquisitionTimeout(defaultLockAcquisitionTimeout) + "] milliseconds for requestor [" + lockManager.getLockOwner(ctx) + "]! Lock held by [" + owner + "]");
+         }
          return true;
       }
       return false;

Added: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMVCCTestBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMVCCTestBase.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMVCCTestBase.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -0,0 +1,26 @@
+package org.jboss.cache.api.pfer;
+
+import org.jboss.cache.CacheSPI;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.api.mvcc.LockAssert;
+import org.jboss.cache.config.Configuration.NodeLockingScheme;
+import org.jboss.cache.factories.ComponentRegistry;
+import org.jboss.cache.invocation.InvocationContextContainer;
+import org.jboss.cache.lock.LockManager;
+import org.jboss.cache.util.TestingUtil;
+
+public abstract class PFERMVCCTestBase extends PutForExternalReadTestBase
+{
+   protected PFERMVCCTestBase()
+   {
+      nodeLockingScheme = NodeLockingScheme.MVCC;
+   }
+
+   @Override
+   protected void assertLocked(Fqn fqn, CacheSPI cache, boolean writeLocked)
+   {
+      if (!writeLocked) return; // MVCC only does write locks.
+      ComponentRegistry cr = TestingUtil.extractComponentRegistry(cache);
+      LockAssert.assertLocked(fqn, cr.getComponent(LockManager.class), cr.getComponent(InvocationContextContainer.class));
+   }
+}
\ No newline at end of file

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationAsyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationAsyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationAsyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "mvcc"})
-public class PFERMvccInvalidationAsyncTest extends PutForExternalReadTestBase
+public class PFERMvccInvalidationAsyncTest extends PFERMVCCTestBase
 {
    public PFERMvccInvalidationAsyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.MVCC;
       cacheMode = Configuration.CacheMode.INVALIDATION_ASYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationSyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationSyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccInvalidationSyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "mvcc"})
-public class PFERMvccInvalidationSyncTest extends PutForExternalReadTestBase
+public class PFERMvccInvalidationSyncTest extends PFERMVCCTestBase
 {
    public PFERMvccInvalidationSyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.MVCC;
       cacheMode = Configuration.CacheMode.INVALIDATION_SYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplAsyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplAsyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplAsyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "mvcc"})
-public class PFERMvccReplAsyncTest extends PutForExternalReadTestBase
+public class PFERMvccReplAsyncTest extends PFERMVCCTestBase
 {
    public PFERMvccReplAsyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.MVCC;
       cacheMode = Configuration.CacheMode.REPL_ASYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplSyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplSyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERMvccReplSyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "mvcc"})
-public class PFERMvccReplSyncTest extends PutForExternalReadTestBase
+public class PFERMvccReplSyncTest extends PFERMVCCTestBase
 {
    public PFERMvccReplSyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.MVCC;
       cacheMode = Configuration.CacheMode.REPL_SYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationAsyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationAsyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationAsyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -7,7 +7,6 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 /**
@@ -17,11 +16,10 @@
  * @version $Revision$
  */
 @Test(groups = {"functional", "optimistic"})
-public class PFEROptimisticInvalidationAsyncTest extends PutForExternalReadTestBase
+public class PFEROptimisticInvalidationAsyncTest extends PFEROptimisticTestBase
 {
    public PFEROptimisticInvalidationAsyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.OPTIMISTIC;
       cacheMode = Configuration.CacheMode.INVALIDATION_ASYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationSyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationSyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticInvalidationSyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -7,7 +7,6 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 /**
@@ -17,11 +16,10 @@
  * @version $Revision$
  */
 @Test(groups = {"functional", "optimistic"})
-public class PFEROptimisticInvalidationSyncTest extends PutForExternalReadTestBase
+public class PFEROptimisticInvalidationSyncTest extends PFEROptimisticTestBase
 {
    public PFEROptimisticInvalidationSyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.OPTIMISTIC;
       cacheMode = Configuration.CacheMode.INVALIDATION_SYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplAsyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplAsyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplAsyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "optimistic"})
-public class PFEROptimisticReplAsyncTest extends PutForExternalReadTestBase
+public class PFEROptimisticReplAsyncTest extends PFEROptimisticTestBase
 {
    public PFEROptimisticReplAsyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.OPTIMISTIC;
       cacheMode = Configuration.CacheMode.REPL_ASYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplSyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplSyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticReplSyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "optimistic"})
-public class PFEROptimisticReplSyncTest extends PutForExternalReadTestBase
+public class PFEROptimisticReplSyncTest extends PFEROptimisticTestBase
 {
    public PFEROptimisticReplSyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.OPTIMISTIC;
       cacheMode = Configuration.CacheMode.REPL_SYNC;
    }
 }

Added: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticTestBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticTestBase.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFEROptimisticTestBase.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -0,0 +1,44 @@
+package org.jboss.cache.api.pfer;
+
+import org.jboss.cache.CacheSPI;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.config.Configuration.NodeLockingScheme;
+import org.jboss.cache.optimistic.TransactionWorkspace;
+import org.jboss.cache.transaction.GlobalTransaction;
+import org.jboss.cache.transaction.OptimisticTransactionContext;
+import org.jboss.cache.transaction.TransactionContext;
+import org.jboss.cache.transaction.TransactionTable;
+import org.jboss.cache.util.TestingUtil;
+import static org.testng.AssertJUnit.assertNotNull;
+
+import java.util.Map;
+
+public abstract class PFEROptimisticTestBase extends PutForExternalReadTestBase
+{
+   protected PFEROptimisticTestBase()
+   {
+      nodeLockingScheme = NodeLockingScheme.OPTIMISTIC;
+   }
+
+   @Override
+   @SuppressWarnings("unchecked")
+   protected void assertLocked(Fqn fqn, CacheSPI cache, boolean writeLocked)
+   {
+      TransactionTable tt = cache.getTransactionTable();
+      GlobalTransaction gtx = tt.getCurrentTransaction();
+      OptimisticTransactionContext otc = (OptimisticTransactionContext) cache.getTransactionTable().get(gtx);
+
+      if (otc == null && gtx == null)
+      {
+         // perhaps the tx has been suspended?
+         Map<GlobalTransaction, TransactionContext> gtx2ContextMap = (Map<GlobalTransaction, TransactionContext>) TestingUtil.extractField(tt, "gtx2ContextMap");
+         assert gtx2ContextMap.size() == 1 : "Can only attempt to access a suspended tx if there is only one such suspended tx!";
+         gtx = gtx2ContextMap.keySet().iterator().next();
+         otc = (OptimisticTransactionContext) gtx2ContextMap.get(gtx);
+      }
+
+      TransactionWorkspace workspace = otc.getTransactionWorkSpace();
+      // scan workspaces for this node
+      assertNotNull("node " + fqn + " should be in transaction workspace", workspace.getNode(fqn));
+   }
+}

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationAsyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationAsyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationAsyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -7,7 +7,6 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 /**
@@ -17,11 +16,10 @@
  * @version $Revision$
  */
 @Test(groups = {"functional", "pessimistic"})
-public class PFERPessimisticInvalidationAsyncTest extends PutForExternalReadTestBase
+public class PFERPessimisticInvalidationAsyncTest extends PFERPessimisticTestBase
 {
    public PFERPessimisticInvalidationAsyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.PESSIMISTIC;
       cacheMode = Configuration.CacheMode.INVALIDATION_ASYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationSyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationSyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticInvalidationSyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -7,7 +7,6 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 /**
@@ -17,12 +16,10 @@
  * @version $Revision$
  */
 @Test(groups = {"functional", "pessimistic"})
-public class PFERPessimisticInvalidationSyncTest extends PutForExternalReadTestBase
+public class PFERPessimisticInvalidationSyncTest extends PFERPessimisticTestBase
 {
    public PFERPessimisticInvalidationSyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.PESSIMISTIC;
       cacheMode = Configuration.CacheMode.INVALIDATION_SYNC;
    }
-
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplAsyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplAsyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplAsyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "pessimistic"})
-public class PFERPessimisticReplAsyncTest extends PutForExternalReadTestBase
+public class PFERPessimisticReplAsyncTest extends PFERPessimisticTestBase
 {
    public PFERPessimisticReplAsyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.PESSIMISTIC;
       cacheMode = Configuration.CacheMode.REPL_ASYNC;
    }
 }

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplSyncTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplSyncTest.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticReplSyncTest.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -1,15 +1,13 @@
 package org.jboss.cache.api.pfer;
 
 import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "pessimistic"})
-public class PFERPessimisticReplSyncTest extends PutForExternalReadTestBase
+public class PFERPessimisticReplSyncTest extends PFERPessimisticTestBase
 {
    public PFERPessimisticReplSyncTest()
    {
-      nodeLockingScheme = NodeLockingScheme.PESSIMISTIC;
       cacheMode = Configuration.CacheMode.REPL_SYNC;
    }
 }

Added: core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticTestBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticTestBase.java	                        (rev 0)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PFERPessimisticTestBase.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -0,0 +1,72 @@
+package org.jboss.cache.api.pfer;
+
+import org.jboss.cache.CacheSPI;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.config.Configuration.NodeLockingScheme;
+import org.jboss.cache.lock.NodeLock;
+import static org.testng.AssertJUnit.*;
+
+import javax.transaction.Transaction;
+
+public abstract class PFERPessimisticTestBase extends PutForExternalReadTestBase
+{
+   protected PFERPessimisticTestBase()
+   {
+      nodeLockingScheme = NodeLockingScheme.PESSIMISTIC;
+   }
+
+   @Override
+   protected void assertLocked(Fqn fqn, CacheSPI cache, boolean writeLocked)
+   {
+      NodeLock lock = cache.peek(fqn, true, true).getLock();
+      assertTrue("node " + fqn + " is not locked", lock.isLocked());
+      if (writeLocked)
+      {
+         assertTrue("node " + fqn + " is not write-locked" + (lock.isReadLocked() ? " but is read-locked instead!" : "!"), lock.isWriteLocked());
+      }
+      else
+      {
+         assertTrue("node " + fqn + " is not read-locked" + (lock.isWriteLocked() ? " but is write-locked instead!" : "!"), lock.isReadLocked());
+      }
+   }
+
+   /**
+    * Locks could only occur on the parent node is write locked since if the child node exists it is a no-op anyway.
+    * If the parent node is read locked as well, there is no issue.
+    */
+   public void testNoOpWhenLockedAnd0msTimeout() throws Exception
+   {
+      // create the parent node first ...
+      cache1.put(parentFqn, key, value);
+
+      tm1.begin();
+      cache1.put(parentFqn, key, value2);
+
+      Transaction t = tm1.suspend();
+
+      assertLocked(parentFqn, cache1, true);
+
+      // parentFqn should be write-locked.
+      long startTime = System.currentTimeMillis();
+      cache1.putForExternalRead(fqn, key, value);
+
+      long waited = System.currentTimeMillis() - startTime;
+      // crappy way to test that pFER does not block, but it is effective.
+      assertTrue("Should not wait " + waited + " millis for lock timeout, should attempt to acquire lock with 0ms!", waited < cache1.getConfiguration().getLockAcquisitionTimeout());
+      // should not block.
+
+      tm1.resume(t);
+      tm1.commit();
+
+      asyncWait();
+
+      assertEquals("Parent node write should have succeeded", value2, cache1.get(parentFqn, key));
+      if (isUsingInvalidation())
+         assertNull("Parent node write should have invalidated", cache2.get(parentFqn, key));
+      else
+         assertEquals("Parent node write should have replicated", value2, cache2.get(parentFqn, key));
+
+      assertNull("PFER should have been a no-op", cache1.get(fqn, key));
+      assertNull("PFER should have been a no-op", cache2.get(fqn, key));
+   }
+}
\ No newline at end of file

Modified: core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java	2008-07-15 09:55:21 UTC (rev 6264)
+++ core/trunk/src/test/java/org/jboss/cache/api/pfer/PutForExternalReadTestBase.java	2008-07-15 11:11:16 UTC (rev 6265)
@@ -7,14 +7,12 @@
 import org.jboss.cache.CacheSPI;
 import org.jboss.cache.DefaultCacheFactory;
 import org.jboss.cache.Fqn;
-import org.jboss.cache.NodeSPI;
 import org.jboss.cache.RPCManager;
 import org.jboss.cache.commands.ReplicableCommand;
 import org.jboss.cache.config.Configuration;
 import org.jboss.cache.config.Configuration.NodeLockingScheme;
 import org.jboss.cache.factories.ComponentRegistry;
 import org.jboss.cache.factories.UnitTestCacheConfigurationFactory;
-import org.jboss.cache.lock.NodeLock;
 import org.jboss.cache.optimistic.TransactionWorkspace;
 import org.jboss.cache.transaction.GlobalTransaction;
 import org.jboss.cache.transaction.OptimisticTransactionContext;
@@ -82,57 +80,6 @@
       TestingUtil.killCaches(cache1, cache2);
    }
 
-   /**
-    * Locks could only occur on the parent node is write locked since if the child node exists it is a no-op anyway.
-    * If the parent node is read locked as well, there is no issue.
-    */
-   public void testNoOpWhenLockedAnd0msTimeout() throws Exception
-   {
-      // create the parent node first ...
-      cache1.put(parentFqn, key, value);
-
-      tm1.begin();
-      cache1.put(parentFqn, key, value2);
-      NodeSPI parentNode = null;
-      TransactionWorkspace workspace = null;
-
-      if (isOptimistic())
-         workspace = extractTransactionWorkspace(cache1);
-      else
-         parentNode = (NodeSPI<String, String>) cache1.getRoot().getChild(parentFqn);
-
-      Transaction t = tm1.suspend();
-
-      assertLocked(parentFqn, parentNode, workspace, true);
-
-      // parentFqn should be write-locked.
-      long startTime = System.currentTimeMillis();
-      cache1.putForExternalRead(fqn, key, value);
-
-      long waited = System.currentTimeMillis() - startTime;
-      // crappy way to test that pFER does not block, but it is effective.
-      assertTrue("Should not wait " + waited + " millis for lock timeout, should attempt to acquite lock with 0ms!", waited < cache1.getConfiguration().getLockAcquisitionTimeout());
-      // should not block.
-
-      tm1.resume(t);
-      tm1.commit();
-
-      asyncWait();
-
-      assertEquals("Parent node write should have succeeded", value2, cache1.get(parentFqn, key));
-      if (isUsingInvalidation())
-         assertNull("Parent node write should have invalidated", cache2.get(parentFqn, key));
-      else
-         assertEquals("Parent node write should have replicated", value2, cache2.get(parentFqn, key));
-
-      if (!isOptimistic())
-      {
-         // doesn't apply with isOptimistic() locking since both gtx2EntryMap will succeed here.
-         assertNull("PFER should have been a no-op", cache1.get(fqn, key));
-         assertNull("PFER should have been a no-op", cache2.get(fqn, key));
-      }
-   }
-
    public void testNoOpWhenNodePresent()
    {
       cache1.putForExternalRead(fqn, key, value);
@@ -208,19 +155,12 @@
       // start a tx and do some stuff.
       tm1.begin();
       cache1.get(parentFqn, key);
-      NodeSPI parentNode = null;
-      TransactionWorkspace workspace = null;
-      if (isOptimistic())
-         workspace = extractTransactionWorkspace(cache1);
-      else
-         parentNode = (NodeSPI<String, String>) cache1.getRoot().getChild(parentFqn);
-
       cache1.putForExternalRead(fqn, key, value); // should have happened in a separate tx and have committed already.
       Transaction t = tm1.suspend();
 
       asyncWait();
 
-      assertLocked(parentFqn, parentNode, workspace, false);
+      assertLocked(parentFqn, cache1, false);
 
       assertEquals("PFER should have completed", value, cache1.get(fqn, key));
       if (isUsingInvalidation())
@@ -424,28 +364,7 @@
       cache1.removeNode(fqn);
    }
 
-   protected void assertLocked(Fqn fqn, NodeSPI n, TransactionWorkspace workspace, boolean write_locked) throws Exception
-   {
-      // this needs to cater for "optimistically locked" nodes as well.
-      if (workspace != null)
-      {
-         // scan workspaces for this node
-         assertNotNull("node " + fqn + " should be in transaction workspace", workspace.getNode(fqn));
-      }
-      else
-      {
-         NodeLock lock = n.getLock();
-         assertTrue("node " + fqn + " is not locked", lock.isLocked());
-         if (write_locked)
-         {
-            assertTrue("node " + fqn + " is not write-locked" + (lock.isReadLocked() ? " but is read-locked instead!" : "!"), lock.isWriteLocked());
-         }
-         else
-         {
-            assertTrue("node " + fqn + " is not read-locked" + (lock.isWriteLocked() ? " but is write-locked instead!" : "!"), lock.isReadLocked());
-         }
-      }
-   }
+   protected abstract void assertLocked(Fqn fqn, CacheSPI cache, boolean writeLocked);
 
    protected TransactionWorkspace extractTransactionWorkspace(Cache c)
    {




More information about the jbosscache-commits mailing list