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;