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/23 15:01:14 UTC

activemq git commit: AMQ-7084 - ensure allocated and unused free pages are visible to subsequent transactions, fix and test with test updates to reflect proper usage

Repository: activemq
Updated Branches:
  refs/heads/master fb1e642c1 -> 8a1abd9bb


AMQ-7084 - ensure allocated and unused free pages are visible to subsequent transactions, fix and test with test updates to reflect proper usage


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

Branch: refs/heads/master
Commit: 8a1abd9bb2744de70af11053f1755116c40ec55f
Parents: fb1e642
Author: gtully <ga...@gmail.com>
Authored: Tue Oct 23 16:00:57 2018 +0100
Committer: gtully <ga...@gmail.com>
Committed: Tue Oct 23 16:00:57 2018 +0100

----------------------------------------------------------------------
 .../store/kahadb/disk/page/Transaction.java     |  4 ++++
 .../store/kahadb/disk/index/BTreeIndexTest.java |  7 ++----
 .../kahadb/disk/index/HashIndexBenchMark.java   |  5 +++--
 .../store/kahadb/disk/index/HashIndexTest.java  |  5 ++---
 .../store/kahadb/disk/index/ListIndexTest.java  |  5 ++---
 .../store/kahadb/disk/page/PageFileTest.java    | 23 +++++++++++++++++++-
 6 files changed, 35 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/8a1abd9b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/Transaction.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/Transaction.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/Transaction.java
index 3761a94..bdb7896 100644
--- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/Transaction.java
+++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/page/Transaction.java
@@ -670,6 +670,8 @@ public class Transaction implements Iterable<Page> {
             allocateList.clear();
             writes.clear();
             writeTransactionId = -1;
+        } else {
+            freePages(allocateList);
         }
         size = 0;
     }
@@ -692,6 +694,8 @@ public class Transaction implements Iterable<Page> {
             allocateList.clear();
             writes.clear();
             writeTransactionId = -1;
+        } else {
+            freePages(allocateList);
         }
         size = 0;
     }

http://git-wip-us.apache.org/repos/asf/activemq/blob/8a1abd9b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java
index fa0c541..cd29471 100644
--- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java
+++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/BTreeIndexTest.java
@@ -57,11 +57,12 @@ public class BTreeIndexTest extends IndexTestSupport {
     protected Index<String, Long> createIndex() throws Exception {
 
         long id = tx.allocate().getPageId();
-        tx.commit();
 
         BTreeIndex<String, Long> index = new BTreeIndex<String,Long>(pf, id);
         index.setKeyMarshaller(StringMarshaller.INSTANCE);
         index.setValueMarshaller(LongMarshaller.INSTANCE);
+        index.load(tx);
+        tx.commit();
 
         return index;
     }
@@ -231,8 +232,6 @@ public class BTreeIndexTest extends IndexTestSupport {
         this.index.load(tx);
 
         long id = tx.allocate().getPageId();
-        tx.commit();
-
         BTreeIndex<String, String> sindex = new BTreeIndex<String,String>(pf, id);
         sindex.setKeyMarshaller(StringMarshaller.INSTANCE);
         sindex.setValueMarshaller(StringMarshaller.INSTANCE);
@@ -273,7 +272,6 @@ public class BTreeIndexTest extends IndexTestSupport {
         this.index.load(tx);
 
         long id = tx.allocate().getPageId();
-        tx.commit();
 
         BTreeIndex<String, String> sindex = new BTreeIndex<String,String>(pf, id);
         sindex.setKeyMarshaller(StringMarshaller.INSTANCE);
@@ -364,7 +362,6 @@ public class BTreeIndexTest extends IndexTestSupport {
         pf.load();
         tx = pf.tx();
         long id = tx.allocate().getPageId();
-        tx.commit();
 
         BTreeIndex<Long, HashSet<String>> test = new BTreeIndex<Long, HashSet<String>>(pf, id);
         test.setKeyMarshaller(LongMarshaller.INSTANCE);

http://git-wip-us.apache.org/repos/asf/activemq/blob/8a1abd9b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexBenchMark.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexBenchMark.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexBenchMark.java
index 16fa8b1..5667b01 100644
--- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexBenchMark.java
+++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexBenchMark.java
@@ -27,12 +27,13 @@ public class HashIndexBenchMark extends IndexBenchmark {
 
         Transaction tx = pf.tx();
         long id = tx.allocate().getPageId();
-        tx.commit();
 
         HashIndex<String, Long> index = new HashIndex<String, Long>(pf, id);
         index.setKeyMarshaller(StringMarshaller.INSTANCE);
         index.setValueMarshaller(LongMarshaller.INSTANCE);
-        
+        index.load(tx);
+        tx.commit();
+
         return index;
     }
 

http://git-wip-us.apache.org/repos/asf/activemq/blob/8a1abd9b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java
index 8fbee56..d4b5e45 100644
--- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java
+++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/HashIndexTest.java
@@ -25,13 +25,12 @@ public class HashIndexTest extends IndexTestSupport {
     protected Index<String, Long> createIndex() throws Exception {
         
         long id = tx.allocate().getPageId();
-        tx.commit();
-
         HashIndex<String, Long> index = new HashIndex<String,Long>(pf, id);
         index.setBinCapacity(12);
         index.setKeyMarshaller(StringMarshaller.INSTANCE);
         index.setValueMarshaller(LongMarshaller.INSTANCE);
-        
+        index.load(tx);
+        tx.commit();
         return index;
     }
 

http://git-wip-us.apache.org/repos/asf/activemq/blob/8a1abd9b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java
index fea1e7a..5e7cdcc 100644
--- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java
+++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/index/ListIndexTest.java
@@ -57,12 +57,11 @@ public class ListIndexTest extends IndexTestSupport {
     protected Index<String, Long> createIndex() throws Exception {
 
         long id = tx.allocate().getPageId();
-        tx.commit();
-
         ListIndex<String, Long> index = new ListIndex<String, Long>(pf, id);
         index.setKeyMarshaller(StringMarshaller.INSTANCE);
         index.setValueMarshaller(LongMarshaller.INSTANCE);
-
+        index.load(tx);
+        tx.commit();
         return index;
     }
 

http://git-wip-us.apache.org/repos/asf/activemq/blob/8a1abd9b/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 0f919f2..3a5cefd 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
@@ -136,7 +136,6 @@ public class PageFileTest extends TestCase {
 
         Transaction tx = pf.tx();
         Page page = tx.allocate();
-        tx.commit();
 
         OutputStream pos = tx.openOutputStream(page, true);
         DataOutputStream os = new DataOutputStream(pos);
@@ -240,4 +239,26 @@ public class PageFileTest extends TestCase {
             pf2.unload();
         }
     }
+
+    public void testAllocatedAndUnusedAreFree() throws Exception {
+
+        PageFile pf = new PageFile(new File("target/test-data"), getName());
+        pf.delete();
+        pf.load();
+
+        Transaction tx = pf.tx();
+        tx.allocate(10);
+        tx.commit();
+
+        assertEquals(10, pf.getPageCount());
+        assertEquals(pf.getFreePageCount(), 10);
+
+        // free pages should get reused
+
+        tx.allocate(10);
+        tx.rollback();
+        assertEquals(10, pf.getPageCount());
+        assertEquals(pf.getFreePageCount(), 10);
+
+    }
 }