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

Benedict commented on CASSANDRA-7438:
-------------------------------------

bq. I am 100% sure

Never be 100% sure with concurrency, please :)

bq. test case again plz. I don't think this can happen too. I spend a lot of 
time testing the exact scenario.

You have too much faith in tests. You are testing under ideal conditions - two 
of the race conditions I highlighted will only rear their heads infrequently, 
most likely when the system is under uncharacteristic load causing very choppy 
scheduling. Analysis of the code is paramount. I will not produce a test case 
as I do not have time, however I will give you an interleaving of events that 
would trigger one of them.

Thread A is deleting an item, and is in LRUC.invalidate(), Thread B is looking 
up the same item, in LRUC.get().
A: 187: map.remove()
B: 154 :map.get()
A: 191: queue.deleteFromQueue()
B: 158: queue.addToQueue()

In particular, addToQueue() sets the markAsDeleted flag to false, undoing the 
prior work of deleteFromQueue.

bq. Thread is only signalled if they are not performing operation. I am lost.

It will generally not be performing an operation, because its work will be 
faster than any of the producers can produce work in normal C* operation.

> Serializing Row cache alternative (Fully off heap)
> --------------------------------------------------
>
>                 Key: CASSANDRA-7438
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7438
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Core
>         Environment: Linux
>            Reporter: Vijay
>            Assignee: Vijay
>              Labels: performance
>             Fix For: 3.0
>
>         Attachments: 0001-CASSANDRA-7438.patch, tests.zip
>
>
> Currently SerializingCache is partially off heap, keys are still stored in 
> JVM heap as BB, 
> * There is a higher GC costs for a reasonably big cache.
> * Some users have used the row cache efficiently in production for better 
> results, but this requires careful tunning.
> * Overhead in Memory for the cache entries are relatively high.
> So the proposal for this ticket is to move the LRU cache logic completely off 
> heap and use JNI to interact with cache. We might want to ensure that the new 
> implementation match the existing API's (ICache), and the implementation 
> needs to have safe memory access, low overhead in memory and less memcpy's 
> (As much as possible).
> We might also want to make this cache configurable.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to