#7549 fix unsafe concurreny in PQ count getters

Fixes #8336
This commit is contained in:
Armin 2017-09-20 15:30:21 +02:00 committed by Armin Braun
parent 6962fc2a06
commit 68b22280bc

View file

@ -768,16 +768,26 @@ public class Queue implements Closeable {
} }
public long getAckedCount() { public long getAckedCount() {
lock.lock();
try {
return headPage.ackedSeqNums.cardinality() + tailPages.stream() return headPage.ackedSeqNums.cardinality() + tailPages.stream()
.mapToLong(page -> page.ackedSeqNums.cardinality()) .mapToLong(page -> page.ackedSeqNums.cardinality()).sum();
.sum(); } finally {
lock.unlock();
}
} }
public long getUnackedCount() { public long getUnackedCount() {
lock.lock();
try {
long headPageCount = (headPage.getElementCount() - headPage.ackedSeqNums.cardinality()); long headPageCount = (headPage.getElementCount() - headPage.ackedSeqNums.cardinality());
long tailPagesCount = tailPages.stream() long tailPagesCount = tailPages.stream()
.mapToLong(page -> (page.getElementCount() - page.ackedSeqNums.cardinality())).sum(); .mapToLong(page -> (page.getElementCount() - page.ackedSeqNums.cardinality()))
.sum();
return headPageCount + tailPagesCount; return headPageCount + tailPagesCount;
} finally {
lock.unlock();
}
} }
protected long nextSeqNum() { protected long nextSeqNum() {