You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by iv...@apache.org on 2013/10/02 11:52:26 UTC

svn commit: r1528399 - in /zookeeper/bookkeeper/branches/branch-4.2: CHANGES.txt bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java

Author: ivank
Date: Wed Oct  2 09:52:26 2013
New Revision: 1528399

URL: http://svn.apache.org/r1528399
Log:
BOOKKEEPER-685: Race in compaction algorithm from BOOKKEEPER-664 (ivank)

Modified:
    zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt
    zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
    zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java

Modified: zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt?rev=1528399&r1=1528398&r2=1528399&view=diff
==============================================================================
--- zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt (original)
+++ zookeeper/bookkeeper/branches/branch-4.2/CHANGES.txt Wed Oct  2 09:52:26 2013
@@ -84,6 +84,8 @@ Release 4.2.2 - 2013-09-10
 
         BOOKKEEPER-627: LedgerDirsMonitor is missing thread name (rakeshr via ivank)
 
+        BOOKKEEPER-685: Race in compaction algorithm from BOOKKEEPER-664 (ivank)
+
       hedwig-server:
 
         BOOKKEEPER-579: TestSubAfterCloseSub was put in a wrong package (sijie via ivank)

Modified: zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java?rev=1528399&r1=1528398&r2=1528399&view=diff
==============================================================================
--- zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java (original)
+++ zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/EntryLogger.java Wed Oct  2 09:52:26 2013
@@ -118,9 +118,9 @@ public class EntryLogger {
      */
     static interface EntryLogListener {
         /**
-         * Rotate a new entry log to write.
+         * Callback when entry log is flushed.
          */
-        public void onRotateEntryLog();
+        public void onEntryLogFlushed();
     }
 
     /**
@@ -350,7 +350,7 @@ public class EntryLogger {
         }
         somethingWritten = false;
         for (EntryLogListener listener: listeners) {
-            listener.onRotateEntryLog();
+            listener.onEntryLogFlushed();
         }
     }
 

Modified: zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java?rev=1528399&r1=1528398&r2=1528399&view=diff
==============================================================================
--- zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java (original)
+++ zookeeper/bookkeeper/branches/branch-4.2/bookkeeper-server/src/main/java/org/apache/bookkeeper/bookie/GarbageCollectorThread.java Wed Oct  2 09:52:26 2013
@@ -129,8 +129,8 @@ public class GarbageCollectorThread exte
                         long entryId = entry.getLong();
                         entry.rewind();
 
-                        flushed.set(false);
                         long newoffset = entryLogger.addEntry(ledgerId, entry);
+                        flushed.set(false);
                         offsets.add(new Offset(ledgerId, entryId, newoffset));
                     }
                 }
@@ -141,7 +141,7 @@ public class GarbageCollectorThread exte
         Object flushLock = new Object();
 
         @Override
-        public void onRotateEntryLog() {
+        public void onEntryLogFlushed() {
             synchronized (flushLock) {
                 flushed.set(true);
                 flushLock.notifyAll();
@@ -151,10 +151,14 @@ public class GarbageCollectorThread exte
         synchronized private void waitEntrylogFlushed() throws IOException {
             try {
                 synchronized (flushLock) {
-                    while (!flushed.get() && running) {
+                    while (!flushed.get()
+                           && entryLogger.isFlushRequired()
+                           && running) {
                         flushLock.wait(1000);
                     }
-                    if (!flushed.get() && !running) {
+                    if (!flushed.get()
+                        && entryLogger.isFlushRequired()
+                        && !running) {
                         throw new IOException("Shutdown before flushed");
                     }
                 }