Fixing PList size tracking by moving the null assignment on removal to
after the onRemoval method is called to make sure that the decrement is
done properly.

(cherry picked from commit d635a369404db25e1c450283a224ed89abf3c5a7)
This commit is contained in:
Christopher L. Shannon (cshannon) 2016-07-12 10:26:58 -04:00
parent 85da157238
commit 9c483fa477
3 changed files with 10 additions and 2 deletions

View File

@ -353,7 +353,7 @@ public class FilePendingMessageCursor extends AbstractPendingMessageCursor imple
@Override
public synchronized long messageSize() {
return memoryList.messageSize() + (isDiskListEmpty() ? 0 : (int)getDiskList().messageSize());
return memoryList.messageSize() + (isDiskListEmpty() ? 0 : getDiskList().messageSize());
}
/**

View File

@ -203,7 +203,7 @@ public final class ListNode<Key, Value> {
}
try {
entryToRemove.unlink();
entryToRemove = null;
ListNode<Key, Value> toRemoveNode = null;
if (currentNode.entries.isEmpty()) {
// may need to free this node
@ -237,7 +237,9 @@ public final class ListNode<Key, Value> {
currentNode = previousNode;
}
}
targetList.onRemove(entryToRemove);
entryToRemove = null;
if (toRemoveNode != null) {
tx.free(toRemoveNode.getPage());

View File

@ -32,6 +32,7 @@ import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.apache.activemq.store.PList;
import org.apache.activemq.store.PList.PListIterator;
import org.apache.activemq.store.PListEntry;
import org.apache.activemq.util.ByteSequence;
import org.apache.activemq.util.IOHelper;
@ -74,6 +75,7 @@ public class PListTest {
plist.addLast(test, bs);
}
assertEquals(plist.size(), COUNT);
assertTrue(plist.messageSize() > 0);
int count = 0;
for (ByteSequence bs : map.values()) {
String origStr = new String(bs.getData(), bs.getOffset(), bs.getLength());
@ -95,6 +97,7 @@ public class PListTest {
plist.addFirst(test, bs);
}
assertEquals(plist.size(), COUNT);
assertTrue(plist.messageSize() > 0);
long count = plist.size() - 1;
for (ByteSequence bs : map.values()) {
String origStr = new String(bs.getData(), bs.getOffset(), bs.getLength());
@ -125,6 +128,7 @@ public class PListTest {
entry = plist.getFirst();
}
assertEquals(0, plist.size());
assertEquals(0, plist.messageSize());
}
@Test
@ -132,6 +136,7 @@ public class PListTest {
doTestRemove(1);
plist.destroy();
assertEquals(0, plist.size());
assertEquals(0, plist.messageSize());
}
@Test
@ -146,6 +151,7 @@ public class PListTest {
}
plist.destroy();
assertEquals(0, plist.size());
assertEquals(0, plist.messageSize());
}
@Test