[infinispan-commits] Infinispan SVN: r967 - trunk/core/src/main/java/org/infinispan/distribution.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Sat Oct 17 11:30:09 EDT 2009


Author: manik.surtani at jboss.com
Date: 2009-10-17 11:30:08 -0400 (Sat, 17 Oct 2009)
New Revision: 967

Modified:
   trunk/core/src/main/java/org/infinispan/distribution/TransactionLoggerImpl.java
Log:
Now handles transactional writes properly

Modified: trunk/core/src/main/java/org/infinispan/distribution/TransactionLoggerImpl.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/distribution/TransactionLoggerImpl.java	2009-10-17 15:28:43 UTC (rev 966)
+++ trunk/core/src/main/java/org/infinispan/distribution/TransactionLoggerImpl.java	2009-10-17 15:30:08 UTC (rev 967)
@@ -77,8 +77,13 @@
          loggingLock.readLock().lock();
          try {
             if (enabled) {
-               if (trace) log.trace("Logging prepare for tx {0}", command.getGlobalTransaction());
-               uncommittedPrepares.put(command.getGlobalTransaction(), command);
+               if (command.isOnePhaseCommit()) {
+                  if (trace) log.trace("Logging 1PC prepare for tx {0}", command.getGlobalTransaction());
+                  logModificationsInTransaction(command);
+               } else {
+                  if (trace) log.trace("Logging 2PC prepare for tx {0}", command.getGlobalTransaction());
+                  uncommittedPrepares.put(command.getGlobalTransaction(), command);
+               }
             }
          } finally {
             loggingLock.readLock().unlock();
@@ -86,6 +91,16 @@
       }
    }
 
+   private void logModificationsInTransaction(PrepareCommand command) {
+      for (WriteCommand wc : command.getModifications()) {
+         try {
+            commandQueue.put(wc);
+         } catch (InterruptedException ie) {
+            Thread.currentThread().interrupt();
+         }
+      }
+   }
+
    public void logIfNeeded(CommitCommand command) {
       if (enabled) {
          loggingLock.readLock().lock();
@@ -93,13 +108,7 @@
             if (enabled) {
                if (trace) log.trace("Logging commit for tx {0}", command.getGlobalTransaction());
                PrepareCommand pc = uncommittedPrepares.remove(command.getGlobalTransaction());
-               // TODO how can we handle this efficiently and safely?
-//               for (WriteCommand wc : pc.getModifications())
-//                  try {
-//                     commandQueue.put(wc);
-//                  } catch (InterruptedException e) {
-//                     Thread.currentThread().interrupt();
-//                  }
+               logModificationsInTransaction(pc);
             }
          } finally {
             loggingLock.readLock().unlock();



More information about the infinispan-commits mailing list