Valentin,
The author of tiket wants to see to provide some API allows to map ComputeJobs
to partitions or keys. If we use @AffinityKeyMapped then you need to enter the
cache name parameter, I think this is not convenient for the user. Therefore, I
propose to extend the existing API.
Having consulted with Anton V. decided to make a separate interface
ReducibleTask, which will allow us to have different map logic at each
inheritor.
Old method, allows to map to node
public interface ComputeTask<T, R> extends ReducibleTask<R> {
@Nullable public Map<? extends ComputeJob, ClusterNode>
map(List<ClusterNode> subgrid, @Nullable T arg) throws IgniteException;
}
Brand new method with mapping to partitions, which solves topology change
issues.
public interface AffinityComputeTask<T, R> extends ReducibleTask<R> {
@Nullable public Map<? extends ComputeJob, Integer> map(@NotnullString
cacheName, List<Integer> partIds, @Nullable T arg) throws IgniteException;
}
public interface ReducibleTask<R> extends Serializable {
public ComputeJobResultPolicy result(ComputeJobResult res,
List<ComputeJobResult> rcvd) throws IgniteException;
@Nullable public R reduce(List<ComputeJobResult> results) throws
IgniteException;
}
We also need to implement AffinityComputeTaskAdapter and
AffinityComputeTaskSplitAdapter, for implementation by default. It is right?
In the IgniteCompute add:
@IgniteAsyncSupported
public <T, R> R affinityExecute(Class<? extends AffinityComputeTask<T, R>>
taskCls, List<Integer> partIds, @Nullable T arg) throws IgniteException;
@IgniteAsyncSupported
public <T, R> R affinityExecute(AffinityComputeTask<T, R> task, List<Integer>
partIds, @Nullable T arg) throws IgniteException;
public <T, R> ComputeTaskFuture<R> affinityExecuteAsync(Class<? extends
AffinityComputeTask<T, R>> taskCls, List<Integer> partIds, @Nullable T arg)
throws IgniteException;
public <T, R> ComputeTaskFuture<R> affinityExecuteAsync(AffinityComputeTask<T,
R> task, List<Integer> partIds, @Nullable T arg) throws IgniteException;
How do you like this idea or do you insist that you need to use
@AffinityKeyMapped to solve the problem?
> 13 июля 2017 г., в 6:36, Valentin Kulichenko <[email protected]>
> написал(а):
>
> Hi Max,
>
> This ticket doesn't assume any API changes, it's about broken
> functionality. I would start with checking what tests we have
> for @AffinityKeyMapped and creating missing one. From what I understand
> functionality is broken completely or almost completely, so I guess testing
> coverage is very weak there.
>
> -Val
>
> On Wed, Jul 12, 2017 at 4:27 PM, Kozlov Maxim <[email protected]> wrote:
>
>> Igniters,
>>
>> jira: https://issues.apache.org/jira/browse/IGNITE-5037 <
>> https://issues.apache.org/jira/browse/IGNITE-5037>
>> How do you look to solve this ticket by adding two methods to the public
>> IgniteCompute API?
>>
>> @IgniteAsyncSupported
>> public void affinityRun(@NotNull Collection<String> cacheNames,
>> Collection<Object> keys, IgniteRunnable job)
>> throws IgniteException;
>>
>> @IgniteAsyncSupported
>> public <R> R affinityCall(@NotNull Collection<String> cacheNames,
>> Collection<Object> keys, IgniteCallable<R> job)
>> throws IgniteException;
>>
>> There is also a question of how to act when changing the topology during
>> the execution of the job.
>> 1) complete with an exception;
>> 2) stop execution and wait until the topology is rebuilt and continue
>> execution;
>>
>> I think the second way, do you think?
>>
>> --
>> Best Regards,
>> Max K.
>>
>>
>>
>>
>>
--
Best Regards,
Max K.