You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2018/10/22 14:16:38 UTC
activemq git commit: AMQ-7082 - ensure flush sees free list,
use lazySet to avoid store barrier, thanks cshannon
Repository: activemq
Updated Branches:
refs/heads/master 87087fc93 -> fb1e642c1
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/fb1e642c
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/fb1e642c
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/fb1e642c
Branch: refs/heads/master
Commit: fb1e642c15fa842e5e25b80d89293d0bb03225c0
Parents: 87087fc
Author: gtully <ga...@gmail.com>
Authored: Mon Oct 22 15:16:26 2018 +0100
Committer: gtully <ga...@gmail.com>
Committed: Mon Oct 22 15:16:26 2018 +0100
----------------------------------------------------------------------
.../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/fb1e642c/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);