You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Michał Michalski (JIRA)" <ji...@apache.org> on 2014/02/25 17:44:19 UTC

[jira] [Created] (CASSANDRA-6768) Refresh permissions cache in ClientState periodically to avoid cache miss stampede effect

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)