mirror of https://github.com/apache/activemq.git
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
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1005806 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
8e83b7f123
commit
dd68c61e65
|
@ -1202,13 +1202,14 @@ public class MessageDatabase extends ServiceSupport implements BrokerServiceAwar
|
||||||
}
|
}
|
||||||
|
|
||||||
// check we are not deleting file with ack for in-use journal files
|
// 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();
|
Iterator<Integer> candidates = gcCandidateSet.iterator();
|
||||||
while (candidates.hasNext()) {
|
while (candidates.hasNext()) {
|
||||||
Integer candidate = candidates.next();
|
Integer candidate = candidates.next();
|
||||||
Set<Integer> referencedFileIds = ackMessageFileMap.get(candidate);
|
Set<Integer> referencedFileIds = ackMessageFileMap.get(candidate);
|
||||||
if (referencedFileIds != null) {
|
if (referencedFileIds != null) {
|
||||||
for (Integer referencedFileId : referencedFileIds) {
|
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
|
// active file that is not targeted for deletion is referenced so don't delete
|
||||||
candidates.remove();
|
candidates.remove();
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue