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 2016/04/22 13:29:53 UTC

activemq git commit: https://issues.apache.org/jira/browse/AMQ-5578 - enable org.apache.activemq.kahaDB.files.skipMetadataUpdate for tests to validate. remove some redundant call to limit and add latencey test to validate the need for outof band or pool

Repository: activemq
Updated Branches:
  refs/heads/master 3e7847aea -> 930a74c69


https://issues.apache.org/jira/browse/AMQ-5578 - enable org.apache.activemq.kahaDB.files.skipMetadataUpdate for tests to validate. remove some redundant call to limit and add latencey test to validate the need for outof band or pool allocation of journals


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

Branch: refs/heads/master
Commit: 930a74c696bb0160473a28720407b0952d461cbe
Parents: 3e7847a
Author: gtully <ga...@gmail.com>
Authored: Fri Apr 22 12:29:31 2016 +0100
Committer: gtully <ga...@gmail.com>
Committed: Fri Apr 22 12:29:31 2016 +0100

----------------------------------------------------------------------
 .../store/kahadb/disk/journal/Journal.java      |  5 +-
 .../PreallocationJournalLatencyTest.java        | 81 ++++++++++++++++++++
 pom.xml                                         |  1 +
 3 files changed, 83 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/930a74c6/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java
index e186e19..da0d5b4 100644
--- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java
+++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/disk/journal/Journal.java
@@ -62,7 +62,7 @@ public class Journal {
 
     private static final int MAX_BATCH_SIZE = 32*1024*1024;
 
-    private static final int PREALLOC_CHUNK_SIZE = 1 << 20;
+    private static final int PREALLOC_CHUNK_SIZE = 1024*1024;
 
     // ITEM_HEAD_SPACE = length + type+ reserved space + SOR
     public static final int RECORD_HEAD_SPACE = 4 + 1;
@@ -282,7 +282,6 @@ public class Journal {
 
     private void doPreallocationZeros(RecoverableRandomAccessFile file) {
         ByteBuffer buffer = ByteBuffer.allocate(maxFileLength);
-        buffer.limit(maxFileLength);
 
         try {
             FileChannel channel = file.getChannel();
@@ -326,8 +325,6 @@ public class Journal {
     private void doPreallocationChunkedZeros(RecoverableRandomAccessFile file) {
 
         ByteBuffer buffer = ByteBuffer.allocate(PREALLOC_CHUNK_SIZE);
-        buffer.position(0);
-        buffer.limit(PREALLOC_CHUNK_SIZE);
 
         try {
             FileChannel channel = file.getChannel();

http://git-wip-us.apache.org/repos/asf/activemq/blob/930a74c6/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/PreallocationJournalLatencyTest.java
----------------------------------------------------------------------
diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/PreallocationJournalLatencyTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/PreallocationJournalLatencyTest.java
new file mode 100644
index 0000000..35ab321
--- /dev/null
+++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/disk/journal/PreallocationJournalLatencyTest.java
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.store.kahadb.disk.journal;
+
+import org.apache.activemq.management.TimeStatisticImpl;
+import org.apache.activemq.store.kahadb.KahaDBStore;
+import org.apache.activemq.util.ByteSequence;
+import org.apache.activemq.util.Wait;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.Random;
+
+import static org.junit.Assert.assertTrue;
+
+public class PreallocationJournalLatencyTest {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PreallocationJournalLatencyTest.class);
+    final Random rand = new Random();
+
+    @Test
+    public void preallocationLatency() throws Exception {
+
+        TimeStatisticImpl sparse = executeTest(Journal.PreallocationStrategy.SPARSE_FILE.name());
+        TimeStatisticImpl chunked_zeros = executeTest(Journal.PreallocationStrategy.CHUNKED_ZEROS.name());
+        TimeStatisticImpl zeros = executeTest(Journal.PreallocationStrategy.ZEROS.name());
+        LOG.info("  sparse: " + sparse);
+        LOG.info(" chunked: " + chunked_zeros);
+        LOG.info("   zeros: " + zeros);
+
+    }
+
+    private TimeStatisticImpl executeTest(String preallocationStrategy)throws Exception {
+        int randInt = rand.nextInt(100);
+        File dataDirectory = new File("./target/activemq-data/kahadb" + randInt);
+
+        KahaDBStore store = new KahaDBStore();
+        store.deleteAllMessages();
+        store.setDirectory(dataDirectory);
+        store.setPreallocationStrategy(preallocationStrategy);
+        store.start();
+
+        final File journalLog = new File(dataDirectory, "db-1.log");
+        assertTrue("file exists", Wait.waitFor(new Wait.Condition() {
+            @Override
+            public boolean isSatisified() throws Exception {
+                return journalLog.exists();
+            }
+        }));
+
+        final Journal journal = store.getJournal();
+        ByteSequence byteSequence = new ByteSequence(new byte[8*1024]);
+
+        TimeStatisticImpl timeStatistic = new TimeStatisticImpl("append", "duration");
+        for (int i=0;i<300000; i++) {
+            final long start = System.currentTimeMillis();
+            journal.write(byteSequence, true);
+            timeStatistic.addTime(System.currentTimeMillis() - start);
+        }
+        LOG.info("current journal dataFile id: " + journal.getCurrentDataFileId());
+        store.stop();
+        return timeStatistic;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/activemq/blob/930a74c6/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a83f91b..efc4aef 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1204,6 +1204,7 @@
             <failIfNoTests>false</failIfNoTests>
             <systemPropertyVariables>
                 <java.awt.headless>true</java.awt.headless>
+                <org.apache.activemq.kahaDB.files.skipMetadataUpdate>true</org.apache.activemq.kahaDB.files.skipMetadataUpdate>
             </systemPropertyVariables>
             <argLine>-Xmx512m</argLine>
           </configuration>