JBoss Cache SVN: r6267 - core/trunk/src/main/java/org/jboss/cache.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-15 07:52:04 -0400 (Tue, 15 Jul 2008)
New Revision: 6267
Modified:
core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java
core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java
Log:
fixed locking issues with region activation and deactivation
Modified: core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java 2008-07-15 11:13:55 UTC (rev 6266)
+++ core/trunk/src/main/java/org/jboss/cache/LegacyRegionManagerImpl.java 2008-07-15 11:52:04 UTC (rev 6267)
@@ -1,7 +1,12 @@
package org.jboss.cache;
import net.jcip.annotations.ThreadSafe;
+import org.jboss.cache.buddyreplication.BuddyManager;
+import static org.jboss.cache.lock.LockType.WRITE;
+import java.util.ArrayList;
+import java.util.Set;
+
/**
* For optimistic and pessimistically locked caches
*
@@ -11,9 +16,133 @@
@ThreadSafe
public class LegacyRegionManagerImpl extends RegionManagerImpl
{
+ /**
+ * Causes the cache to stop accepting replication events for the subtree
+ * rooted at <code>subtreeFqn</code> and evict all nodes in that subtree.
+ * <p/>
+ * This is legacy code and should not be called directly. This is a private method for now and will be refactored out.
+ * You should be using {@link #activate(Fqn)} and {@link #deactivate(Fqn)}
+ * <p/>
+ *
+ * @param fqn Fqn string indicating the uppermost node in the
+ * portion of the cache that should be activated.
+ * @throws CacheException if there is a problem evicting nodes
+ * @throws IllegalStateException if {@link org.jboss.cache.config.Configuration#isUseRegionBasedMarshalling()} is <code>false</code>
+ */
@Override
- protected Object getOwnerForLock()
+ protected void inactivateRegion(Fqn fqn) throws CacheException
{
+ if (isActivatingDeactivating(fqn))
+ throw new CacheException("Region " + fqn + " is already being activated/deactivated");
+
+ NodeSPI parent = null;
+ NodeSPI subtreeRoot = null;
+ boolean parentLocked = false;
+ boolean subtreeLocked = false;
+
+ try
+ {
+ // Record that this fqn is in status change, so can't provide state
+ activationChangeNodes.add(fqn);
+
+ if (!isInactive(fqn))
+ {
+ deactivate(fqn);
+ }
+
+ // Create a list with the Fqn in the main cache and any buddy backup trees
+ BuddyManager buddyManager = cache.getBuddyManager();
+ ArrayList<Fqn> list = new ArrayList<Fqn>();
+ list.add(fqn);
+
+ if (buddyManager != null)
+ {
+ Set buddies = cache.peek(BuddyManager.BUDDY_BACKUP_SUBTREE_FQN, false, false).getChildrenNames();
+ if (buddies != null)
+ {
+ for (Object buddy : buddies)
+ {
+ list.add(buddyFqnTransformer.getBackupFqn((String) buddy, fqn));
+ }
+ }
+ }
+
+ long stateFetchTimeout = cache.getConfiguration().getLockAcquisitionTimeout() + 5000;
+ // Remove the subtree from the main cache and any buddy backup trees
+ for (Fqn subtree : list)
+ {
+ subtreeRoot = cache.peek(subtree, false);
+ if (subtreeRoot != null)
+ {
+ // Acquire locks
+ subtreeLocked = lockManager.lockAll(subtreeRoot, WRITE, getOwnerForLock(), stateFetchTimeout);
+
+ // Lock the parent, as we're about to write to it
+ parent = subtreeRoot.getParentDirect();
+ if (parent != null)
+ parentLocked = lockManager.lockAll(parent, WRITE, getOwnerForLock(), stateFetchTimeout);
+
+ // Remove the subtree
+ cache.evict(subtree, true);
+
+ // Release locks
+ if (parent != null)
+ {
+ log.debug("forcing release of locks in parent");
+ lockManager.unlockAll(parent);
+ }
+
+ parentLocked = false;
+
+ log.debug("forcing release of all locks in subtree");
+ lockManager.unlockAll(subtreeRoot);
+ subtreeLocked = false;
+ }
+ }
+ }
+ catch (InterruptedException e)
+ {
+ throw new CacheException(e);
+ }
+ finally
+ {
+ // If we didn't succeed, undo the marshalling change
+ // NO. Since we inactivated, we may have missed changes
+ //if (!success && !inactive)
+ // marshaller_.activate(subtreeFqn);
+
+ // If necessary, release locks
+ if (parentLocked)
+ {
+ log.debug("forcing release of locks in parent");
+ try
+ {
+ if (parent != null) lockManager.unlockAll(parent);
+ }
+ catch (Throwable t)
+ {
+ log.error("failed releasing locks", t);
+ }
+ }
+ if (subtreeLocked)
+ {
+ log.debug("forcing release of all locks in subtree");
+ try
+ {
+ if (subtreeRoot != null) lockManager.unlockAll(subtreeRoot);
+ }
+ catch (Throwable t)
+ {
+ log.error("failed releasing locks", t);
+ }
+ }
+
+ activationChangeNodes.remove(fqn);
+ }
+ }
+
+ private Object getOwnerForLock()
+ {
Object owner = cache.getCurrentTransaction();
return owner == null ? Thread.currentThread() : owner;
}
Modified: core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java 2008-07-15 11:13:55 UTC (rev 6266)
+++ core/trunk/src/main/java/org/jboss/cache/RegionManagerImpl.java 2008-07-15 11:52:04 UTC (rev 6267)
@@ -16,6 +16,7 @@
import org.jboss.cache.factories.annotations.Inject;
import org.jboss.cache.factories.annotations.Start;
import org.jboss.cache.factories.annotations.Stop;
+import org.jboss.cache.invocation.InvocationContext;
import org.jboss.cache.lock.LockManager;
import static org.jboss.cache.lock.LockType.WRITE;
import org.jgroups.Address;
@@ -44,7 +45,7 @@
private RegionRegistry regionsRegistry;
private boolean defaultInactive;
- private final Log log = LogFactory.getLog(RegionManagerImpl.class);
+ protected final Log log = LogFactory.getLog(RegionManagerImpl.class);
CacheSPI cache;
private boolean usingEvictions;
private EvictionConfig evictionConfig;
@@ -54,7 +55,7 @@
protected Configuration configuration;
protected RPCManager rpcManager;
protected LockManager lockManager;
- private BuddyFqnTransformer buddyFqnTransformer;
+ protected BuddyFqnTransformer buddyFqnTransformer;
private boolean isUsingBR;
@Inject
@@ -471,17 +472,17 @@
* @throws CacheException if there is a problem evicting nodes
* @throws IllegalStateException if {@link org.jboss.cache.config.Configuration#isUseRegionBasedMarshalling()} is <code>false</code>
*/
- private void inactivateRegion(Fqn fqn) throws CacheException
+ protected void inactivateRegion(Fqn fqn) throws CacheException
{
if (isActivatingDeactivating(fqn))
- {
throw new CacheException("Region " + fqn + " is already being activated/deactivated");
- }
NodeSPI parent = null;
NodeSPI subtreeRoot = null;
boolean parentLocked = false;
boolean subtreeLocked = false;
+ InvocationContext ctx = cache.getInvocationContext();
+ ctx.getOptionOverrides().setLockAcquisitionTimeout((int) (cache.getConfiguration().getLockAcquisitionTimeout() + 5000));
try
{
@@ -510,36 +511,34 @@
}
}
- long stateFetchTimeout = cache.getConfiguration().getLockAcquisitionTimeout() + 5000;
// Remove the subtree from the main cache and any buddy backup trees
for (Fqn subtree : list)
{
subtreeRoot = cache.peek(subtree, false);
+
if (subtreeRoot != null)
{
// Acquire locks
- subtreeLocked = lockManager.lockAll(subtreeRoot, WRITE, getOwnerForLock(), stateFetchTimeout);
+ subtreeLocked = lockManager.lockAllAndRecord(subtreeRoot, WRITE, ctx);
// Lock the parent, as we're about to write to it
parent = subtreeRoot.getParentDirect();
- if (parent != null)
- parentLocked = lockManager.lockAll(parent, WRITE, getOwnerForLock(), stateFetchTimeout);
+ if (parent != null) parentLocked = lockManager.lockAllAndRecord(parent, WRITE, ctx);
// Remove the subtree
cache.evict(subtree, true);
- //cache._evictSubtree(subtree);
// Release locks
if (parent != null)
{
log.debug("forcing release of locks in parent");
- lockManager.unlockAll(parent);
+ if (lockManager.isLocked(parent)) lockManager.unlock(parent.getFqn(), null);
}
parentLocked = false;
log.debug("forcing release of all locks in subtree");
- lockManager.unlockAll(subtreeRoot);
+ lockManager.unlock(ctx);
subtreeLocked = false;
}
}
@@ -555,13 +554,12 @@
//if (!success && !inactive)
// marshaller_.activate(subtreeFqn);
- // If necessary, release locks
if (parentLocked)
{
log.debug("forcing release of locks in parent");
try
{
- if (parent != null) lockManager.unlockAll(parent);
+ if (parent != null && lockManager.isLocked(parent.getFqn())) lockManager.unlock(parent.getFqn(), null);
}
catch (Throwable t)
{
@@ -573,7 +571,8 @@
log.debug("forcing release of all locks in subtree");
try
{
- if (subtreeRoot != null) lockManager.unlockAll(subtreeRoot);
+ if (subtreeRoot != null && lockManager.isLocked(subtreeRoot.getFqn()))
+ lockManager.unlock(subtreeRoot.getFqn(), null);
}
catch (Throwable t)
{
@@ -581,16 +580,13 @@
}
}
+ // If necessary, release locks
+ if (ctx != null) lockManager.unlock(ctx);
+
activationChangeNodes.remove(fqn);
}
}
- // MVCC deduces lock owners implicitly.
- protected Object getOwnerForLock()
- {
- return null;
- }
-
/**
* <p/>
* This is legacy code and should not be called directly. This is a private method for now and will be refactored out.
@@ -600,7 +596,7 @@
* @param fqn fqn of the region
* @return true if the region defined by the fqn is in the process of activating/deactivating
*/
- private boolean isActivatingDeactivating(Fqn fqn)
+ protected boolean isActivatingDeactivating(Fqn fqn)
{
return activationChangeNodes.contains(fqn);
}
17 years, 5 months
JBoss Cache SVN: r6266 - core/trunk/src/test/java/org/jboss/cache/eviction.
by jbosscache-commits@lists.jboss.org
Author: mircea.markus
Date: 2008-07-15 07:13:55 -0400 (Tue, 15 Jul 2008)
New Revision: 6266
Modified:
core/trunk/src/test/java/org/jboss/cache/eviction/LRUPolicyTest.java
Log:
fixed test
Modified: core/trunk/src/test/java/org/jboss/cache/eviction/LRUPolicyTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/eviction/LRUPolicyTest.java 2008-07-15 11:11:16 UTC (rev 6265)
+++ core/trunk/src/test/java/org/jboss/cache/eviction/LRUPolicyTest.java 2008-07-15 11:13:55 UTC (rev 6266)
@@ -334,6 +334,7 @@
cache1.put(Fqn.fromString("/base/" + 0), "key", "base" + 0);
Node node = cache1.getRoot().getChild(Fqn.fromString("/base/"));
node.setResident(true);
+ cache1.getRoot().setResident(true);
for (int i = 1; i < 5100; i++)
{
17 years, 5 months
JBoss Cache SVN: r6265 - in core/trunk/src: main/java/org/jboss/cache/mvcc and 1 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)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)
{
17 years, 5 months
JBoss Cache SVN: r6264 - in core/trunk/src: test/java/org/jboss/cache/api/nodevalidity and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-15 05:55:21 -0400 (Tue, 15 Jul 2008)
New Revision: 6264
Modified:
core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java
core/trunk/src/test/java/org/jboss/cache/api/nodevalidity/InvalidatedMvccNodeValidityTest.java
Log:
Cleaned up unit test failures
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-15 09:42:01 UTC (rev 6263)
+++ core/trunk/src/main/java/org/jboss/cache/mvcc/ReadCommittedNode.java 2008-07-15 09:55:21 UTC (rev 6264)
@@ -95,11 +95,18 @@
updateNode(ctx, container, nodeFactory);
}
- changed = false;
- backup = null;
+ reset();
}
}
+ private void reset()
+ {
+ backup = null;
+ changed = false;
+ created = false;
+ deleted = false;
+ }
+
/**
* Performs a lookup for the parent node of the Fqn passed in. The context is checked first, and failing that, the
* data container is consulted.
@@ -131,7 +138,7 @@
protected void updateNode(InvocationContext ctx, DataContainer dataContainer, NodeFactory nf)
{
// swap refs
- ((NodeReference) backup).setDelegate(node);
+ if (!created) ((NodeReference) backup).setDelegate(node);
node = backup;
}
Modified: core/trunk/src/test/java/org/jboss/cache/api/nodevalidity/InvalidatedMvccNodeValidityTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/nodevalidity/InvalidatedMvccNodeValidityTest.java 2008-07-15 09:42:01 UTC (rev 6263)
+++ core/trunk/src/test/java/org/jboss/cache/api/nodevalidity/InvalidatedMvccNodeValidityTest.java 2008-07-15 09:55:21 UTC (rev 6264)
@@ -6,7 +6,7 @@
import org.testng.annotations.Test;
@Test(groups = {"functional", "mvcc"})
-public class InvalidatedMvccNodeValidityTest extends InvalidatedOptNodeValidityTest
+public class InvalidatedMvccNodeValidityTest extends InvalidatedPessNodeValidityTest
{
public InvalidatedMvccNodeValidityTest()
{
17 years, 5 months
JBoss Cache SVN: r6263 - core/trunk/src/test/java/org/jboss/cache/eviction.
by jbosscache-commits@lists.jboss.org
Author: mircea.markus
Date: 2008-07-15 05:42:01 -0400 (Tue, 15 Jul 2008)
New Revision: 6263
Modified:
core/trunk/src/test/java/org/jboss/cache/eviction/NullEvictionConfigTest.java
Log:
fixed test
Modified: core/trunk/src/test/java/org/jboss/cache/eviction/NullEvictionConfigTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/eviction/NullEvictionConfigTest.java 2008-07-15 09:37:40 UTC (rev 6262)
+++ core/trunk/src/test/java/org/jboss/cache/eviction/NullEvictionConfigTest.java 2008-07-15 09:42:01 UTC (rev 6263)
@@ -32,34 +32,10 @@
{
String xml =
"<region name=\"/org/jboss/data\">\n" +
- "<attribute name=\"maxNodes\">5000</attribute>\n" +
- "<attribute name=\"timeToLiveSeconds\">1000</attribute>\n" +
"</region>";
testConfigBlock(xml);
- xml = "<region name=\"/maxAgeTest/\">\n" +
- "<attribute name=\"maxNodes\">10000</attribute>\n" +
- "<attribute name=\"timeToLiveSeconds\">8</attribute>\n" +
- "<attribute name=\"maxAgeSeconds\">10</attribute>\n" +
- "</region>";
-
- testConfigBlock(xml);
-
- xml = "<region name=\"/maxAgeTest/\">\n" +
- "<attribute name=\"maxNodes\">10000</attribute>\n" +
- "<attribute name=\"maxAgeSeconds\">10</attribute>\n" +
- "</region>";
-
- testConfigBlock(xml);
-
- xml = "<region name=\"/maxAgeTest/\">\n" +
- "<attribute name=\"timeToLiveSeconds\">8</attribute>\n" +
- "<attribute name=\"maxAgeSeconds\">10</attribute>\n" +
- "</region>";
-
- testConfigBlock(xml);
-
xml = "<region name=\"/maxAgeTest/\"/>\n";
testConfigBlock(xml);
17 years, 5 months
JBoss Cache SVN: r6262 - core/trunk/src/test/java/org/jboss/cache/jmx.
by jbosscache-commits@lists.jboss.org
Author: mircea.markus
Date: 2008-07-15 05:37:40 -0400 (Tue, 15 Jul 2008)
New Revision: 6262
Modified:
core/trunk/src/test/java/org/jboss/cache/jmx/LegacyConfigurationTest.java
Log:
fixed test
Modified: core/trunk/src/test/java/org/jboss/cache/jmx/LegacyConfigurationTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/jmx/LegacyConfigurationTest.java 2008-07-15 09:35:49 UTC (rev 6261)
+++ core/trunk/src/test/java/org/jboss/cache/jmx/LegacyConfigurationTest.java 2008-07-15 09:37:40 UTC (rev 6262)
@@ -257,13 +257,13 @@
{
String xmlStr =
- " <buddy enabled=\"true\" buddyPoolName=\"testpool\" buddyCommunicationTimeout=\"600000\">\n" +
+ " <buddy enabled=\"true\" poolName=\"testpool\" communicationTimeout=\"600000\">\n" +
" <dataGravitation auto=\"false\" removeOnFind=\"false\" searchBackupTrees=\"false\"/>\n" +
- " <buddyLocator class=\"org.jboss.cache.buddyreplication.TestBuddyLocator\">\n" +
+ " <locator class=\"org.jboss.cache.buddyreplication.TestBuddyLocator\">\n" +
" <properties>\n" +
" numBuddies = 2\n" +
" </properties>\n" +
- " </buddyLocator>\n" +
+ " </locator>\n" +
" </buddy>";
return XmlConfigHelper.stringToElement(xmlStr);
}
@@ -297,12 +297,11 @@
{
String xmlStr =
- " <eviction wakeUpInterval=\"5000\">\n" +
- " <defaults policyClass=\"org.jboss.cache.eviction.LRUPolicy\" eventQueueSize=\"20000\"/>\n" +
- " <root eventQueueSize=\"1000\">\n" +
+ " <eviction wakeUpInterval=\"5000\" defaultPolicyClass=\"org.jboss.cache.eviction.LRUPolicy\" defaultEventQueueSize=\"20000\">\n" +
+ " <default eventQueueSize=\"1000\">\n" +
" <attribute name=\"maxNodes\">5000</attribute>\n" +
" <attribute name=\"timeToLive\">1000000</attribute>\n" +
- " </root>\n" +
+ " </default>\n" +
"<region name=\"/org/jboss/data\" policyClass=\"org.jboss.cache.eviction.FIFOPolicy\">\n" +
" <attribute name=\"maxNodes\">5000</attribute>\n" +
"</region>\n" +
17 years, 5 months
JBoss Cache SVN: r6261 - in core/trunk/src: main/java/org/jboss/cache/factories and 4 other directories.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-15 05:35:49 -0400 (Tue, 15 Jul 2008)
New Revision: 6261
Added:
core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java
Modified:
core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java
core/trunk/src/main/java/org/jboss/cache/factories/InterceptorChainFactory.java
core/trunk/src/main/java/org/jboss/cache/interceptors/PassivationInterceptor.java
core/trunk/src/test/java/org/jboss/cache/api/NodeMoveAPITest.java
core/trunk/src/test/java/org/jboss/cache/commands/legacy/write/MoveCommandTest.java
core/trunk/src/test/java/org/jboss/cache/factories/InterceptorChainFactoryTest.java
Log:
Cleaned up unit test failures
Modified: core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java 2008-07-15 09:14:04 UTC (rev 6260)
+++ core/trunk/src/main/java/org/jboss/cache/UnversionedNode.java 2008-07-15 09:35:49 UTC (rev 6261)
@@ -128,7 +128,6 @@
this.commandsFactory = commandsFactory;
this.lockStrategyFactory = lockStrategyFactory;
this.nodeFactory = nodeFactory;
- if (nodeFactory == null) throw new NullPointerException();
init();
}
Modified: core/trunk/src/main/java/org/jboss/cache/factories/InterceptorChainFactory.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/factories/InterceptorChainFactory.java 2008-07-15 09:14:04 UTC (rev 6260)
+++ core/trunk/src/main/java/org/jboss/cache/factories/InterceptorChainFactory.java 2008-07-15 09:35:49 UTC (rev 6261)
@@ -114,8 +114,14 @@
if (configuration.getCacheLoaderConfig().isPassivation())
{
if (configuration.getNodeLockingScheme() != NodeLockingScheme.MVCC)
+ {
interceptorChain.appendIntereceptor(createInterceptor(LegacyActivationInterceptor.class));
- interceptorChain.appendIntereceptor(createInterceptor(PassivationInterceptor.class));
+ interceptorChain.appendIntereceptor(createInterceptor(LegacyPassivationInterceptor.class));
+ }
+ else
+ {
+ interceptorChain.appendIntereceptor(createInterceptor(PassivationInterceptor.class));
+ }
}
else
{
@@ -153,7 +159,7 @@
if (interceptorChain.containsInstance(config.getInterceptor())) continue;
if (config.isFirst())
{
- interceptorChain.addInterceptor(config.getInterceptor(),0);
+ interceptorChain.addInterceptor(config.getInterceptor(), 0);
}
if (config.isLast()) interceptorChain.appendIntereceptor(config.getInterceptor());
if (config.getIndex() >= 0) interceptorChain.addInterceptor(config.getInterceptor(), config.getIndex());
Added: core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/LegacyPassivationInterceptor.java 2008-07-15 09:35:49 UTC (rev 6261)
@@ -0,0 +1,46 @@
+package org.jboss.cache.interceptors;
+
+import org.jboss.cache.DataContainer;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.commands.write.EvictCommand;
+import org.jboss.cache.factories.annotations.Inject;
+import org.jboss.cache.invocation.InvocationContext;
+
+import java.util.List;
+
+/**
+ * Passivation interceptor for optimistic and pessimistic locking
+ *
+ * @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
+ * @since 3.0
+ */
+public class LegacyPassivationInterceptor extends PassivationInterceptor
+{
+ private DataContainer dataContainer;
+
+ @Inject
+ private void injectDataContainer(DataContainer dataContainer)
+ {
+ this.dataContainer = dataContainer;
+ }
+
+ @Override
+ public Object visitEvictFqnCommand(InvocationContext ctx, EvictCommand command) throws Throwable
+ {
+ if (command.isRecursive())
+ {
+ for (Fqn f : getNodeList(command.getFqn())) passivate(ctx, f);
+ }
+ else
+ {
+ passivate(ctx, command.getFqn());
+ }
+
+ return invokeNextInterceptor(ctx, command);
+ }
+
+ private List<Fqn> getNodeList(Fqn startingPoint)
+ {
+ return dataContainer.getNodesForEviction(startingPoint, true);
+ }
+}
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/PassivationInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/PassivationInterceptor.java 2008-07-15 09:14:04 UTC (rev 6260)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/PassivationInterceptor.java 2008-07-15 09:35:49 UTC (rev 6261)
@@ -12,7 +12,6 @@
import java.util.Collections;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
@@ -46,10 +45,9 @@
@Override
public Object visitEvictFqnCommand(InvocationContext ctx, EvictCommand command) throws Throwable
{
- List<Fqn> fqnsToEvict;
- if (command.isRecursive() && (fqnsToEvict = command.getNodesToEvict()) != null && !fqnsToEvict.isEmpty())
+ if (command.isRecursive())
{
- for (Fqn f : fqnsToEvict) passivate(ctx, f);
+ for (Fqn f : command.getNodesToEvict()) passivate(ctx, f);
}
else
{
@@ -59,7 +57,7 @@
return invokeNextInterceptor(ctx, command);
}
- private void passivate(InvocationContext ctx, Fqn fqn) throws Throwable
+ protected void passivate(InvocationContext ctx, Fqn fqn) throws Throwable
{
try
{
Modified: core/trunk/src/test/java/org/jboss/cache/api/NodeMoveAPITest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/api/NodeMoveAPITest.java 2008-07-15 09:14:04 UTC (rev 6260)
+++ core/trunk/src/test/java/org/jboss/cache/api/NodeMoveAPITest.java 2008-07-15 09:35:49 UTC (rev 6261)
@@ -289,7 +289,7 @@
protected void doCacheLoaderTest(boolean pasv, boolean useTx) throws Exception
{
cache.destroy();
- cache.getConfiguration().setCacheLoaderConfig(getSingleCacheLoaderConfig(pasv, "/", DummyInMemoryCacheLoader.class.getName(), null, false, false, false, false));
+ cache.getConfiguration().setCacheLoaderConfig(getSingleCacheLoaderConfig(pasv, "/", DummyInMemoryCacheLoader.class.getName(), "debug=true", false, false, false, false));
cache.start();
DummyInMemoryCacheLoader loader = (DummyInMemoryCacheLoader) cache.getCacheLoaderManager().getCacheLoader();
Modified: core/trunk/src/test/java/org/jboss/cache/commands/legacy/write/MoveCommandTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/commands/legacy/write/MoveCommandTest.java 2008-07-15 09:14:04 UTC (rev 6260)
+++ core/trunk/src/test/java/org/jboss/cache/commands/legacy/write/MoveCommandTest.java 2008-07-15 09:35:49 UTC (rev 6261)
@@ -34,7 +34,7 @@
control = createStrictControl();
notifier = control.createMock(Notifier.class);
container = control.createMock(DataContainer.class);
- command = new MoveCommand(source, destination);
+ command = new PessMoveCommand(source, destination);
command.initialize(notifier, container);
nodes = new MockNodesFixture();
}
Modified: core/trunk/src/test/java/org/jboss/cache/factories/InterceptorChainFactoryTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/factories/InterceptorChainFactoryTest.java 2008-07-15 09:14:04 UTC (rev 6260)
+++ core/trunk/src/test/java/org/jboss/cache/factories/InterceptorChainFactoryTest.java 2008-07-15 09:35:49 UTC (rev 6261)
@@ -356,7 +356,7 @@
assertEquals(OptimisticTxInterceptor.class, interceptors.next().getClass());
assertEquals(NotificationInterceptor.class, interceptors.next().getClass());
assertEquals(LegacyActivationInterceptor.class, interceptors.next().getClass());
- assertEquals(PassivationInterceptor.class, interceptors.next().getClass());
+ assertEquals(LegacyPassivationInterceptor.class, interceptors.next().getClass());
assertEquals(OptimisticLockingInterceptor.class, interceptors.next().getClass());
assertEquals(OptimisticValidatorInterceptor.class, interceptors.next().getClass());
assertEquals(OptimisticCreateIfNotExistsInterceptor.class, interceptors.next().getClass());
17 years, 5 months
JBoss Cache SVN: r6260 - in core/trunk/src: test/java/org/jboss/cache/mgmt and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-15 05:14:04 -0400 (Tue, 15 Jul 2008)
New Revision: 6260
Modified:
core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java
core/trunk/src/test/java/org/jboss/cache/mgmt/MgmtTestBase.java
Log:
Suppress cache loading when not needed
Modified: core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java 2008-07-15 08:54:23 UTC (rev 6259)
+++ core/trunk/src/main/java/org/jboss/cache/interceptors/CacheLoaderInterceptor.java 2008-07-15 09:14:04 UTC (rev 6260)
@@ -92,7 +92,7 @@
{
if (command.getFqn() != null)
{
- loadIfNeeded(ctx, command.getFqn(), null, false, true, false, false, false, false);
+ loadIfNeeded(ctx, command.getFqn(), null, false, true, false, false, false, false, false);
}
return invokeNextInterceptor(ctx, command);
}
@@ -102,7 +102,7 @@
{
if (command.getFqn() != null)
{
- loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, useCacheStore, !useCacheStore, false, false, false);
+ loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, useCacheStore, !useCacheStore, false, false, false, true);
}
return invokeNextInterceptor(ctx, command);
}
@@ -120,9 +120,9 @@
{
if (command.getTo() != null)
{
- loadIfNeeded(ctx, command.getTo(), null, false, false, true, false, true, false);
+ loadIfNeeded(ctx, command.getTo(), null, false, false, true, false, true, false, true);
}
- loadIfNeeded(ctx, command.getFqn(), null, false, false, true, true, true, false);
+ loadIfNeeded(ctx, command.getFqn(), null, false, false, true, true, true, false, true);
}
return invokeNextInterceptor(ctx, command);
}
@@ -132,7 +132,7 @@
{
if (command.getFqn() != null)
{
- loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, true, false, false, false);
+ loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, true, false, false, false, true);
}
return invokeNextInterceptor(ctx, command);
}
@@ -143,7 +143,7 @@
{
if (command.getFqn() != null)
{
- loadIfNeeded(ctx, command.getFqn(), null, false, false, true, false, false, true);
+ loadIfNeeded(ctx, command.getFqn(), null, false, false, true, false, false, true, true);
}
return invokeNextInterceptor(ctx, command);
}
@@ -154,7 +154,7 @@
Fqn fqn = command.getFqn();
if (fqn != null)
{
- loadIfNeeded(ctx, fqn, null, false, false, false, false, false, true);
+ loadIfNeeded(ctx, fqn, null, false, false, false, false, false, true, true);
NodeSPI n = dataContainer.peek(fqn, true, true);
loadChildren(fqn, n, false, false, ctx);
}
@@ -167,7 +167,7 @@
{
if (command.getFqn() != null)
{
- loadIfNeeded(ctx, command.getFqn(), null, true, false, true, false, false, false);
+ loadIfNeeded(ctx, command.getFqn(), null, true, false, true, false, false, false, true);
}
return invokeNextInterceptor(ctx, command);
}
@@ -177,7 +177,7 @@
{
if (command.getFqn() != null)
{
- loadIfNeeded(ctx, command.getFqn(), null, true, false, true, false, false, false);
+ loadIfNeeded(ctx, command.getFqn(), null, true, false, true, false, false, false, true);
}
return invokeNextInterceptor(ctx, command);
}
@@ -214,7 +214,7 @@
{
if (configuration.getNodeLockingScheme() == NodeLockingScheme.OPTIMISTIC && command.getFqn() != null)
{
- loadIfNeeded(ctx, command.getFqn(), null, false, false, false, false, false, false);
+ loadIfNeeded(ctx, command.getFqn(), null, false, false, false, false, false, false, false);
}
return invokeNextInterceptor(ctx, command);
}
@@ -224,7 +224,7 @@
{
if (command.getFqn() != null && !useCacheStore)
{
- loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, false, false, false, false);
+ loadIfNeeded(ctx, command.getFqn(), command.getKey(), false, false, false, false, false, false, true);
}
return invokeNextInterceptor(ctx, command);
}
@@ -235,12 +235,12 @@
Fqn fqn = command.getFqn();
if (fqn != null && !useCacheStore)
{
- loadIfNeeded(ctx, fqn, null, false, true, false, false, false, false);
+ loadIfNeeded(ctx, fqn, null, false, true, false, false, false, false, true);
}
return invokeNextInterceptor(ctx, command);
}
- private void loadIfNeeded(InvocationContext ctx, Fqn fqn, Object key, boolean allKeys, boolean initNode, boolean acquireWriteLock, boolean recursive, boolean isMove, boolean bypassLoadingData) throws Throwable
+ private void loadIfNeeded(InvocationContext ctx, Fqn fqn, Object key, boolean allKeys, boolean initNode, boolean acquireWriteLock, boolean recursive, boolean isMove, boolean bypassLoadingData, boolean shouldLoadIfNodeIsNull) throws Throwable
{
NodeSPI n = helper.wrapNodeForReading(ctx, fqn);
if (n instanceof NullMarkerNode)
@@ -248,7 +248,7 @@
ctx.getLookedUpNodes().remove(fqn);
n = null;
}
- boolean mustLoad = mustLoad(n, key, allKeys || isMove);
+ boolean mustLoad = mustLoad(n, key, allKeys || isMove, shouldLoadIfNodeIsNull);
if (trace) log.trace("load element " + fqn + " mustLoad=" + mustLoad);
@@ -355,12 +355,12 @@
node.setChildrenLoaded(true);
}
- private boolean mustLoad(NodeSPI n, Object key, boolean allKeys)
+ private boolean mustLoad(NodeSPI n, Object key, boolean allKeys, boolean shouldLoadIfNodeIsNull)
{
if (n == null)
{
- if (trace) log.trace("must load, node null");
- return true;
+ if (trace) log.trace("Node null. Must load? " + shouldLoadIfNodeIsNull);
+ return shouldLoadIfNodeIsNull;
}
// check this first!!!
Modified: core/trunk/src/test/java/org/jboss/cache/mgmt/MgmtTestBase.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mgmt/MgmtTestBase.java 2008-07-15 08:54:23 UTC (rev 6259)
+++ core/trunk/src/test/java/org/jboss/cache/mgmt/MgmtTestBase.java 2008-07-15 09:14:04 UTC (rev 6260)
@@ -6,15 +6,13 @@
import org.jboss.cache.Fqn;
import org.jboss.cache.config.CacheLoaderConfig;
import org.jboss.cache.config.Configuration;
-import org.jboss.cache.config.parsing.XmlConfigurationParser;
+import org.jboss.cache.config.Configuration.NodeLockingScheme;
+import static org.jboss.cache.factories.UnitTestCacheConfigurationFactory.buildSingleCacheLoaderConfig;
import org.jboss.cache.loader.CacheLoader;
import org.jboss.cache.loader.DummyInMemoryCacheLoader;
-import org.jboss.cache.config.parsing.XmlConfigHelper;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import org.w3c.dom.Element;
-import static org.jboss.cache.factories.UnitTestCacheConfigurationFactory.*;
import java.util.HashMap;
import java.util.Map;
@@ -94,8 +92,9 @@
private CacheSPI<String, Object> createCache() throws Exception
{
- CacheFactory<String, Object> instance = new DefaultCacheFactory();
+ CacheFactory<String, Object> instance = new DefaultCacheFactory<String, Object>();
Configuration c = new Configuration();
+ c.setNodeLockingScheme(NodeLockingScheme.MVCC);
c.setCacheMode(Configuration.CacheMode.LOCAL);
c.setCacheLoaderConfig(getCacheLoaderConfig());
c.setExposeManagementStatistics(true);
17 years, 5 months
JBoss Cache SVN: r6259 - in core/trunk/src: test/java/org/jboss/cache/mvcc and 1 other directory.
by jbosscache-commits@lists.jboss.org
Author: manik.surtani(a)jboss.com
Date: 2008-07-15 04:54:23 -0400 (Tue, 15 Jul 2008)
New Revision: 6259
Modified:
core/trunk/src/main/java/org/jboss/cache/config/Configuration.java
core/trunk/src/test/java/org/jboss/cache/mvcc/MVCCFullStackTest.java
Log:
Isolationlevel upgrading and downgrading
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-15 08:44:12 UTC (rev 6258)
+++ core/trunk/src/main/java/org/jboss/cache/config/Configuration.java 2008-07-15 08:54:23 UTC (rev 6259)
@@ -9,6 +9,7 @@
import org.jboss.cache.Version;
import org.jboss.cache.config.parsing.JGroupsStackParser;
import org.jboss.cache.factories.annotations.NonVolatile;
+import org.jboss.cache.factories.annotations.Start;
import org.jboss.cache.lock.IsolationLevel;
import org.jboss.cache.marshall.Marshaller;
import org.w3c.dom.Element;
@@ -205,6 +206,26 @@
private boolean allowWriteSkew = false;
private int concurrencyLevel = 50;
+ @Start(priority = 1)
+ private void correctIsolationLevels()
+ {
+ // ensure the correct isolation level upgrades and/or downgrades are performed.
+ if (nodeLockingScheme == NodeLockingScheme.MVCC)
+ {
+ switch (isolationLevel)
+ {
+ case NONE:
+ case READ_UNCOMMITTED:
+ System.out.println("Upgrading!");
+ isolationLevel = IsolationLevel.READ_COMMITTED;
+ break;
+ case SERIALIZABLE:
+ isolationLevel = IsolationLevel.REPEATABLE_READ;
+ break;
+ }
+ }
+ }
+
// ------------------------------------------------------------------------------------------------------------
// SETTERS - MAKE SURE ALL SETTERS PERFORM testImmutability()!!!
// ------------------------------------------------------------------------------------------------------------
Modified: core/trunk/src/test/java/org/jboss/cache/mvcc/MVCCFullStackTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/mvcc/MVCCFullStackTest.java 2008-07-15 08:44:12 UTC (rev 6258)
+++ core/trunk/src/test/java/org/jboss/cache/mvcc/MVCCFullStackTest.java 2008-07-15 08:54:23 UTC (rev 6259)
@@ -44,7 +44,7 @@
isoLevelTest(READ_UNCOMMITTED, READ_COMMITTED);
}
- public void testIsolationLevelNoUpgrade3()
+ public void testIsolationLevelDowngrade()
{
isoLevelTest(SERIALIZABLE, REPEATABLE_READ);
}
@@ -64,7 +64,7 @@
Configuration c = new Configuration();
c.setNodeLockingScheme(NodeLockingScheme.MVCC);
c.setIsolationLevel(configuredWith);
- cache = (CacheSPI<Object, Object>) new DefaultCacheFactory<Object, Object>().createCache();
+ cache = (CacheSPI<Object, Object>) new DefaultCacheFactory<Object, Object>().createCache(c);
assert cache.getConfiguration().getIsolationLevel() == expected : "Expected to change isolation level from " + configuredWith + " to " + expected + " but was " + cache.getConfiguration().getIsolationLevel();
}
}
17 years, 5 months
JBoss Cache SVN: r6258 - searchable/trunk/src/main/java/org/jboss/cache/search.
by jbosscache-commits@lists.jboss.org
Author: navssurtani
Date: 2008-07-15 04:44:12 -0400 (Tue, 15 Jul 2008)
New Revision: 6258
Modified:
searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java
Log:
Made CacheQuery Iterable
Modified: searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java
===================================================================
--- searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java 2008-07-14 15:35:49 UTC (rev 6257)
+++ searchable/trunk/src/main/java/org/jboss/cache/search/CacheQuery.java 2008-07-15 08:44:12 UTC (rev 6258)
@@ -13,7 +13,7 @@
* @author Manik Surtani (<a href="mailto:manik@jboss.org">manik(a)jboss.org</a>)
* @see org.jboss.cache.search.SearchableCache#createQuery(org.apache.lucene.search.Query)
*/
-public interface CacheQuery
+public interface CacheQuery extends Iterable
{
/**
* Returns the results of a search as a list.
17 years, 5 months