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

Dmitriy Setrakyan edited comment on IGNITE-3222 at 6/2/16 4:04 PM:
-------------------------------------------------------------------

_> But dealing with partitions manually is also error-prone and not obvious at 
all. Invoke over all cache entries is a simple common task, why not provide a 
simple method of doing it?_

I don't think it is a common task at all. On top of that, if partition-based 
affinityCall/Run can achieve the same goal, I don't see a need for an 
additional API that can do the same thing. I am also, generally, against having 
methods that can potentially return the whole cache to the client side.

_> What kind of memory issues do you expect? Returning EntryProcessorResult for 
each entry on a huge cache is an obvious problem, same as calling getAll on 
QueryCursor, for example. We can't protect users from such things._

It is not the same as {{getAll(..)}} on {{QueryCursor}}, because the cursor 
offers a paginated result by default and user must take a deliberate action to 
suck all the results at ones. In your case the whole result set is returned all 
the time, which will certainly cause memory issues. To do this right, we have 
to paginate the result, which will complicate the API and the overall 
implementation of this task.


was (Author: dsetrakyan):
_> But dealing with partitions manually is also error-prone and not obvious at 
all. Invoke over all cache entries is a simple common task, why not provide a 
simple method of doing it?_

I don't think it is a common task at all. On top of that, if partition-based 
affinityCall/Run can achieve the same goal, I don't see a need for an 
additional API that can do the same thing. I am also, generally, against having 
methods that can potentially return the whole cache to the client side.

_> What kind of memory issues do you expect? Returning EntryProcessorResult for 
each entry on a huge cache is an obvious problem, same as calling getAll on 
QueryCursor, for example. We can't protect users from such things._

It is not the same as {{getAll(..)}}. User must pass the keys into 
{{getAll(...)}} method and is aware how many entries will be returned. In this 
case, you can get millions of entries back, which will certainly cause memory 
issues. To do this right, we have to paginate the result, which will complicate 
the API and the overall implementation of this task.

> IgniteCache.invokeAll for all cache entries
> -------------------------------------------
>
>                 Key: IGNITE-3222
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3222
>             Project: Ignite
>          Issue Type: Task
>          Components: cache
>    Affects Versions: 1.1.4
>            Reporter: Pavel Tupitsyn
>             Fix For: 1.7
>
>
> Implement an invokeAll overload that processes all cache keys (not some 
> specific set).
> Proposed signature:
> {code}
> public void invokeAll(CacheEntryProcessor<K, V, T> entryProcessor, Object... 
> args);
> public <T> Map<K, EntryProcessorResult<T>> invokeAll(CacheEntryProcessor<K, 
> V, T> entryProcessor, boolean returnAffectedOnly, Object... args);
> {code}
> This will apply the specified processor to all cache entries.
> First method does not return anything.
> Second method either returns all results for all entries, or only for entries 
> that have been changed by the processor in any way.



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

Reply via email to