Repository: activemq
Updated Branches:
  refs/heads/master e1c707e81 -> c853bcf43


https://issues.apache.org/jira/browse/AMQ-5748

Fixing an issue that prevented old versions of KahaDB from being
upgraded to the newest version 6


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

Branch: refs/heads/master
Commit: 8871b0e496bae1396fb7323b01d7f715b4a211f7
Parents: e1c707e
Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Authored: Wed Jul 8 15:50:16 2015 +0000
Committer: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com>
Committed: Wed Jul 8 16:10:11 2015 +0000

----------------------------------------------------------------------
 .../activemq/store/kahadb/MessageDatabase.java  |  52 ++++++++++++-------
 .../store/kahadb/KahaDBVersionTest.java         |   8 ++-
 .../store/kahadb/KahaDBVersion5/db-1.log        | Bin 0 -> 1048576 bytes
 .../store/kahadb/KahaDBVersion5/db.data         | Bin 0 -> 667648 bytes
 .../store/kahadb/KahaDBVersion5/db.redo         | Bin 0 -> 668944 bytes
 5 files changed, 40 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/8871b0e4/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 e35619e..2fa4bb1 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
@@ -1930,7 +1930,7 @@ public abstract class MessageDatabase extends 
ServiceSupport implements BrokerSe
 
     protected class StoredDestinationMarshaller extends 
VariableMarshaller<StoredDestination> {
 
-       final MessageKeysMarshaller messageKeysMarshaller = new 
MessageKeysMarshaller();
+        final MessageKeysMarshaller messageKeysMarshaller = new 
MessageKeysMarshaller();
 
         @Override
         public StoredDestination readPayload(final DataInput dataIn) throws 
IOException {
@@ -2128,6 +2128,15 @@ public abstract class MessageDatabase extends 
ServiceSupport implements BrokerSe
         rc.messageIdIndex.setValueMarshaller(LongMarshaller.INSTANCE);
         rc.messageIdIndex.load(tx);
 
+        //go through an upgrade old index if older than version 6
+        if (metadata.version < 6) {
+            for (Iterator<Entry<Location, Long>> iterator = 
rc.locationIndex.iterator(tx); iterator.hasNext(); ) {
+                Entry<Location, Long> entry = iterator.next();
+                // modify so it is upgraded
+                rc.locationIndex.put(tx, entry.getKey(), entry.getValue());
+            }
+        }
+
         // If it was a topic...
         if (topic) {
 
@@ -2275,24 +2284,24 @@ public abstract class MessageDatabase extends 
ServiceSupport implements BrokerSe
     protected final Map<String, MessageStore> storeCache =
             new ConcurrentHashMap<String, MessageStore>();
 
-       /**
-        * Locate the storeMessageSize counter for this KahaDestination
-        * @param kahaDestination
-        * @return
-        */
-       protected MessageStoreStatistics getStoreStats(String kahaDestKey) {
-           MessageStoreStatistics storeStats = null;
-               try {
-                   MessageStore messageStore = storeCache.get(kahaDestKey);
-                   if (messageStore != null) {
-                       storeStats = messageStore.getMessageStoreStatistics();
-                   }
-               } catch (Exception e1) {
-                        LOG.error("Getting size counter of destination 
failed", e1);
-               }
-
-               return storeStats;
-       }
+    /**
+     * Locate the storeMessageSize counter for this KahaDestination
+     * @param kahaDestination
+     * @return
+     */
+    protected MessageStoreStatistics getStoreStats(String kahaDestKey) {
+        MessageStoreStatistics storeStats = null;
+        try {
+            MessageStore messageStore = storeCache.get(kahaDestKey);
+            if (messageStore != null) {
+                storeStats = messageStore.getMessageStoreStatistics();
+            }
+        } catch (Exception e1) {
+             LOG.error("Getting size counter of destination failed", e1);
+        }
+
+        return storeStats;
+    }
 
     /**
      * Determine whether this Destination matches the DestinationType
@@ -2319,6 +2328,7 @@ public abstract class MessageDatabase extends 
ServiceSupport implements BrokerSe
 
         }
 
+        @Override
         public Location readPayload(DataInput dataIn) throws IOException {
             Location rc = new Location();
             rc.setDataFileId(dataIn.readInt());
@@ -2329,6 +2339,7 @@ public abstract class MessageDatabase extends 
ServiceSupport implements BrokerSe
             return rc;
         }
 
+        @Override
         public void writePayload(Location object, DataOutput dataOut)
                 throws IOException {
             dataOut.writeInt(object.getDataFileId());
@@ -2336,14 +2347,17 @@ public abstract class MessageDatabase extends 
ServiceSupport implements BrokerSe
             dataOut.writeInt(object.getSize());
         }
 
+        @Override
         public int getFixedSize() {
             return 12;
         }
 
+        @Override
         public Location deepCopy(Location source) {
             return new Location(source);
         }
 
+        @Override
         public boolean isDeepCopySupported() {
             return true;
         }

http://git-wip-us.apache.org/repos/asf/activemq/blob/8871b0e4/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBVersionTest.java
----------------------------------------------------------------------
diff --git 
a/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBVersionTest.java
 
b/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBVersionTest.java
index c03f60d..0b643b9 100644
--- 
a/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBVersionTest.java
+++ 
b/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBVersionTest.java
@@ -56,6 +56,8 @@ public class KahaDBVersionTest extends TestCase {
     final static File VERSION_2_DB = new File(basedir + 
"/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion2");
     final static File VERSION_3_DB = new File(basedir + 
"/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion3");
     final static File VERSION_4_DB = new File(basedir + 
"/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion4");
+    final static File VERSION_5_DB = new File(basedir + 
"/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5");
+
 
     BrokerService broker = null;
 
@@ -76,7 +78,7 @@ public class KahaDBVersionTest extends TestCase {
 
     public void XtestCreateStore() throws Exception {
         KahaDBPersistenceAdapter kaha = new KahaDBPersistenceAdapter();
-        File dir = new 
File("src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion4");
+        File dir = new 
File("src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5");
         IOHelper.deleteFile(dir);
         kaha.setDirectory(dir);
         kaha.setJournalMaxFileLength(1024 * 1024);
@@ -127,6 +129,10 @@ public class KahaDBVersionTest extends TestCase {
         doConvertRestartCycle(VERSION_4_DB);
     }
 
+    public void testVersion5Conversion() throws Exception {
+        doConvertRestartCycle(VERSION_5_DB);
+    }
+
     public void doConvertRestartCycle(File existingStore) throws Exception {
 
         File testDir = new File("target/activemq-data/kahadb/versionDB");

http://git-wip-us.apache.org/repos/asf/activemq/blob/8871b0e4/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db-1.log
----------------------------------------------------------------------
diff --git 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db-1.log
 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db-1.log
new file mode 100644
index 0000000..f9249eb
Binary files /dev/null and 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db-1.log
 differ

http://git-wip-us.apache.org/repos/asf/activemq/blob/8871b0e4/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.data
----------------------------------------------------------------------
diff --git 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.data
 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.data
new file mode 100644
index 0000000..08fc5a0
Binary files /dev/null and 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.data
 differ

http://git-wip-us.apache.org/repos/asf/activemq/blob/8871b0e4/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.redo
----------------------------------------------------------------------
diff --git 
a/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.redo
 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.redo
new file mode 100644
index 0000000..bd94d0b
Binary files /dev/null and 
b/activemq-unit-tests/src/test/resources/org/apache/activemq/store/kahadb/KahaDBVersion5/db.redo
 differ

Reply via email to