You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ra...@apache.org on 2007/03/09 14:30:34 UTC

svn commit: r516408 - in /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store: ReferenceStoreAdapter.java amq/AMQPersistenceAdapter.java kahadaptor/TopicSubContainer.java

Author: rajdavies
Date: Fri Mar  9 05:30:33 2007
New Revision: 516408

URL: http://svn.apache.org/viewvc?view=rev&rev=516408
Log:
added isStoreValid() method - used by AMQStore to determine if references need to be rebuilt

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/ReferenceStoreAdapter.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/TopicSubContainer.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/ReferenceStoreAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/ReferenceStoreAdapter.java?view=diff&rev=516408&r1=516407&r2=516408
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/ReferenceStoreAdapter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/ReferenceStoreAdapter.java Fri Mar  9 05:30:33 2007
@@ -41,5 +41,11 @@
     public TopicReferenceStore createTopicReferenceStore(ActiveMQTopic destination) throws IOException;
 
 	public Set<Integer> getReferenceFileIdsInUse() throws IOException;
+    
+    /**
+     * If the store isn't valid, it can be recoverd at start-up
+     * @return true if the reference store is in a consistent state
+     */
+    public boolean isStoreValid();
 
 }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java?view=diff&rev=516408&r1=516407&r2=516408
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java Fri Mar  9 05:30:33 2007
@@ -157,7 +157,14 @@
             }
         },"ActiveMQ Journal Checkpoint Worker");
         createTransactionStore();
-        recover();
+        if(referenceStoreAdapter.isStoreValid()==false){
+            log.warn("The ReferenceStore is not valid - recovering ...");
+            recover();
+            log.info("Finished recovering the ReferenceStore");
+        }else {
+            Location location=writeTraceMessage("RECOVERED "+new Date(),true);
+            asyncDataManager.setMark(location,true);
+        }
         // Do a checkpoint periodically.
         periodicCheckpointTask=new Runnable(){
 

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/TopicSubContainer.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/TopicSubContainer.java?view=diff&rev=516408&r1=516407&r2=516408
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/TopicSubContainer.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadaptor/TopicSubContainer.java Fri Mar  9 05:30:33 2007
@@ -58,18 +58,21 @@
         return listContainer.placeLast(ref);
     }
 
-    public ConsumerMessageRef remove(MessageId id) {
-        ConsumerMessageRef result = null;
-        if (!listContainer.isEmpty()) {
-            for (StoreEntry entry = listContainer.getFirst(); entry != null; entry = listContainer.getNext(entry)) {
-                ConsumerMessageRef ref = (ConsumerMessageRef) listContainer.get(entry);
-                if (ref != null && ref.getMessageId().equals(id)) {
-                    listContainer.remove(entry);
-                    result = ref;
-                    if (listContainer != null && batchEntry != null && (listContainer.isEmpty() || batchEntry.equals(entry))) {
+    public ConsumerMessageRef remove(MessageId id){
+        ConsumerMessageRef result=null;
+        if(!listContainer.isEmpty()){
+            StoreEntry entry=listContainer.getFirst();
+            while(entry!=null){
+                ConsumerMessageRef ref=(ConsumerMessageRef)listContainer.get(entry);
+                listContainer.remove(entry);
+                if(ref!=null&&ref.getMessageId().equals(id)){
+                    result=ref;
+                    if(listContainer!=null&&batchEntry!=null&&(listContainer.isEmpty()||batchEntry.equals(entry))){
                         reset();
                     }
+                    break;
                 }
+                entry=listContainer.getFirst();
             }
         }
         return result;