Author: gtully
Date: Fri Oct  8 12:28:42 2010
New Revision: 1005806

URL: http://svn.apache.org/viewvc?rev=1005806&view=rev
Log:
resolve https://issues.apache.org/activemq/browse/AMQ-2736, logic issue in code 
that keeps data files with acks around pending message file gc. thanks 
jgenender - test case to follow

Modified:
    
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java

Modified: 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java
URL: 
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java?rev=1005806&r1=1005805&r2=1005806&view=diff
==============================================================================
--- 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java
 (original)
+++ 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/kahadb/MessageDatabase.java
 Fri Oct  8 12:28:42 2010
@@ -1202,13 +1202,14 @@ public class MessageDatabase extends Ser
             }
 
             // check we are not deleting file with ack for in-use journal files
+            final TreeSet<Integer> gcCandidates = new 
TreeSet<Integer>(gcCandidateSet);
             Iterator<Integer> candidates = gcCandidateSet.iterator();
             while (candidates.hasNext()) {
                 Integer candidate = candidates.next();
                 Set<Integer> referencedFileIds = 
ackMessageFileMap.get(candidate);
                 if (referencedFileIds != null) {
                     for (Integer referencedFileId : referencedFileIds) {
-                        if (journal.getFileMap().containsKey(referencedFileId) 
&& !gcCandidateSet.contains(referencedFileId)) {
+                        if (journal.getFileMap().containsKey(referencedFileId) 
&& !gcCandidates.contains(referencedFileId)) {
                             // active file that is not targeted for deletion 
is referenced so don't delete
                             candidates.remove();
                             break;


Reply via email to