You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cs...@apache.org on 2016/04/14 20:39:45 UTC
activemq git commit: https://issues.apache.org/jira/browse/AMQ-6250
Repository: activemq
Updated Branches:
refs/heads/master 530c1a819 -> 092c56d70
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/092c56d7
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/092c56d7
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/092c56d7
Branch: refs/heads/master
Commit: 092c56d70c1440fbdb1e91447a1bc4a2c461e5c7
Parents: 530c1a8
Author: Christopher L. Shannon (cshannon) <ch...@gmail.com>
Authored: Thu Apr 14 18:38:31 2016 +0000
Committer: Christopher L. Shannon (cshannon) <ch...@gmail.com>
Committed: Thu Apr 14 18:39:14 2016 +0000
----------------------------------------------------------------------
.../kahadb/MultiKahaDBTransactionStore.java | 38 +++++++++++---------
1 file changed, 22 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq/blob/092c56d7/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 {