[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