Rich T created ARTEMIS-4399:
-------------------------------

             Summary: Authentication cache set to size 0 (i.e. disabled) is not 
threadsafe 
                 Key: ARTEMIS-4399
                 URL: https://issues.apache.org/jira/browse/ARTEMIS-4399
             Project: ActiveMQ Artemis
          Issue Type: Bug
    Affects Versions: 2.29.0
            Reporter: Rich T


To disable authentication cache you have to set the following config option:
{code:java}
setAuthenticationCacheSize(0){code}
SecurityStoreImpl then creates the following guava cache with maximumSize set 
to 0:
{code:java}
authenticationCache = CacheBuilder.newBuilder()
.maximumSize(authenticationCacheSize)
.expireAfterWrite(invalidationInterval, TimeUnit.MILLISECONDS)
.build();{code}
The way the guava LocalCache implementation works with maximumSize is that even 
with size 0 an entry is added but then is removed; this means that another 
thread can end up pulling an entry out of the cache before it is evicted; even 
though maximumSize is set to 0.

It has taken me some effort to track down this timing issue but the behaviour 
is also explained in the guava docs:
{code:java}
When size is zero, elements will be evicted immediately after being loaded into 
the cache. This can be useful in testing, or to disable caching temporarily 
without a code change.This feature cannot be used in conjunction with 
maximumWeight
{code}
Based on these findings no auth cache should be created at all when size 0 is 
requested.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to