[hornetq-commits] JBoss hornetq SVN: r11079 - branches/HORNETQ-720_Replication/hornetq-journal/src/main/java/org/hornetq/core/journal/impl.
do-not-reply at jboss.org
do-not-reply at jboss.org
Mon Aug 1 05:35:29 EDT 2011
Author: borges
Date: 2011-08-01 05:35:28 -0400 (Mon, 01 Aug 2011)
New Revision: 11079
Modified:
branches/HORNETQ-720_Replication/hornetq-journal/src/main/java/org/hornetq/core/journal/impl/JournalFilesRepository.java
Log:
HORNETQ-720 FIX race condition when setting next fileID
Modified: branches/HORNETQ-720_Replication/hornetq-journal/src/main/java/org/hornetq/core/journal/impl/JournalFilesRepository.java
===================================================================
--- branches/HORNETQ-720_Replication/hornetq-journal/src/main/java/org/hornetq/core/journal/impl/JournalFilesRepository.java 2011-08-01 04:54:03 UTC (rev 11078)
+++ branches/HORNETQ-720_Replication/hornetq-journal/src/main/java/org/hornetq/core/journal/impl/JournalFilesRepository.java 2011-08-01 09:35:28 UTC (rev 11079)
@@ -150,22 +150,31 @@
for (JournalFile file : files)
{
- long fileID = file.getFileID();
- if (nextFileID.get() < fileID)
- {
- nextFileID.set(fileID);
- }
+ final long fileIdFromFile = file.getFileID();
+ final long fileIdFromName = getFileNameID(file.getFile().getFileName());
- long fileNameID = getFileNameID(file.getFile().getFileName());
-
// The compactor could create a fileName but use a previously assigned ID.
// Because of that we need to take both parts into account
- if (nextFileID.get() < fileNameID)
- {
- nextFileID.set(fileNameID);
- }
+ setNextFileID(Math.max(fileIdFromName, fileIdFromFile));
}
+ }
+ /**
+ * Set the {link #nextFileID} value to {@code targetUpdate} if the current value is less than
+ * {@code targetUpdate}.
+ * @param targetUpdate
+ */
+ public void setNextFileID(final long targetUpdate)
+ {
+ while (true)
+ {
+ final long current = nextFileID.get();
+ if (current >= targetUpdate)
+ return;
+
+ if (nextFileID.compareAndSet(current, targetUpdate))
+ return;
+ }
}
public void ensureMinFiles() throws Exception
@@ -536,11 +545,6 @@
return nextFileID.incrementAndGet();
}
- public void setNextFileID(long value)
- {
- nextFileID.set(value);
- }
-
/** Get the ID part of the name */
private long getFileNameID(final String fileName)
{
More information about the hornetq-commits
mailing list