You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2007/10/26 20:00:15 UTC

svn commit: r588725 - in /activemq/trunk/activemq-core/src/main/java/org/apache/activemq: kaha/impl/async/AsyncDataManager.java store/amq/AMQPersistenceAdapter.java

Author: chirino
Date: Fri Oct 26 11:00:14 2007
New Revision: 588725

URL: http://svn.apache.org/viewvc?rev=588725&view=rev
Log:
Avoid deleting datafiles that are in-use.. timing issue was making this possible

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/AsyncDataManager.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/amq/AMQPersistenceAdapter.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/AsyncDataManager.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/AsyncDataManager.java?rev=588725&r1=588724&r2=588725&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/AsyncDataManager.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/kaha/impl/async/AsyncDataManager.java Fri Oct 26 11:00:14 2007
@@ -374,9 +374,20 @@
         }
     }
 
-    public synchronized void consolidateDataFilesNotIn(Set<Integer> inUse) throws IOException {
+    public synchronized void consolidateDataFilesNotIn(Set<Integer> inUse, Integer lastDataFile) throws IOException {
         Set<Integer> unUsed = new HashSet<Integer>(fileMap.keySet());
         unUsed.removeAll(inUse);
+        
+        // Don't purge any data files past lastDataFile
+        if( lastDataFile!=null ) {
+            for (Iterator iterator = unUsed.iterator(); iterator.hasNext();) {
+                DataFile dataFile = (DataFile)iterator.next();
+                if( dataFile.getDataFileId() >= lastDataFile ) {
+                    iterator.remove();
+                }
+            }
+        }
+        
         List<DataFile> purgeList = new ArrayList<DataFile>();
         for (Integer key : unUsed) {
             DataFile dataFile = (DataFile)fileMap.get(key);
@@ -581,4 +592,10 @@
 		this.useNio = useNio;
 	}
 
+	
+    synchronized public Integer getCurrentDataFileId() {
+        if( currentWriteFile==null )
+            return null;
+        return currentWriteFile.getDataFileId();
+    }
 }

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?rev=588725&r1=588724&r2=588725&view=diff
==============================================================================
--- 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 Oct 26 11:00:14 2007
@@ -351,8 +351,11 @@
      */
     public void cleanup() {
         try {
+            // Capture the lastDataFile so that we don't delete any data files
+            // after this one.
+            Integer lastDataFile = asyncDataManager.getCurrentDataFileId();            
             Set<Integer> inUse = referenceStoreAdapter.getReferenceFileIdsInUse();
-            asyncDataManager.consolidateDataFilesNotIn(inUse);
+            asyncDataManager.consolidateDataFilesNotIn(inUse, lastDataFile);
         } catch (IOException e) {
             LOG.error("Could not cleanup data files: " + e, e);
         }