[ 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)