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 2013/11/28 22:14:41 UTC

git commit: https://issues.apache.org/jira/browse/AMQ-4907 - sanity check on the index when checkForCorruptJournalFiles - test and check that validates the orderindex makes sense

Updated Branches:
  refs/heads/trunk 11781d3cf -> 06f24e2e0


https://issues.apache.org/jira/browse/AMQ-4907 - sanity check on the index when checkForCorruptJournalFiles - test and check that validates the orderindex makes sense


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

Branch: refs/heads/trunk
Commit: 06f24e2e0ba4dd6d8920d188482b9eb1e08ab888
Parents: 11781d3
Author: gtully <ga...@gmail.com>
Authored: Thu Nov 28 21:13:02 2013 +0000
Committer: gtully <ga...@gmail.com>
Committed: Thu Nov 28 21:14:24 2013 +0000

----------------------------------------------------------------------
 .../activemq/store/kahadb/MessageDatabase.java      |  9 +++++++++
 .../store/kahadb/KahaDBStoreRecoveryBrokerTest.java | 16 ++++++++++++++--
 2 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq/blob/06f24e2e/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 b3c2d6f..8c8fe0f 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
@@ -303,6 +303,15 @@ public abstract class MessageDatabase extends ServiceSupport implements BrokerSe
                         Entry<String, StoredDestination> entry = iterator.next();
                         StoredDestination sd = loadStoredDestination(tx, entry.getKey(), entry.getValue().subscriptions!=null);
                         storedDestinations.put(entry.getKey(), sd);
+
+                        if (checkForCorruptJournalFiles) {
+                            // sanity check the index also
+                            if (!entry.getValue().locationIndex.isEmpty(tx)) {
+                                if (entry.getValue().orderIndex.nextMessageId <= 0) {
+                                    throw new IOException("Detected uninitialized orderIndex nextMessageId with pending messages for " + entry.getKey());
+                                }
+                            }
+                        }
                     }
                 }
             });

http://git-wip-us.apache.org/repos/asf/activemq/blob/06f24e2e/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBStoreRecoveryBrokerTest.java
----------------------------------------------------------------------
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBStoreRecoveryBrokerTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBStoreRecoveryBrokerTest.java
index 2ce9533..3725572 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBStoreRecoveryBrokerTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBStoreRecoveryBrokerTest.java
@@ -46,7 +46,7 @@ public class KahaDBStoreRecoveryBrokerTest extends RecoveryBrokerTest {
     public static final String KAHADB_DIR_BASE = "target/activemq-data/kahadb";
     public static String kahaDbDirectoryName;
 
-    enum CorruptionType { None, FailToLoad, LoadInvalid, LoadCorrupt };
+    enum CorruptionType { None, FailToLoad, LoadInvalid, LoadCorrupt, LoadOrderIndex0 };
     public CorruptionType  failTest = CorruptionType.None;
 
     @Override
@@ -71,6 +71,7 @@ public class KahaDBStoreRecoveryBrokerTest extends RecoveryBrokerTest {
         KahaDBStore kaha = new KahaDBStore();
         kaha.setDirectory(new File(kahaDbDirectoryName));
         kaha.deleteAllMessages();
+        kaha.setCheckForCorruptJournalFiles(failTest == CorruptionType.LoadOrderIndex0);
         broker.setPersistenceAdapter(kaha);
         return broker;
     }
@@ -100,6 +101,16 @@ public class KahaDBStoreRecoveryBrokerTest extends RecoveryBrokerTest {
                 raf.seek(8*1024 + 57);
                 raf.writeLong(Integer.MAX_VALUE-10);
                 break;
+            case LoadOrderIndex0:
+                // loadable but invalid metadata
+                // location of order index default priority index size
+                // so looks like there are no ids in the order index
+                // picked up by setCheckForCorruptJournalFiles
+                raf.seek(12*1024 + 21);
+                raf.writeShort(0);
+                raf.writeChar(0);
+                raf.writeLong(-1);
+                break;
             default:
         }
         raf.close();
@@ -107,6 +118,7 @@ public class KahaDBStoreRecoveryBrokerTest extends RecoveryBrokerTest {
         // starting broker
         BrokerService broker = new BrokerService();
         KahaDBStore kaha = new KahaDBStore();
+        kaha.setCheckForCorruptJournalFiles(failTest == CorruptionType.LoadOrderIndex0);
         // uncomment if you want to test archiving
         //kaha.setArchiveCorruptedIndex(true);
         kaha.setDirectory(new File(kahaDbDirectoryName));
@@ -123,7 +135,7 @@ public class KahaDBStoreRecoveryBrokerTest extends RecoveryBrokerTest {
     }
 
     public void initCombosForTestLargeQueuePersistentMessagesNotLostOnRestart() {
-        this.addCombinationValues("failTest", new CorruptionType[]{CorruptionType.FailToLoad, CorruptionType.LoadInvalid, CorruptionType.LoadCorrupt} );
+        this.addCombinationValues("failTest", new CorruptionType[]{CorruptionType.FailToLoad, CorruptionType.LoadInvalid, CorruptionType.LoadCorrupt, CorruptionType.LoadOrderIndex0} );
     }
 
     public void testLargeQueuePersistentMessagesNotLostOnRestart() throws Exception {