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/17 11:32:30 UTC
activemq git commit: AMQ-6590 - rework fix to take the recovery hit
on clean shutdown rather than on restart,
trade off availability for short term disk usage
Repository: activemq
Updated Branches:
refs/heads/master 4dee17396 -> 5d3a3fcca
AMQ-6590 - rework fix to take the recovery hit on clean shutdown rather than on restart, trade off availability for short term disk usage
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/5d3a3fcc
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/5d3a3fcc
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/5d3a3fcc
Branch: refs/heads/master
Commit: 5d3a3fcca7fbc04e60a146e42fb1f65b94e4ea7b
Parents: 4dee173
Author: gtully <ga...@gmail.com>
Authored: Wed Oct 17 12:32:04 2018 +0100
Committer: gtully <ga...@gmail.com>
Committed: Wed Oct 17 12:32:04 2018 +0100
----------------------------------------------------------------------
.../store/kahadb/disk/page/PageFile.java | 31 ++++++++++++--------
.../store/kahadb/disk/page/PageFileTest.java | 4 +--
2 files changed, 20 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq/blob/5d3a3fcc/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 5699c45..b426a72 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
@@ -145,6 +145,8 @@ public class PageFile {
private boolean useLFRUEviction = false;
private float LFUEvictionFactor = 0.2f;
+ private boolean needsFreePageRecovery = false;
+
/**
* Use to keep track of updated pages which have not yet been committed.
*/
@@ -401,8 +403,6 @@ public class PageFile {
recoveryFile = new RecoverableRandomAccessFile(getRecoveryFile(), "rw");
}
- boolean needsFreePageRecovery = false;
-
if (metaData.isCleanShutdown()) {
nextTxid.set(metaData.getLastTxId() + 1);
if (metaData.getFreePages() > 0) {
@@ -419,17 +419,6 @@ public class PageFile {
}
nextFreePageId.set((writeFile.length() - PAGE_FILE_HEADER_SIZE) / pageSize);
- if (needsFreePageRecovery) {
- // Scan all to find the free pages after nextFreePageId is set
- freeList = new SequenceSet();
- for (Iterator<Page> i = tx().iterator(true); i.hasNext(); ) {
- Page page = i.next();
- if (page.getType() == Page.PAGE_FREE_TYPE) {
- freeList.add(page.getPageId());
- }
- }
- }
-
metaData.setCleanShutdown(false);
storeMetaData();
getFreeFile().delete();
@@ -456,6 +445,22 @@ public class PageFile {
throw new InterruptedIOException();
}
+ if (needsFreePageRecovery) {
+ LOG.info(toString() + ". Recovering pageFile free list due to prior unclean shutdown..");
+ freeList = new SequenceSet();
+ loaded.set(true);
+ try {
+ for (Iterator<Page> i = new Transaction(this).iterator(true); i.hasNext(); ) {
+ Page page = i.next();
+ if (page.getType() == Page.PAGE_FREE_TYPE) {
+ freeList.add(page.getPageId());
+ }
+ }
+ } finally {
+ loaded.set(false);
+ }
+ }
+
if (freeList.isEmpty()) {
metaData.setFreePages(0);
} else {
http://git-wip-us.apache.org/repos/asf/activemq/blob/5d3a3fcc/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java
index c5a84e9..1bdbe6f 100644
--- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java
+++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/page/PageFileTest.java
@@ -219,10 +219,10 @@ public class PageFileTest extends TestCase {
PageFile pf2 = new PageFile(new File("target/test-data"), getName());
pf2.setEnableRecoveryFile(false);
pf2.load();
-
+ pf2.unload();
+ pf2.load();
long freePages = pf2.getFreePageCount();
pf.unload();
- pf2.unload();
//Make sure that all 10 pages are still tracked
assertEquals(10, freePages);