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 <valentin.kuliche...@gmail.com> 
> написал(а):
> 
> 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 <dreamx....@gmail.com> 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.




Reply via email to