[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