[ 
https://issues.apache.org/jira/browse/CASSANDRA-8897?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14504758#comment-14504758
 ] 

Stefania commented on CASSANDRA-8897:
-------------------------------------

Hi [~benedict] thank you for your review. I'm almost done with the updated 
version, I just have a few questions:

- Are the logging gards something we always use for trace and debug or is there 
really a big benefit when logging only with parametrized strings and no 
function calls?

- I did not understand your comment here:

{code}
    ByteBuffer page = chunk.get(BUFFER_SIZE);
    if (page.capacity() >= BUFFER_SIZE)
        buffers.add(page);
    else
        // this can occur under normal operation, if the chunk allocation is 
aligned, since we will have
        // a single page spare at the end, and our microchunks are multiple 
pages
        logger.error("Discarding page with smaller capacity {}, expected {} 
bytes", page.capacity(), BUFFER_SIZE);
{code}

How is this possible since {Allocator.allocateAligned()} limits the byte buffer 
to the exact capacity requested,
which is an exact multiple of the microchunks size (BUFFER_SIZE). The existing 
utests do not hit this code path, 
any suggestions on how to hit this code path?

- Can you elaborate a bit more on the CAS integer update part, at the end of 
this comment here:

{code}
 // instead of any ugliness with getAddress() (which seems brittle, if we 
somehow grab the wrong value or slice weirdly)
 // we can abuse the ByteBuffer internals; the internal "attachment" property 
in DBBs point to the parent buffer of a slice
 // to ensure GC of the parent doesn't occur before the child, and hence free 
the native memory. We don't need this,
 // but either way we can instead point to our Chunk object (which points to 
our Chunk ByteBuffer), so that we can
 // directly lookup the Chunk we need to maintain. The main added advantage of 
this is that we can also detect if
 // the chunk is not assigned to this thread, by assigning the Chunk the 
current local pool on adoption, and confirming
 // we are operating on that exact pool now. ****We can then have a separate 
integer variable we perform a CAS update on
 // only in this scenario, so that we can safely recover from the mistake****, 
and we log some panic warnings. Or we can just
 // log the panic warnings for now.
{code}

Did you mean to have one thread unallocate the buffer from another thread pool 
or take over the entire pool or other?


BTW, the '=' in allocateChunk() was definitely a mistake, thanks for spotting 
it and getting rid of the rollback, which was ugly.


> 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.0
>
>
> 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)

Reply via email to