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

Pavel Yaskevich edited comment on CASSANDRA-6689 at 3/3/14 11:15 PM:
---------------------------------------------------------------------

I read through most of the code in offheap1b skipping queue implementations add 
there and I have couple of questions:

I see this pattern in the code (e.g. (RangeSlice, Read)VerbHandler.java) where 
{noformat}
    r = Referrer(); 
    try { operation(); r = null } 
    finally { if (r != null) r.setDone(); } 
{noformat}
 where documentation says that that setDone() should be called when we are done 
with the referrer, can you elaborate why do we need to explicitly set it to 
null?

Pool.java - can we schedule cleaners to a static thread pool (or something 
similar) instead of creating a thread per cleaner? With would add more control 
in the situation when we flush memtables in short intervals. Related question, 
why can't we have per-cf (or global) pool instead of creating it per memtable, 
might be possible to remove allocator groups if we do that?

Also I just want to throw an idea here maybe there is something useful in it - 
as we have fixed number of stages and threads in them and don't normally share 
much between them, maybe it would be possible to use that as an advantage for 
allocator gc? What I mean is, it might be possible to track life-time of the 
allocation not by how buffer was allocated but where it was allocated, more 
like what RCU...


was (Author: xedin):
I read through most of the code in offheap1b skipping queue implementations add 
there and I have couple of questions:

I see this pattern in the code (e.g. {RangeSlice, Read}VerbHandler.java) where 
Referrer is allocated try { operation(); referrer = null } finally { 
referrer.setDone() if (referrer != null); } where documentation says that that 
setDone() should be called when we are done with the referrer, can you 
elaborate why do we need to explicitly set it to null?

Pool.java - can we schedule cleaners to a static thread pool (or something 
similar) instead of creating a thread per cleaner? With would add more control 
in the situation when we flush memtables in short intervals. Related question, 
why can't we have per-cf (or global) pool instead of creating it per memtable, 
might be possible to remove allocator groups if we do that?

Also I just want to throw an idea here maybe there is something useful in it - 
as we have fixed number of stages and threads in them and don't normally share 
much between them, maybe it would be possible to use that as an advantage for 
allocator gc? What I mean is, it might be possible to track life-time of the 
allocation not by how buffer was allocated but where it was allocated, more 
like what RCU...

> Partially Off Heap Memtables
> ----------------------------
>
>                 Key: CASSANDRA-6689
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6689
>             Project: Cassandra
>          Issue Type: New Feature
>          Components: Core
>            Reporter: Benedict
>            Assignee: Benedict
>             Fix For: 2.1 beta2
>
>
> Move the contents of ByteBuffers off-heap for records written to a memtable.
> (See comments for details)



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to