[#5520] Correctly include all PoolSubpage metrics
Motivation: Because of a bug we missed to include the first PoolSubpage when collection metrics. Modifications: - Correctly include all subpages - Add unit test Result: Correctly include all subpages
This commit is contained in:
parent
f2ce28bf18
commit
771cfaec22
@ -431,7 +431,7 @@ abstract class PoolArena<T> implements PoolArenaMetric {
|
||||
|
||||
private static List<PoolSubpageMetric> subPageMetricList(PoolSubpage<?>[] pages) {
|
||||
List<PoolSubpageMetric> metrics = new ArrayList<PoolSubpageMetric>();
|
||||
for (int i = 1; i < pages.length; i ++) {
|
||||
for (int i = 0; i < pages.length; i ++) {
|
||||
PoolSubpage<?> head = pages[i];
|
||||
if (head.next == head) {
|
||||
continue;
|
||||
@ -587,49 +587,36 @@ abstract class PoolArena<T> implements PoolArenaMetric {
|
||||
.append(q100)
|
||||
.append(StringUtil.NEWLINE)
|
||||
.append("tiny subpages:");
|
||||
for (int i = 1; i < tinySubpagePools.length; i ++) {
|
||||
PoolSubpage<T> head = tinySubpagePools[i];
|
||||
if (head.next == head) {
|
||||
continue;
|
||||
}
|
||||
|
||||
buf.append(StringUtil.NEWLINE)
|
||||
.append(i)
|
||||
.append(": ");
|
||||
PoolSubpage<T> s = head.next;
|
||||
for (;;) {
|
||||
buf.append(s);
|
||||
s = s.next;
|
||||
if (s == head) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
appendPoolSubPages(buf, tinySubpagePools);
|
||||
buf.append(StringUtil.NEWLINE)
|
||||
.append("small subpages:");
|
||||
for (int i = 1; i < smallSubpagePools.length; i ++) {
|
||||
PoolSubpage<T> head = smallSubpagePools[i];
|
||||
if (head.next == head) {
|
||||
continue;
|
||||
}
|
||||
|
||||
buf.append(StringUtil.NEWLINE)
|
||||
.append(i)
|
||||
.append(": ");
|
||||
PoolSubpage<T> s = head.next;
|
||||
for (;;) {
|
||||
buf.append(s);
|
||||
s = s.next;
|
||||
if (s == head) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
appendPoolSubPages(buf, smallSubpagePools);
|
||||
buf.append(StringUtil.NEWLINE);
|
||||
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
private static void appendPoolSubPages(StringBuilder buf, PoolSubpage<?>[] subpages) {
|
||||
for (int i = 0; i < subpages.length; i ++) {
|
||||
PoolSubpage<?> head = subpages[i];
|
||||
if (head.next == head) {
|
||||
continue;
|
||||
}
|
||||
|
||||
buf.append(StringUtil.NEWLINE)
|
||||
.append(i)
|
||||
.append(": ");
|
||||
PoolSubpage<?> s = head.next;
|
||||
for (;;) {
|
||||
buf.append(s);
|
||||
s = s.next;
|
||||
if (s == head) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static final class HeapArena extends PoolArena<byte[]> {
|
||||
|
||||
HeapArena(PooledByteBufAllocator parent, int pageSize, int maxOrder, int pageShifts, int chunkSize) {
|
||||
|
@ -94,6 +94,32 @@ public class PooledByteBufAllocatorTest {
|
||||
assertEquals(max, m.maxUsage());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSmallSubpageMetric() {
|
||||
PooledByteBufAllocator allocator = new PooledByteBufAllocator(true, 1, 1, 8192, 11, 0, 0, 0);
|
||||
ByteBuf buffer = allocator.heapBuffer(500);
|
||||
try {
|
||||
PoolArenaMetric metric = allocator.heapArenas().get(0);
|
||||
PoolSubpageMetric subpageMetric = metric.smallSubpages().get(0);
|
||||
assertEquals(1, subpageMetric.maxNumElements() - subpageMetric.numAvailable());
|
||||
} finally {
|
||||
buffer.release();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTinySubpageMetric() {
|
||||
PooledByteBufAllocator allocator = new PooledByteBufAllocator(true, 1, 1, 8192, 11, 0, 0, 0);
|
||||
ByteBuf buffer = allocator.heapBuffer(1);
|
||||
try {
|
||||
PoolArenaMetric metric = allocator.heapArenas().get(0);
|
||||
PoolSubpageMetric subpageMetric = metric.tinySubpages().get(0);
|
||||
assertEquals(1, subpageMetric.maxNumElements() - subpageMetric.numAvailable());
|
||||
} finally {
|
||||
buffer.release();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFreePoolChunk() {
|
||||
int chunkSize = 16 * 1024 * 1024;
|
||||
|
Loading…
Reference in New Issue
Block a user