[
https://issues.apache.org/jira/browse/CASSANDRA-14790?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16653759#comment-16653759
]
Benedict commented on CASSANDRA-14790:
--------------------------------------
I still think you're reading it wrong. Perhaps we should hop on a call to
discuss it?
FWIW, outside of this being a bug or not, your proposed change is absolutely
fine - and an improvement over the current code. So we could simply make the
change, since it is trivial. But I don't believe this is a _bug_ (which, if
the behaviour were as you describe, it would certainly be in my book, even one
of low impact).
So, to your example. T1 has _successfully_ called {{allocateMoreChunks}},
right? So at step 3, it goes to the beginning of the loop to poll. {{null}}
is returned, _but_ it immediately goes to invoke {{allocateMoreChunks}} again.
This time it either succeeds or doesn't.
There is by definition no 'one last attempt' performed by any thread until it
has _itself_ witnessed {{MEMORY_USAGE_THRESHOLD}} being exceeded.
> 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: [email protected]
For additional commands, e-mail: [email protected]