Repository: activemq Updated Branches: refs/heads/master 01b1f7f69 -> 0d824a8e6
AMQ-6377: Storing JournalSyncStrategy as an enum Switching MessageDatabase to store JournalSyncStrategy as its enum value instead of String to avoid the performance penalty of comparing Strings everytime isEnableJournalDiskSyncs() is called which currently happens on every write. Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/0d824a8e Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/0d824a8e Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/0d824a8e Branch: refs/heads/master Commit: 0d824a8e6832419cb952ef503504c5296b069ad9 Parents: 01b1f7f Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com> Authored: Mon Mar 6 07:53:04 2017 -0500 Committer: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com> Committed: Mon Mar 6 07:54:39 2017 -0500 ---------------------------------------------------------------------- .../store/kahadb/KahaDBPersistenceAdapter.java | 5 +++++ .../activemq/store/kahadb/MessageDatabase.java | 22 +++++++++++--------- .../store/kahadb/JournalSyncStrategyTest.java | 3 +++ 3 files changed, 20 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/0d824a8e/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/KahaDBPersistenceAdapter.java ---------------------------------------------------------------------- diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/KahaDBPersistenceAdapter.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/KahaDBPersistenceAdapter.java index 1740f6b..297f844 100644 --- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/KahaDBPersistenceAdapter.java +++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/KahaDBPersistenceAdapter.java @@ -52,6 +52,7 @@ import org.apache.activemq.store.TransactionStore; import org.apache.activemq.store.kahadb.data.KahaLocalTransactionId; import org.apache.activemq.store.kahadb.data.KahaTransactionInfo; import org.apache.activemq.store.kahadb.data.KahaXATransactionId; +import org.apache.activemq.store.kahadb.disk.journal.Journal.JournalDiskSyncStrategy; import org.apache.activemq.usage.SystemUsage; import org.apache.activemq.util.ServiceStopper; @@ -461,6 +462,10 @@ public class KahaDBPersistenceAdapter extends LockableServiceSupport implements return letter.getJournalDiskSyncStrategy(); } + public JournalDiskSyncStrategy getJournalDiskSyncStrategyEnum() { + return letter.getJournalDiskSyncStrategyEnum(); + } + /** * @param journalDiskSyncStrategy */ http://git-wip-us.apache.org/repos/asf/activemq/blob/0d824a8e/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java ---------------------------------------------------------------------- diff --git a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java index 5ee6c4c..4fdaa01 100644 --- a/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java +++ b/activemq-kahadb-store/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java @@ -254,7 +254,7 @@ public abstract class MessageDatabase extends ServiceSupport implements BrokerSe protected ScheduledExecutorService scheduler; private final Object schedulerLock = new Object(); - protected String journalDiskSyncStrategy = JournalDiskSyncStrategy.ALWAYS.name(); + protected JournalDiskSyncStrategy journalDiskSyncStrategy = JournalDiskSyncStrategy.ALWAYS; protected boolean archiveDataLogs; protected File directoryArchive; protected AtomicLong journalSize = new AtomicLong(0); @@ -3141,8 +3141,7 @@ public abstract class MessageDatabase extends ServiceSupport implements BrokerSe manager.setPreallocationScope(Journal.PreallocationScope.valueOf(preallocationScope.trim().toUpperCase())); manager.setPreallocationStrategy( Journal.PreallocationStrategy.valueOf(preallocationStrategy.trim().toUpperCase())); - manager.setJournalDiskSyncStrategy( - Journal.JournalDiskSyncStrategy.valueOf(journalDiskSyncStrategy.trim().toUpperCase())); + manager.setJournalDiskSyncStrategy(journalDiskSyncStrategy); if (getDirectoryArchive() != null) { IOHelper.mkdirs(getDirectoryArchive()); manager.setDirectoryArchive(getDirectoryArchive()); @@ -3200,13 +3199,12 @@ public abstract class MessageDatabase extends ServiceSupport implements BrokerSe } /** - * @deprecated use {@link #getJournalDiskSyncStrategy} instead + * @deprecated use {@link #getJournalDiskSyncStrategyEnum} or {@link #getJournalDiskSyncStrategy} instead * @return */ @Deprecated public boolean isEnableJournalDiskSyncs() { - return journalDiskSyncStrategy != null && JournalDiskSyncStrategy.ALWAYS.name().equals( - journalDiskSyncStrategy.trim().toUpperCase()); + return journalDiskSyncStrategy == JournalDiskSyncStrategy.ALWAYS; } /** @@ -3216,18 +3214,22 @@ public abstract class MessageDatabase extends ServiceSupport implements BrokerSe @Deprecated public void setEnableJournalDiskSyncs(boolean syncWrites) { if (syncWrites) { - journalDiskSyncStrategy = JournalDiskSyncStrategy.ALWAYS.name(); + journalDiskSyncStrategy = JournalDiskSyncStrategy.ALWAYS; } else { - journalDiskSyncStrategy = JournalDiskSyncStrategy.NEVER.name(); + journalDiskSyncStrategy = JournalDiskSyncStrategy.NEVER; } } - public String getJournalDiskSyncStrategy() { + public JournalDiskSyncStrategy getJournalDiskSyncStrategyEnum() { return journalDiskSyncStrategy; } + public String getJournalDiskSyncStrategy() { + return journalDiskSyncStrategy.name(); + } + public void setJournalDiskSyncStrategy(String journalDiskSyncStrategy) { - this.journalDiskSyncStrategy = journalDiskSyncStrategy; + this.journalDiskSyncStrategy = JournalDiskSyncStrategy.valueOf(journalDiskSyncStrategy.trim().toUpperCase()); } public long getJournalDiskSyncInterval() { http://git-wip-us.apache.org/repos/asf/activemq/blob/0d824a8e/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalSyncStrategyTest.java ---------------------------------------------------------------------- diff --git a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalSyncStrategyTest.java b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalSyncStrategyTest.java index c22339f..33810cb 100644 --- a/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalSyncStrategyTest.java +++ b/activemq-kahadb-store/src/test/java/org/apache/activemq/store/kahadb/JournalSyncStrategyTest.java @@ -67,6 +67,7 @@ public class JournalSyncStrategyTest { assertTrue(journal.isJournalDiskSyncPeriodic()); assertFalse(store.isEnableJournalDiskSyncs()); assertEquals(store.getJournalDiskSyncStrategy(), JournalDiskSyncStrategy.PERIODIC.name()); + assertEquals(store.getJournalDiskSyncStrategyEnum(), JournalDiskSyncStrategy.PERIODIC); assertEquals(store.getJournal().getJournalDiskSyncStrategy(), JournalDiskSyncStrategy.PERIODIC); assertEquals(store.getJournalDiskSyncInterval(), 800); @@ -87,6 +88,7 @@ public class JournalSyncStrategyTest { assertFalse(store.getJournal().isJournalDiskSyncPeriodic()); assertTrue(store.isEnableJournalDiskSyncs()); assertEquals(store.getJournalDiskSyncStrategy(), JournalDiskSyncStrategy.ALWAYS.name()); + assertEquals(store.getJournalDiskSyncStrategyEnum(), JournalDiskSyncStrategy.ALWAYS); assertEquals(store.getJournal().getJournalDiskSyncStrategy(), JournalDiskSyncStrategy.ALWAYS); MessageStore messageStore = store.createQueueMessageStore(new ActiveMQQueue("test")); @@ -101,6 +103,7 @@ public class JournalSyncStrategyTest { assertFalse(store.getJournal().isJournalDiskSyncPeriodic()); assertFalse(store.isEnableJournalDiskSyncs()); assertEquals(store.getJournalDiskSyncStrategy(), JournalDiskSyncStrategy.NEVER.name()); + assertEquals(store.getJournalDiskSyncStrategyEnum(), JournalDiskSyncStrategy.NEVER); assertEquals(store.getJournal().getJournalDiskSyncStrategy(), JournalDiskSyncStrategy.NEVER); MessageStore messageStore = store.createQueueMessageStore(new ActiveMQQueue("test"));