[infinispan-commits] Infinispan SVN: r278 - in trunk/core/src: main/java/org/infinispan/interceptors and 1 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Wed May 13 05:15:44 EDT 2009
Author: vblagojevic at jboss.com
Date: 2009-05-13 05:15:44 -0400 (Wed, 13 May 2009)
New Revision: 278
Modified:
trunk/core/src/main/java/org/infinispan/commands/CommandsFactoryImpl.java
trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java
trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java
trunk/core/src/test/java/org/infinispan/replication/SyncReplLockingTest.java
Log:
[ISPN-48] - Introduce lock() and unlock() API methods
Modified: trunk/core/src/main/java/org/infinispan/commands/CommandsFactoryImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/CommandsFactoryImpl.java 2009-05-13 08:57:15 UTC (rev 277)
+++ trunk/core/src/main/java/org/infinispan/commands/CommandsFactoryImpl.java 2009-05-13 09:15:44 UTC (rev 278)
@@ -230,10 +230,14 @@
ClusteredGetCommand clusteredGetCommand = (ClusteredGetCommand) c;
clusteredGetCommand.initialize(dataContainer, cacheLoaderManager, icc);
break;
+ case LockControlCommand.COMMAND_ID:
+ LockControlCommand lcc = (LockControlCommand)c;
+ lcc.init(interceptorChain, icc,txTable);
+ break;
}
}
public LockControlCommand buildLockControlCommand(Collection keys, boolean lock) {
- return new LockControlCommand(keys, lock);
+ return new LockControlCommand(keys, cacheName, lock);
}
}
Modified: trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java 2009-05-13 08:57:15 UTC (rev 277)
+++ trunk/core/src/main/java/org/infinispan/commands/LockControlCommand.java 2009-05-13 09:15:44 UTC (rev 278)
@@ -43,10 +43,15 @@
public LockControlCommand() {
}
- public LockControlCommand(Collection keys, boolean lock) {
+ public LockControlCommand(Collection keys, String cacheName, boolean lock) {
+ this.cacheName = cacheName;
this.keys = keys;
this.lock = lock;
}
+
+ public void attachGlobalTransaction (GlobalTransaction gtx){
+ globalTx = gtx;
+ }
public Collection getKeys() {
return keys;
Modified: trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java 2009-05-13 08:57:15 UTC (rev 277)
+++ trunk/core/src/main/java/org/infinispan/interceptors/LockingInterceptor.java 2009-05-13 09:15:44 UTC (rev 278)
@@ -43,6 +43,7 @@
import org.infinispan.factories.annotations.Inject;
import org.infinispan.factories.annotations.Start;
import org.infinispan.interceptors.base.CommandInterceptor;
+import org.infinispan.transaction.xa.GlobalTransaction;
import org.infinispan.util.ReversibleOrderedSet;
import org.infinispan.util.concurrent.IsolationLevel;
import org.infinispan.util.concurrent.locks.LockManager;
@@ -138,12 +139,25 @@
@Override
public Object visitLockControlCommand(InvocationContext ctx, LockControlCommand c) throws Throwable {
try {
+ if(ctx.isOriginLocal() && ctx.isInTxScope()){
+ c.attachGlobalTransaction((GlobalTransaction) ctx.getLockOwner());
+ }
if (c.isLock()) {
- for (Object key : c.getKeys())
- entryFactory.acquireLock(ctx, key);
+ for (Object key : c.getKeys()) {
+ boolean needed = entryFactory.acquireLock(ctx, key);
+ if (trace) {
+ if (needed)
+ log.trace("Key " + key + " was needed and acquired by " + ctx.getLockOwner());
+ else
+ log.trace("Key " + key + " was already held by " + ctx.getLockOwner());
+ }
+ }
} else if (c.isUnlock()) {
- for (Object key : c.getKeys())
+ for (Object key : c.getKeys()) {
entryFactory.releaseLock(key);
+ if (trace)
+ log.trace("Unlocked key " + key);
+ }
}
return invokeNextInterceptor(ctx, c);
} finally {
Modified: trunk/core/src/test/java/org/infinispan/replication/SyncReplLockingTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/replication/SyncReplLockingTest.java 2009-05-13 08:57:15 UTC (rev 277)
+++ trunk/core/src/test/java/org/infinispan/replication/SyncReplLockingTest.java 2009-05-13 09:15:44 UTC (rev 278)
@@ -41,15 +41,19 @@
assertNull("Should be null", cache1.get(k));
assertNull("Should be null", cache2.get(k));
+
+ String name = "Vladimir";
TransactionManager mgr = TestingUtil.getTransactionManager(cache1);
mgr.begin();
+
+ cache1.put(k, v);
cache1.getAdvancedCache().lock(k);
- cache1.put(k, v);
+ cache1.put(k, name);
cache1.getAdvancedCache().unlock(k);
mgr.commit();
- assertEquals(v, cache1.get(k));
- assertEquals("Should have replicated", v, cache2.get(k));
+ assertEquals(name, cache1.get(k));
+ assertEquals("Should have replicated", name, cache2.get(k));
cache2.remove(k);
assert cache1.isEmpty();
More information about the infinispan-commits
mailing list