Repository: activemq Updated Branches: refs/heads/activemq-5.13.x aea8d453f -> 61dc68880
https://issues.apache.org/jira/browse/AMQ-6250 Checking for null before closing the journal in MultiKahaDBPersistentAdapter. Also protecting against multiple calls to start and stop. Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/61dc6888 Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/61dc6888 Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/61dc6888 Branch: refs/heads/activemq-5.13.x Commit: 61dc6888045544cbaad6b4ea5a3302b3f23fe4d3 Parents: aea8d45 Author: Christopher L. Shannon (cshannon) <[email protected]> Authored: Thu Apr 14 18:38:31 2016 +0000 Committer: Christopher L. Shannon (cshannon) <[email protected]> Committed: Thu Apr 14 18:42:08 2016 +0000 ---------------------------------------------------------------------- .../kahadb/MultiKahaDBTransactionStore.java | 38 +++++++++++--------- 1 file changed, 22 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/61dc6888/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java ---------------------------------------------------------------------- diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java index 9148b54..90b7c4d 100644 --- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java +++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MultiKahaDBTransactionStore.java @@ -24,6 +24,7 @@ import java.util.Set; import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.activemq.broker.Broker; import org.apache.activemq.broker.ConnectionContext; @@ -61,6 +62,7 @@ public class MultiKahaDBTransactionStore implements TransactionStore { private Journal journal; private int journalMaxFileLength = Journal.DEFAULT_MAX_FILE_LENGTH; private int journalWriteBatchSize = Journal.DEFAULT_MAX_WRITE_BATCH_SIZE; + private final AtomicBoolean started = new AtomicBoolean(false); public MultiKahaDBTransactionStore(MultiKahaDBPersistenceAdapter multiKahaDBPersistenceAdapter) { this.multiKahaDBPersistenceAdapter = multiKahaDBPersistenceAdapter; @@ -270,20 +272,22 @@ public class MultiKahaDBTransactionStore implements TransactionStore { @Override public void start() throws Exception { - journal = new Journal() { - @Override - protected void cleanup() { - super.cleanup(); - txStoreCleanup(); - } - }; - journal.setDirectory(getDirectory()); - journal.setMaxFileLength(journalMaxFileLength); - journal.setWriteBatchSize(journalWriteBatchSize); - IOHelper.mkdirs(journal.getDirectory()); - journal.start(); - recoverPendingLocalTransactions(); - store(new KahaTraceCommand().setMessage("LOADED " + new Date())); + if (started.compareAndSet(false, true)) { + journal = new Journal() { + @Override + protected void cleanup() { + super.cleanup(); + txStoreCleanup(); + } + }; + journal.setDirectory(getDirectory()); + journal.setMaxFileLength(journalMaxFileLength); + journal.setWriteBatchSize(journalWriteBatchSize); + IOHelper.mkdirs(journal.getDirectory()); + journal.start(); + recoverPendingLocalTransactions(); + store(new KahaTraceCommand().setMessage("LOADED " + new Date())); + } } private void txStoreCleanup() { @@ -304,8 +308,10 @@ public class MultiKahaDBTransactionStore implements TransactionStore { @Override public void stop() throws Exception { - journal.close(); - journal = null; + if (started.compareAndSet(true, false) && journal != null) { + journal.close(); + journal = null; + } } private void recoverPendingLocalTransactions() throws IOException {
