Repository: activemq
Updated Branches:
  refs/heads/activemq-5.15.x c6103415b -> a9b81ace6


AMQ-7082 - ensure flush sees free list, use lazySet to avoid store barrier, 
thanks cshannon


Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/a9b81ace
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/a9b81ace
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/a9b81ace

Branch: refs/heads/activemq-5.15.x
Commit: a9b81ace623d62e92b75ddc31c424c0ed4cae9d1
Parents: c610341
Author: gtully <[email protected]>
Authored: Mon Oct 22 15:16:26 2018 +0100
Committer: Jeff Genender <[email protected]>
Committed: Mon Oct 22 08:45:52 2018 -0600

----------------------------------------------------------------------
 .../apache/activemq/store/kahadb/disk/page/PageFile.java | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/a9b81ace/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java
----------------------------------------------------------------------
diff --git 
a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java
 
b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java
index 2c6348e..fe79a2d 100644
--- 
a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java
+++ 
b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/PageFile.java
@@ -39,6 +39,7 @@ import java.util.TreeMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.zip.Adler32;
 import java.util.zip.Checksum;
 
@@ -134,7 +135,7 @@ public class PageFile {
     // Keeps track of free pages.
     private final AtomicLong nextFreePageId = new AtomicLong();
     private SequenceSet freeList = new SequenceSet();
-    private SequenceSet recoveredFreeList = null;
+    private AtomicReference<SequenceSet> recoveredFreeList = new 
AtomicReference<SequenceSet>();
     private final AtomicLong nextTxid = new AtomicLong();
 
     // Persistent settings stored in the page file.
@@ -469,8 +470,8 @@ public class PageFile {
         LOG.info(toString() + ". Recovered pageFile free list of size: " + 
newFreePages.rangeSize());
         if (!newFreePages.isEmpty()) {
 
-            // allow flush (with index lock held) to merge
-            recoveredFreeList = newFreePages;
+            // allow flush (with index lock held) to merge eventually
+            recoveredFreeList.lazySet(newFreePages);
         }
         // all set for clean shutdown
         needsFreePageRecovery = false;
@@ -561,9 +562,9 @@ public class PageFile {
             throw new IOException("Page file already stopped: checkpointing is 
not allowed");
         }
 
-        SequenceSet toMerge = recoveredFreeList;
+        SequenceSet toMerge = recoveredFreeList.get();
         if (toMerge != null) {
-            recoveredFreeList = null;
+            recoveredFreeList.lazySet(null);
             Sequence seq = toMerge.getHead();
             while (seq != null) {
                 freeList.add(seq);

Reply via email to