[
https://issues.apache.org/jira/browse/CASSANDRA-8897?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14558959#comment-14558959
]
Stefania commented on CASSANDRA-8897:
-------------------------------------
[~benedict] I resumed work on this today. A few questions:
- Your latest suggestions have reverted this:
bq. We could consider making the chunks available for reallocation before they
are fully free, since there's no different between a partially or fully free
chunk now for allocation purposes
Also the chunks are not recycled right now because the owner is not null but I
can add this.
- The cas on the buffer attachment is to protect against two threads
simultaneously freeing the same buffer. Without it we have two unit tests that
trigger the assertion in free(): testMultipleThreadsReleaseDifferentBuffer()
and testMultipleThreadsReleaseSameBuffer(). Shall I remove the unit tests and
accept we have a race or restore the cas?
- The burn test reports this sort of errors with {{if (index == 64)}} in get():
{code}
ERROR 09:29:40 Got exception null, latest size 21241, current chunk [slab
java.nio.DirectByteBuffer[pos=0 lim=27068 cap=65536], slots bitmap
11101111111111111000000000000000000000000000, capacity 65536, free 16384]
java.lang.IllegalArgumentException
at java.nio.Buffer.limit(Buffer.java:275)
at
org.apache.cassandra.utils.memory.BufferPool$Chunk.get(BufferPool.java:604)
at
org.apache.cassandra.utils.memory.BufferPool$Chunk.get(BufferPool.java:597)
at
org.apache.cassandra.utils.memory.BufferPool$LocalPool.get(BufferPool.java:309)
at
org.apache.cassandra.utils.memory.BufferPool.takeFromPool(BufferPool.java:102)
at org.apache.cassandra.utils.memory.BufferPool.get(BufferPool.java:76)
at
org.apache.cassandra.utils.memory.LongBufferPoolTest$1.call(LongBufferPoolTest.java:111)
at
org.apache.cassandra.utils.memory.LongBufferPoolTest$1.call(LongBufferPoolTest.java:73)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
{code}
> Remove FileCacheService, instead pooling the buffers
> ----------------------------------------------------
>
> Key: CASSANDRA-8897
> URL: https://issues.apache.org/jira/browse/CASSANDRA-8897
> Project: Cassandra
> Issue Type: Improvement
> Components: Core
> Reporter: Benedict
> Assignee: Stefania
> Fix For: 3.x
>
> Attachments: 9240_test_results.txt,
> snapshot-1431582436640-cpu-backtraces.png,
> snapshot-1431582436640-cpu-calltree-compression-8897.nps,
> snapshot-1431582436640-cpu-calltree-compression-trunk.nps
>
>
> After CASSANDRA-8893, a RAR will be a very lightweight object and will not
> need caching, so we can eliminate this cache entirely. Instead we should have
> a pool of buffers that are page-aligned.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)