[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