blob: a5d20751034283846227655fef81666ddb317988 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Apache.Ignite.Core.Compute
{
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Apache.Ignite.Core.Cluster;
/// <summary>
/// Defines Ignite functionality for executing tasks and closures over nodes
/// in the <see cref="IClusterGroup"/>. Instance of <see cref="ICompute"/>
/// is obtained from grid projection using <see cref="IClusterGroup.GetCompute"/> method.
/// <para />
/// Note that if attempt is made to execute a computation over an empty projection (i.e. projection that does
/// not have any alive nodes), <c>ClusterGroupEmptyException</c> will be thrown out of result task.
/// <para />
/// Ignite must select a node for a computation to be executed. The node will be selected based on the
/// underlying <c>GridLoadBalancingSpi</c>, which by default sequentially picks next available node from
/// grid projection. Other load balancing policies, such as <c>random</c> or <c>adaptive</c>, can be
/// configured as well by selecting different load balancing SPI in Ignite configuration. If your logic requires
/// some custom load balancing behavior, consider implementing <c>ComputeTask</c> in Java directly.
/// <para />
/// Ignite guarantees that as long as there is at least one Ignite node standing, every job will be
/// executed. Jobs will automatically failover to another node if a remote node crashed or has rejected
/// execution due to lack of resources. By default, in case of failover, next load balanced node will be
/// picked for job execution. Also jobs will never be re-routed to the nodes they have failed on. This
/// behavior can be changed by configuring any of the existing or a custom <c>FailoverSpi</c> in Ignite
/// configuration.
/// <para/>
/// All members are thread-safe and may be used concurrently from multiple threads.
/// </summary>
public interface ICompute
{
/// <summary>
/// Grid projection to which this compute instance belongs.
/// </summary>
IClusterGroup ClusterGroup { get; }
/// <summary>
/// Sets no-failover flag for the next executed task on this projection in the current thread.
/// If flag is set, job will be never failed over even if remote node crashes or rejects execution.
/// When task starts execution, the no-failover flag is reset, so all other task will use default
/// failover policy, unless this flag is set again.
/// </summary>
/// <returns>This compute instance for chaining calls.</returns>
ICompute WithNoFailover();
/// <summary>
/// Disables caching for the next executed task in the current thread.
/// </summary>
/// <returns>This compute instance for chaining calls.</returns>
ICompute WithNoResultCache();
/// <summary>
/// Sets task timeout for the next executed task on this projection in the current thread.
/// When task starts execution, the timeout is reset, so one timeout is used only once.
/// </summary>
/// <param name="timeout">Computation timeout in milliseconds.</param>
/// <returns>This compute instance for chaining calls.</returns>
ICompute WithTimeout(long timeout);
/// <summary>
/// Sets keep-binary flag for the next executed Java task on this projection in the current
/// thread so that task argument passed to Java and returned task results will not be
/// deserialized.
/// </summary>
/// <returns>This compute instance for chaining calls.</returns>
ICompute WithKeepBinary();
/// <summary>
/// Gets instance of the compute API associated with custom executor. All tasks and closures submitted to
/// returned instance will be processed by this executor on both remote and local nodes.
/// If an executor with the given name doesn't exist, task will be processed in default ("public") pool.
/// <para/>
/// Executor should be defined in <see cref="IgniteConfiguration.ExecutorConfiguration"/>.
/// </summary>
/// <param name="executorName">Executor name.</param>
/// <returns>New Compute instance associated with a custom executor.</returns>
ICompute WithExecutor(string executorName);
/// <summary>
/// Executes given Java task on the grid projection. If task for given name has not been deployed yet,
/// then 'taskName' will be used as task class name to auto-deploy the task.
/// </summary>
/// <param name="taskName">Java task name</param>
/// <param name="taskArg">Optional argument of task execution, can be null.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TRes">Type of task result.</typeparam>
TRes ExecuteJavaTask<TRes>(string taskName, object taskArg);
/// <summary>
/// Executes given Java task on the grid projection. If task for given name has not been deployed yet,
/// then 'taskName' will be used as task class name to auto-deploy the task.
/// </summary>
/// <param name="taskName">Java task name</param>
/// <param name="taskArg">Optional argument of task execution, can be null.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TRes">Type of task result.</typeparam>
Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg);
/// <summary>
/// Executes given Java task on the grid projection. If task for given name has not been deployed yet,
/// then 'taskName' will be used as task class name to auto-deploy the task.
/// </summary>
/// <typeparam name="TRes">Type of task result.</typeparam>
/// <param name="taskName">Java task name</param>
/// <param name="taskArg">Optional argument of task execution, can be null.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Task result.
/// </returns>
Task<TRes> ExecuteJavaTaskAsync<TRes>(string taskName, object taskArg, CancellationToken cancellationToken);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="task">Task to execute.</param>
/// <param name="taskArg">Optional task argument.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TArg">Argument type.</typeparam>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of final task result.</typeparam>
TRes Execute<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="task">Task to execute.</param>
/// <param name="taskArg">Optional task argument.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TArg">Argument type.</typeparam>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of final task result.</typeparam>
Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}" /> documentation.
/// </summary>
/// <typeparam name="TArg">Argument type.</typeparam>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of final task result.</typeparam>
/// <param name="task">Task to execute.</param>
/// <param name="taskArg">Optional task argument.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Task result.
/// </returns>
Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(IComputeTask<TArg, TJobRes, TRes> task, TArg taskArg,
CancellationToken cancellationToken);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="task">Task to execute.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
TRes Execute<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="task">Task to execute.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}" /> documentation.
/// </summary>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
/// <param name="task">Task to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Task result.
/// </returns>
Task<TRes> ExecuteAsync<TJobRes, TRes>(IComputeTask<TJobRes, TRes> task, CancellationToken cancellationToken);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="taskType">Task type.</param>
/// <param name="taskArg">Optional task argument.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TArg">Argument type.</typeparam>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
TRes Execute<TArg, TJobRes, TRes>(Type taskType, TArg taskArg);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="taskType">Task type.</param>
/// <param name="taskArg">Optional task argument.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TArg">Argument type.</typeparam>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}" /> documentation.
/// </summary>
/// <typeparam name="TArg">Argument type.</typeparam>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
/// <param name="taskType">Task type.</param>
/// <param name="taskArg">Optional task argument.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Task result.
/// </returns>
Task<TRes> ExecuteAsync<TArg, TJobRes, TRes>(Type taskType, TArg taskArg, CancellationToken cancellationToken);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="taskType">Task type.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
TRes Execute<TJobRes, TRes>(Type taskType);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}"/> documentation.
/// </summary>
/// <param name="taskType">Task type.</param>
/// <returns>Task result.</returns>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType);
/// <summary>
/// Executes given task on the grid projection. For step-by-step explanation of task execution process
/// refer to <see cref="IComputeTask{A,T,R}" /> documentation.
/// </summary>
/// <typeparam name="TJobRes">Type of job result.</typeparam>
/// <typeparam name="TRes">Type of reduce result.</typeparam>
/// <param name="taskType">Task type.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Task result.
/// </returns>
Task<TRes> ExecuteAsync<TJobRes, TRes>(Type taskType, CancellationToken cancellationToken);
/// <summary>
/// Executes provided job on a node in this grid projection. The result of the
/// job execution is returned from the result closure.
/// </summary>
/// <param name="clo">Job to execute.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
TRes Call<TRes>(IComputeFunc<TRes> clo);
/// <summary>
/// Executes provided job on a node in this grid projection. The result of the
/// job execution is returned from the result closure.
/// </summary>
/// <param name="clo">Job to execute.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo);
/// <summary>
/// Executes provided job on a node in this grid projection. The result of the
/// job execution is returned from the result closure.
/// </summary>
/// <typeparam name="TRes">Type of job result.</typeparam>
/// <param name="clo">Job to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Job result for this execution.
/// </returns>
Task<TRes> CallAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken);
/// <summary>
/// Executes given job on the node where data for provided affinity key is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheName">Name of the cache to use for affinity co-location.</param>
/// <param name="affinityKey">Affinity key.</param>
/// <param name="clo">Job to execute.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
TRes AffinityCall<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo);
/// <summary>
/// Executes given job on the node where data for provided affinity key is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheName">Name of the cache to use for affinity co-location.</param>
/// <param name="affinityKey">Affinity key.</param>
/// <param name="clo">Job to execute.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo);
/// <summary>
/// Executes given job on the node where data for provided affinity key is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <typeparam name="TRes">Type of job result.</typeparam>
/// <param name="cacheName">Name of the cache to use for affinity co-location.</param>
/// <param name="affinityKey">Affinity key.</param>
/// <param name="clo">Job to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Job result for this execution.
/// </returns>
Task<TRes> AffinityCallAsync<TRes>(string cacheName, object affinityKey, IComputeFunc<TRes> clo,
CancellationToken cancellationToken);
/// <summary>
/// Executes given job on the node where data for provided partition is located.
/// </summary>
/// <param name="cacheNames">Names of the caches to reserve the partition in.
/// The first cache is used for affinity co-location.</param>
/// <param name="partition">Partition number.</param>
/// <param name="func">Job to execute.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
TRes AffinityCall<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func);
/// <summary>
/// Executes given job on the node where data for provided partition is located.
/// </summary>
/// <param name="cacheNames">Names of the caches to reserve the partition in.
/// The first cache is used for affinity co-location.</param>
/// <param name="partition">Partition number.</param>
/// <param name="func">Job to execute.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<TRes> AffinityCallAsync<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func);
/// <summary>
/// Executes given job on the node where data for provided partition is located.
/// </summary>
/// <param name="cacheNames">Names of the caches to reserve the partition in.
/// The first cache is used for affinity co-location.</param>
/// <param name="partition">Partition number.</param>
/// <param name="func">Job to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<TRes> AffinityCallAsync<TRes>(IEnumerable<string> cacheNames, int partition, IComputeFunc<TRes> func,
CancellationToken cancellationToken);
/// <summary>
/// Executes collection of jobs on nodes within this grid projection.
/// </summary>
/// <param name="clos">Collection of jobs to execute.</param>
/// <param name="reducer">Reducer to reduce all job results into one individual return value.</param>
/// <returns>Reduced job result for this execution.</returns>
/// <typeparam name="TFuncRes">Type of function result.</typeparam>
/// <typeparam name="TRes">Type of result after reduce.</typeparam>
TRes Call<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos, IComputeReducer<TFuncRes, TRes> reducer);
/// <summary>
/// Executes collection of jobs on nodes within this grid projection.
/// </summary>
/// <param name="clos">Collection of jobs to execute.</param>
/// <param name="reducer">Reducer to reduce all job results into one individual return value.</param>
/// <returns>Reduced job result for this execution.</returns>
/// <typeparam name="TFuncRes">Type of function result.</typeparam>
/// <typeparam name="TRes">Type of result after reduce.</typeparam>
Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos,
IComputeReducer<TFuncRes, TRes> reducer);
/// <summary>
/// Executes collection of jobs on nodes within this grid projection.
/// </summary>
/// <typeparam name="TFuncRes">Type of function result.</typeparam>
/// <typeparam name="TRes">Type of result after reduce.</typeparam>
/// <param name="clos">Collection of jobs to execute.</param>
/// <param name="reducer">Reducer to reduce all job results into one individual return value.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Reduced job result for this execution.
/// </returns>
Task<TRes> CallAsync<TFuncRes, TRes>(IEnumerable<IComputeFunc<TFuncRes>> clos,
IComputeReducer<TFuncRes, TRes> reducer, CancellationToken cancellationToken);
/// <summary>
/// Executes collection of jobs on nodes within this grid projection.
/// </summary>
/// <param name="clos">Collection of jobs to execute.</param>
/// <returns>Collection of job results for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
ICollection<TRes> Call<TRes>(IEnumerable<IComputeFunc<TRes>> clos);
/// <summary>
/// Executes collection of jobs on nodes within this grid projection.
/// </summary>
/// <param name="clos">Collection of jobs to execute.</param>
/// <returns>Collection of job results for this execution.</returns>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos);
/// <summary>
/// Executes collection of jobs on nodes within this grid projection.
/// </summary>
/// <typeparam name="TRes">Type of job result.</typeparam>
/// <param name="clos">Collection of jobs to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Collection of job results for this execution.
/// </returns>
Task<ICollection<TRes>> CallAsync<TRes>(IEnumerable<IComputeFunc<TRes>> clos,
CancellationToken cancellationToken);
/// <summary>
/// Broadcasts given job to all nodes in grid projection. Every participating node will return a job result.
/// </summary>
/// <param name="clo">Job to broadcast to all projection nodes.</param>
/// <returns>Collection of results for this execution.</returns>
ICollection<TRes> Broadcast<TRes>(IComputeFunc<TRes> clo);
/// <summary>
/// Broadcasts given job to all nodes in grid projection. Every participating node will return a job result.
/// </summary>
/// <param name="clo">Job to broadcast to all projection nodes.</param>
/// <returns>Collection of results for this execution.</returns>
Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo);
/// <summary>
/// Broadcasts given job to all nodes in grid projection. Every participating node will return a job result.
/// </summary>
/// <typeparam name="TRes">The type of the resource.</typeparam>
/// <param name="clo">Job to broadcast to all projection nodes.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Collection of results for this execution.
/// </returns>
Task<ICollection<TRes>> BroadcastAsync<TRes>(IComputeFunc<TRes> clo, CancellationToken cancellationToken);
/// <summary>
/// Broadcasts given closure job with passed in argument to all nodes in grid projection.
/// Every participating node will return a job result.
/// </summary>
/// <param name="clo">Job to broadcast to all projection nodes.</param>
/// <param name="arg">Job closure argument.</param>
/// <returns>Collection of results for this execution.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
ICollection<TRes> Broadcast<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg);
/// <summary>
/// Broadcasts given closure job with passed in argument to all nodes in grid projection.
/// Every participating node will return a job result.
/// </summary>
/// <param name="clo">Job to broadcast to all projection nodes.</param>
/// <param name="arg">Job closure argument.</param>
/// <returns>Collection of results for this execution.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg);
/// <summary>
/// Broadcasts given closure job with passed in argument to all nodes in grid projection.
/// Every participating node will return a job result.
/// </summary>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
/// <param name="clo">Job to broadcast to all projection nodes.</param>
/// <param name="arg">Job closure argument.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Collection of results for this execution.
/// </returns>
Task<ICollection<TRes>> BroadcastAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg,
CancellationToken cancellationToken);
/// <summary>
/// Broadcasts given job to all nodes in grid projection.
/// </summary>
/// <param name="action">Job to broadcast to all projection nodes.</param>
void Broadcast(IComputeAction action);
/// <summary>
/// Broadcasts given job to all nodes in grid projection.
/// </summary>
/// <param name="action">Job to broadcast to all projection nodes.</param>
Task BroadcastAsync(IComputeAction action);
/// <summary>
/// Broadcasts given job to all nodes in grid projection.
/// </summary>
/// <param name="action">Job to broadcast to all projection nodes.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
Task BroadcastAsync(IComputeAction action, CancellationToken cancellationToken);
/// <summary>
/// Executes provided job on a node in this grid projection.
/// </summary>
/// <param name="action">Job to execute.</param>
void Run(IComputeAction action);
/// <summary>
/// Executes provided job on a node in this grid projection.
/// </summary>
/// <param name="action">Job to execute.</param>
Task RunAsync(IComputeAction action);
/// <summary>
/// Executes provided job on a node in this grid projection.
/// </summary>
/// <param name="action">Job to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
Task RunAsync(IComputeAction action, CancellationToken cancellationToken);
/// <summary>
/// Executes given job on the node where data for provided affinity key is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheName">Name of the cache to use for affinity co-location.</param>
/// <param name="affinityKey">Affinity key.</param>
/// <param name="action">Job to execute.</param>
void AffinityRun(string cacheName, object affinityKey, IComputeAction action);
/// <summary>
/// Executes given job on the node where data for provided affinity key is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheName">Name of the cache to use for affinity co-location.</param>
/// <param name="affinityKey">Affinity key.</param>
/// <param name="action">Job to execute.</param>
Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action);
/// <summary>
/// Executes given job on the node where data for provided affinity key is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheName">Name of the cache to use for affinity co-location.</param>
/// <param name="affinityKey">Affinity key.</param>
/// <param name="action">Job to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
Task AffinityRunAsync(string cacheName, object affinityKey, IComputeAction action,
CancellationToken cancellationToken);
/// <summary>
/// Executes given job on the node where data for provided partition is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheNames">Names of the caches to reserve the partition in.
/// The first cache is used for affinity co-location.</param>
/// <param name="partition">Partition number.</param>
/// <param name="action">Job to execute.</param>
void AffinityRun(IEnumerable<string> cacheNames, int partition, IComputeAction action);
/// <summary>
/// Executes given job on the node where data for provided partition is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheNames">Names of the caches to reserve the partition in.
/// The first cache is used for affinity co-location.</param>
/// <param name="partition">Partition number.</param>
/// <param name="action">Job to execute.</param>
Task AffinityRunAsync(IEnumerable<string> cacheNames, int partition, IComputeAction action);
/// <summary>
/// Executes given job on the node where data for provided partition is located
/// (a.k.a. affinity co-location).
/// </summary>
/// <param name="cacheNames">Names of the caches to reserve the partition in.
/// The first cache is used for affinity co-location.</param>
/// <param name="partition">Partition number.</param>
/// <param name="action">Job to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
Task AffinityRunAsync(IEnumerable<string> cacheNames, int partition, IComputeAction action,
CancellationToken cancellationToken);
/// <summary>
/// Executes collection of jobs on Ignite nodes within this grid projection.
/// </summary>
/// <param name="actions">Jobs to execute.</param>
void Run(IEnumerable<IComputeAction> actions);
/// <summary>
/// Executes collection of jobs on Ignite nodes within this grid projection.
/// </summary>
/// <param name="actions">Jobs to execute.</param>
Task RunAsync(IEnumerable<IComputeAction> actions);
/// <summary>
/// Executes collection of jobs on Ignite nodes within this grid projection.
/// </summary>
/// <param name="actions">Jobs to execute.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
Task RunAsync(IEnumerable<IComputeAction> actions, CancellationToken cancellationToken);
/// <summary>
/// Executes provided closure job on a node in this grid projection.
/// </summary>
/// <param name="clo">Job to run.</param>
/// <param name="arg">Job argument.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
TRes Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg);
/// <summary>
/// Executes provided closure job on a node in this grid projection.
/// </summary>
/// <param name="clo">Job to run.</param>
/// <param name="arg">Job argument.</param>
/// <returns>Job result for this execution.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg);
/// <summary>
/// Executes provided closure job on a node in this grid projection.
/// </summary>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
/// <param name="clo">Job to run.</param>
/// <param name="arg">Job argument.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Job result for this execution.
/// </returns>
Task<TRes> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, TArg arg, CancellationToken cancellationToken);
/// <summary>
/// Executes provided closure job on nodes within this grid projection. A new job is executed for
/// every argument in the passed in collection. The number of actual job executions will be
/// equal to size of the job arguments collection.
/// </summary>
/// <param name="clo">Job to run.</param>
/// <param name="args">Job arguments.</param>
/// <returns>Collection of job results.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
ICollection<TRes> Apply<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args);
/// <summary>
/// Executes provided closure job on nodes within this grid projection. A new job is executed for
/// every argument in the passed in collection. The number of actual job executions will be
/// equal to size of the job arguments collection.
/// </summary>
/// <param name="clo">Job to run.</param>
/// <param name="args">Job arguments.</param>
/// <returns>Collection of job results.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args);
/// <summary>
/// Executes provided closure job on nodes within this grid projection. A new job is executed for
/// every argument in the passed in collection. The number of actual job executions will be
/// equal to size of the job arguments collection.
/// </summary>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TRes">Type of job result.</typeparam>
/// <param name="clo">Job to run.</param>
/// <param name="args">Job arguments.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Collection of job results.
/// </returns>
Task<ICollection<TRes>> ApplyAsync<TArg, TRes>(IComputeFunc<TArg, TRes> clo, IEnumerable<TArg> args,
CancellationToken cancellationToken);
/// <summary>
/// Executes provided closure job on nodes within this grid projection. A new job is executed for
/// every argument in the passed in collection. The number of actual job executions will be
/// equal to size of the job arguments collection. The returned job results will be reduced
/// into an individual result by provided reducer.
/// </summary>
/// <param name="clo">Job to run.</param>
/// <param name="args">Job arguments.</param>
/// <param name="rdc">Reducer to reduce all job results into one individual return value.</param>
/// <returns>Reduced job result for this execution.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TFuncRes">Type of function result.</typeparam>
/// <typeparam name="TRes">Type of result after reduce.</typeparam>
TRes Apply<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args,
IComputeReducer<TFuncRes, TRes> rdc);
/// <summary>
/// Executes provided closure job on nodes within this grid projection. A new job is executed for
/// every argument in the passed in collection. The number of actual job executions will be
/// equal to size of the job arguments collection. The returned job results will be reduced
/// into an individual result by provided reducer.
/// </summary>
/// <param name="clo">Job to run.</param>
/// <param name="args">Job arguments.</param>
/// <param name="rdc">Reducer to reduce all job results into one individual return value.</param>
/// <returns>Reduced job result for this execution.</returns>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TFuncRes">Type of function result.</typeparam>
/// <typeparam name="TRes">Type of result after reduce.</typeparam>
Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args,
IComputeReducer<TFuncRes, TRes> rdc);
/// <summary>
/// Executes provided closure job on nodes within this grid projection. A new job is executed for
/// every argument in the passed in collection. The number of actual job executions will be
/// equal to size of the job arguments collection. The returned job results will be reduced
/// into an individual result by provided reducer.
/// </summary>
/// <typeparam name="TArg">Type of argument.</typeparam>
/// <typeparam name="TFuncRes">Type of function result.</typeparam>
/// <typeparam name="TRes">Type of result after reduce.</typeparam>
/// <param name="clo">Job to run.</param>
/// <param name="args">Job arguments.</param>
/// <param name="rdc">Reducer to reduce all job results into one individual return value.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>
/// Reduced job result for this execution.
/// </returns>
Task<TRes> ApplyAsync<TArg, TFuncRes, TRes>(IComputeFunc<TArg, TFuncRes> clo, IEnumerable<TArg> args,
IComputeReducer<TFuncRes, TRes> rdc, CancellationToken cancellationToken);
}
}