[infinispan-issues] [JBoss JIRA] (ISPN-6279) Refactor CacheLoader API to make it thread safe
Sebastian Łaskawiec (JIRA)
issues at jboss.org
Fri Feb 26 09:44:00 EST 2016
[ https://issues.jboss.org/browse/ISPN-6279?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sebastian Łaskawiec updated ISPN-6279:
--------------------------------------
Description:
h3. Introduction
Currently {{CacheLoader}} thread safety can be easily compromised by broken implementations. We should provide a better implementation to make it more convenient and less error prone.
h3. Problem statement
CacheLoader API looks like this:
{code}
public interface AdvancedCacheLoader<K, V> extends CacheLoader<K, V> {
...
void process(KeyFilter<? super K> filter, CacheLoaderTask<K, V> task, Executor executor, boolean fetchValue, boolean fetchMetadata);
...
}
{code}
The CacheLoader implementation controls {{CacheLoaderTask}} as well as the number of threads used for processing (specified by {{Executor}}). If one wants to collect all keys (similarly to [AdvancedCacheLoader|https://github.com/infinispan/infinispan/blob/master/core/src/main/java/org/infinispan/persistence/spi/AdvancedCacheLoader.java]) it is very easy to hit concurrently issues while adding them to the set (See previous JIRAs: ISPN-3938 and ISPN-6276).
h3. Solution
The solution should take away currently control (Executor) and keyset (the simplest idea is to add it to {{CacheLoaderTask}}) from from the implementation. One of the ideas is to create a Lambda expression for pulling records from Cache Store. Note that similar changes will need to be performed to {{CacheWriter}} (to make it similar).
was:
Currently the CacheLoader thread safety can be easily compromised by broken implementations.
CacheLoader API looks like this:
{code}
void process(KeyFilter<? super K> filter, CacheLoaderTask<K, V> task, Executor executor, boolean fetchValue, boolean fetchMetadata);
{code}
The CacheLoader implementation controls {{CacheLoaderTask}} as well as the number of threads (specified by {{Executor}}). If one wants to collect keys (similarly to [AdvancedCacheLoader|https://github.com/infinispan/infinispan/blob/master/core/src/main/java/org/infinispan/persistence/spi/AdvancedCacheLoader.java]) it is very easy to hit concurrently issues while adding new entries to the set (See previous JIRAs: ISPN-3938 and ISPN-6276).
The solution should take away the control of both concurrently (Executor) and keyset (the simplest idea is to add it to {{CacheLoaderTask}}) from user. However there are other (better) ideas like allowing CacheLoader implementations to specify Lambda expression for loading entries
> Refactor CacheLoader API to make it thread safe
> -----------------------------------------------
>
> Key: ISPN-6279
> URL: https://issues.jboss.org/browse/ISPN-6279
> Project: Infinispan
> Issue Type: Feature Request
> Components: Loaders and Stores
> Reporter: Sebastian Łaskawiec
> Priority: Minor
> Fix For: 9.0.0.Final
>
>
> h3. Introduction
> Currently {{CacheLoader}} thread safety can be easily compromised by broken implementations. We should provide a better implementation to make it more convenient and less error prone.
> h3. Problem statement
> CacheLoader API looks like this:
> {code}
> public interface AdvancedCacheLoader<K, V> extends CacheLoader<K, V> {
> ...
> void process(KeyFilter<? super K> filter, CacheLoaderTask<K, V> task, Executor executor, boolean fetchValue, boolean fetchMetadata);
> ...
> }
> {code}
> The CacheLoader implementation controls {{CacheLoaderTask}} as well as the number of threads used for processing (specified by {{Executor}}). If one wants to collect all keys (similarly to [AdvancedCacheLoader|https://github.com/infinispan/infinispan/blob/master/core/src/main/java/org/infinispan/persistence/spi/AdvancedCacheLoader.java]) it is very easy to hit concurrently issues while adding them to the set (See previous JIRAs: ISPN-3938 and ISPN-6276).
> h3. Solution
> The solution should take away currently control (Executor) and keyset (the simplest idea is to add it to {{CacheLoaderTask}}) from from the implementation. One of the ideas is to create a Lambda expression for pulling records from Cache Store. Note that similar changes will need to be performed to {{CacheWriter}} (to make it similar).
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
More information about the infinispan-issues
mailing list