Michał Michalski created CASSANDRA-6768:
-------------------------------------------

             Summary: Refresh permissions cache in ClientState periodically to 
avoid cache miss stampede effect
                 Key: CASSANDRA-6768
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6768
             Project: Cassandra
          Issue Type: Improvement
            Reporter: Michał Michalski
            Assignee: Aleksey Yeschenko


h3. Background

We want to password-protect Cassandra by using the built-in 
PasswordAuthenticator and PasswordAuthorizer. In general we are happy with this 
solution, but after reviewing the code we're a bit afraid of default  
permissionsCache behaviour in org.apache.cassandra.service.ClientState.

h3. Problem

>From what I understand, at the moment cache expires every N seconds (2 by 
>default) and it gets repopulated when permissionsCache.get() is being  called. 
>However, as we're talking about at least a few hundreds requests to Cassandra 
>per second, we're afraid of the "stampede" effect once the cache expires and a 
>number of queries will "trigger" its reload simultaneously during the short 
>period of time when it will be empty.

h3. Proposed Solution

Therefore, instead of the current solution, we'd prefer this cache to be 
reloaded "in background" every N seconds, so it's only a single request every N 
seconds, rather than tens (hundreds?) of them just after the cache expires 
during the period when it's empty.

In other words, we're thinking about replacing this:

{code}expireAfterWrite(validityPeriod, TimeUnit.MILLISECONDS){code}

with:

{code}refreshAfterWrite(refreshPeriod, TimeUnit.MILLISECONDS){code}

Default refreshPeriod could be the same as the validityPeriod, for example.

Are there any reasons that make this idea a bad one ("you misunderstood Guava's 
Cache" counts too!)?

[~iamaleksey], I've let myself to assign this issue directly to you, as you're 
the author of current solution.



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to