[ https://issues.apache.org/jira/browse/CASSANDRA-14790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16652323#comment-16652323 ]
Jon Meredith commented on CASSANDRA-14790: ------------------------------------------ [benedict] if MACRO_CHUNK_SIZE / CHUNK_SIZE allocations take place between the call to allocateMoreChunks and the chunks.poll() the thread that was originally calling allocateMoreChunks gets null returned and ends up allocating the memory off the heap instead. I temporarily added a logging statement for that case and the LongBufferPoolTest does manage to hit it. In real world usage I think it's a harmless race - every now and again, but probably mostly at startup, a buffer pool request is allocated from the heap when it could have been from the pool. > LongBufferPoolTest burn test fails assertion > -------------------------------------------- > > Key: CASSANDRA-14790 > URL: https://issues.apache.org/jira/browse/CASSANDRA-14790 > Project: Cassandra > Issue Type: Test > Components: Testing > Environment: Run under macOS 10.13.6, with patch (attached, but also > https://github.com/jonmeredith/cassandra/tree/failing-burn-test) > Reporter: Jon Meredith > Assignee: Jon Meredith > Priority: Major > Labels: pull-request-available > Attachments: 0001-Add-burn-testsome-target-to-build.xml.patch, > 0002-Initialize-before-running-LongBufferPoolTest.patch > > Time Spent: 2h > Remaining Estimate: 0h > > The LongBufferPoolTest from the burn tests fails with an assertion error. I > added a build target to run individual burn tests, and \{jasobrown} gave a > fix for the uninitialized test setup (attached), however the test now fails > on an assertion about recycling buffers. > To reproduce (with patch applied) > {{ant burn-testsome > -Dtest.name=org.apache.cassandra.utils.memory.LongBufferPoolTest > -Dtest.methods=testAllocate}} > Output > {{ [junit] Testcase: > testAllocate(org.apache.cassandra.utils.memory.LongBufferPoolTest): FAILED}} > {{ [junit] null}} > {{ [junit] junit.framework.AssertionFailedError}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool$Debug.check(BufferPool.java:204)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool.assertAllRecycled(BufferPool.java:181)}} > {{ [junit] at > org.apache.cassandra.utils.memory.LongBufferPoolTest.testAllocate(LongBufferPoolTest.java:350)}} > {{ [junit] at > org.apache.cassandra.utils.memory.LongBufferPoolTest.testAllocate(LongBufferPoolTest.java:54)}} > All major branches from 3.0 and later have issues, however the trunk branch > also warns about references not being released before the reference is > garbage collected. > {{[junit] ERROR [Reference-Reaper:1] 2018-09-25 13:59:54,089 Ref.java:224 - > LEAK DETECTED: a reference > (org.apache.cassandra.utils.concurrent.Ref$State@7f58d19a) to @623704362 was > not released before the reference was garbage collected}} > {{ [junit] ERROR [Reference-Reaper:1] 2018-09-25 13:59:54,089 Ref.java:255 - > Allocate trace org.apache.cassandra.utils.concurrent.Ref$State@7f58d19a:}} > {{ [junit] Thread[pool-2-thread-24,5,main]}} > {{ [junit] at java.lang.Thread.getStackTrace(Thread.java:1559)}} > {{ [junit] at > org.apache.cassandra.utils.concurrent.Ref$Debug.<init>(Ref.java:245)}} > {{ [junit] at > org.apache.cassandra.utils.concurrent.Ref$State.<init>(Ref.java:175)}} > {{ [junit] at org.apache.cassandra.utils.concurrent.Ref.<init>(Ref.java:97)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool$Chunk.setAttachment(BufferPool.java:663)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool$Chunk.get(BufferPool.java:803)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool$Chunk.get(BufferPool.java:793)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool$LocalPool.get(BufferPool.java:388)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool.maybeTakeFromPool(BufferPool.java:143)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool.takeFromPool(BufferPool.java:115)}} > {{ [junit] at > org.apache.cassandra.utils.memory.BufferPool.get(BufferPool.java:85)}} > {{ [junit] at > org.apache.cassandra.utils.memory.LongBufferPoolTest$3.allocate(LongBufferPoolTest.java:296)}} > {{ [junit] at > org.apache.cassandra.utils.memory.LongBufferPoolTest$3.testOne(LongBufferPoolTest.java:246)}} > {{ [junit] at > org.apache.cassandra.utils.memory.LongBufferPoolTest$TestUntil.call(LongBufferPoolTest.java:399)}} > {{ [junit] at > org.apache.cassandra.utils.memory.LongBufferPoolTest$TestUntil.call(LongBufferPoolTest.java:379)}} > {{ [junit] at java.util.concurrent.FutureTask.run(FutureTask.java:266)}} > {{ [junit] at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)}} > {{ [junit] at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)}} > {{ [junit] at java.lang.Thread.run(Thread.java:748)}} > > Perhaps the environment is not being set up correctly for the tests. > -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org