<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<link rel="canonical" href="https://ignite.apache.org/releases/2.6.0/javadoc/org/apache/ignite/compute/ComputeTask.html" />
<META NAME="ROBOTS" CONTENT="NOINDEX">

<!-- Generated by javadoc (1.8.0_77) on Tue Jul 10 11:04:40 UTC 2018 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ComputeTask (Ignite 2.6.0)</title>
<meta name="date" content="2018-07-10">
<link rel="stylesheet" type="text/css" href="../../../../javadoc.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-61232409-1', 'auto');
  ga('send', 'pageview');

</script></head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="ComputeTask (Ignite 2.6.0)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":6,"i1":6,"i2":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ComputeTask.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage">Ignite - In-Memory Data Fabric</div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/ignite/compute/ComputeLoadBalancer.html" title="interface in org.apache.ignite.compute"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/ignite/compute/ComputeTask.html" target="_top">Frames</a></li>
<li><a href="ComputeTask.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.ignite.compute</div>
<h2 title="Interface ComputeTask" class="title">Interface ComputeTask&lt;T,R&gt;</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Type of the task argument that is passed into <a href="../../../../org/apache/ignite/compute/ComputeTask.html#map-java.util.List-T-"><code>map(List, Object)</code></a> method.</dd>
<dd><code>R</code> - Type of the task result returning from <a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce-java.util.List-"><code>reduce(List)</code></a> method.</dd>
</dl>
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute">ComputeTaskAdapter</a>, <a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="class in org.apache.ignite.compute">ComputeTaskSplitAdapter</a>, <a href="../../../../org/apache/ignite/ml/genetic/CrossOverTask.html" title="class in org.apache.ignite.ml.genetic">CrossOverTask</a>, <a href="../../../../org/apache/ignite/ml/genetic/FitnessTask.html" title="class in org.apache.ignite.ml.genetic">FitnessTask</a>, <a href="../../../../org/apache/ignite/compute/gridify/aop/GridifyDefaultRangeTask.html" title="class in org.apache.ignite.compute.gridify.aop">GridifyDefaultRangeTask</a>, <a href="../../../../org/apache/ignite/compute/gridify/aop/GridifyDefaultTask.html" title="class in org.apache.ignite.compute.gridify.aop">GridifyDefaultTask</a>, <a href="../../../../org/apache/ignite/compute/gridify/GridifyTaskAdapter.html" title="class in org.apache.ignite.compute.gridify">GridifyTaskAdapter</a>, <a href="../../../../org/apache/ignite/compute/gridify/GridifyTaskSplitAdapter.html" title="class in org.apache.ignite.compute.gridify">GridifyTaskSplitAdapter</a>, <a href="../../../../org/apache/ignite/igfs/mapreduce/IgfsTask.html" title="class in org.apache.ignite.igfs.mapreduce">IgfsTask</a>, <a href="../../../../org/apache/ignite/igfs/mapreduce/IgfsTaskNoReduceAdapter.html" title="class in org.apache.ignite.igfs.mapreduce">IgfsTaskNoReduceAdapter</a>, <a href="../../../../org/apache/ignite/ml/genetic/MutateTask.html" title="class in org.apache.ignite.ml.genetic">MutateTask</a>, <a href="../../../../org/apache/ignite/ml/genetic/TruncateSelectionTask.html" title="class in org.apache.ignite.ml.genetic">TruncateSelectionTask</a></dd>
</dl>
<hr>
<br>
<pre>public interface <span class="typeNameLabel">ComputeTask&lt;T,R&gt;</span>
extends <a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></pre>
<div class="block">Grid task interface defines a task that can be executed on the grid. Grid task
 is responsible for splitting business logic into multiple grid jobs, receiving
 results from individual grid jobs executing on remote nodes, and reducing
 (aggregating) received jobs' results into final grid task result.
 <p>
 <h1 class="header">Grid Task Execution Sequence</h1>
 <ol>
 <li>
      Upon request to execute a grid task with given task name system will find
      deployed task with given name. Task needs to be deployed prior to execution
      (see <a href="../../../../org/apache/ignite/IgniteCompute.html#localDeployTask-java.lang.Class-java.lang.ClassLoader-"><code>IgniteCompute.localDeployTask(Class, ClassLoader)</code></a> method), however if task does not specify
      its name explicitly via <a href="../../../../org/apache/ignite/compute/ComputeTaskName.html" title="annotation in org.apache.ignite.compute"><code>@ComputeTaskName</code></a> annotation, it
      will be auto-deployed first time it gets executed.
 </li>
 <li>
      System will create new distributed task session (see <a href="../../../../org/apache/ignite/compute/ComputeTaskSession.html" title="interface in org.apache.ignite.compute"><code>ComputeTaskSession</code></a>).
 </li>
 <li>
      System will inject all annotated resources (including task session) into grid task instance.
      See <a href="../../../../org/apache/ignite/resources/package-summary.html"><code>org.apache.ignite.resources</code></a> package for the list of injectable resources.
 </li>
 <li>
      System will apply <a href="../../../../org/apache/ignite/compute/ComputeTask.html#map-java.util.List-T-"><code>map(List, Object)</code></a>. This
      method is responsible for splitting business logic of grid task into
      multiple grid jobs (units of execution) and mapping them to
      grid nodes. Method <a href="../../../../org/apache/ignite/compute/ComputeTask.html#map-java.util.List-T-"><code>map(List, Object)</code></a> returns
      a map of with grid jobs as keys and grid node as values.
 </li>
 <li>
      System will send mapped grid jobs to their respective nodes.
 </li>
 <li>
      Upon arrival on the remote node a grid job will be handled by collision SPI
      (see <a href="../../../../org/apache/ignite/spi/collision/CollisionSpi.html" title="interface in org.apache.ignite.spi.collision"><code>CollisionSpi</code></a>) which will determine how a job will be executed
      on the remote node (immediately, buffered or canceled).
 </li>
 <li>
      Once job execution results become available method <a href="../../../../org/apache/ignite/compute/ComputeTask.html#result-org.apache.ignite.compute.ComputeJobResult-java.util.List-"><code>result(ComputeJobResult, List)</code></a>
      will be called for each received job result. The policy returned by this method will
      determine the way task reacts to every job result:
      <ul>
      <li>
          If <a href="../../../../org/apache/ignite/compute/ComputeJobResultPolicy.html#WAIT"><code>ComputeJobResultPolicy.WAIT</code></a> policy is returned, task will continue to wait
          for other job results. If this result is the last job result, then
          <a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce-java.util.List-"><code>reduce(List)</code></a> method will be called.
      </li>
      <li>
          If <a href="../../../../org/apache/ignite/compute/ComputeJobResultPolicy.html#REDUCE"><code>ComputeJobResultPolicy.REDUCE</code></a> policy is returned, then method
          <a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce-java.util.List-"><code>reduce(List)</code></a> will be called right away without waiting for
          other jobs' completion (all remaining jobs will receive a cancel request).
      </li>
      <li>
          If <a href="../../../../org/apache/ignite/compute/ComputeJobResultPolicy.html#FAILOVER"><code>ComputeJobResultPolicy.FAILOVER</code></a> policy is returned, then job will
          be failed over to another node for execution. The node to which job will get
          failed over is decided by <a href="../../../../org/apache/ignite/spi/failover/FailoverSpi.html" title="interface in org.apache.ignite.spi.failover"><code>FailoverSpi</code></a> SPI implementation.
          Note that if you use <a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute"><code>ComputeTaskAdapter</code></a> adapter for <code>ComputeTask</code>
          implementation, then it will automatically fail jobs to another node for 2
          known failure cases:
          <ul>
          <li>
              Job has failed due to node crash. In this case <a href="../../../../org/apache/ignite/compute/ComputeJobResult.html#getException--"><code>ComputeJobResult.getException()</code></a>
              method will return an instance of <a href="../../../../org/apache/ignite/cluster/ClusterTopologyException.html" title="class in org.apache.ignite.cluster"><code>ClusterTopologyException</code></a> exception.
          </li>
          <li>
              Job execution was rejected, i.e. remote node has cancelled job before it got
              a chance to execute, while it still was on the waiting list. In this case
              <a href="../../../../org/apache/ignite/compute/ComputeJobResult.html#getException--"><code>ComputeJobResult.getException()</code></a> method will return an instance of
              <a href="../../../../org/apache/ignite/compute/ComputeExecutionRejectedException.html" title="class in org.apache.ignite.compute"><code>ComputeExecutionRejectedException</code></a> exception.
          </li>
          </ul>
      </li>
      </ul>
 </li>
 <li>
      Once all results are received or <a href="../../../../org/apache/ignite/compute/ComputeTask.html#result-org.apache.ignite.compute.ComputeJobResult-java.util.List-"><code>result(ComputeJobResult, List)</code></a>
      method returned <a href="../../../../org/apache/ignite/compute/ComputeJobResultPolicy.html#REDUCE"><code>ComputeJobResultPolicy.REDUCE</code></a> policy, method <a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce-java.util.List-"><code>reduce(List)</code></a>
      is called to aggregate received results into one final result. Once this method is finished the
      execution of the grid task is complete. This result will be returned to the user through
      <a href="../../../../org/apache/ignite/compute/ComputeTaskFuture.html#get--"><code>ComputeTaskFuture.get()</code></a> method.
 </li>
 </ol>
 <p>
 <h1 class="header">Continuous Job Mapper</h1>
 For cases when jobs within split are too large to fit in memory at once or when
 simply not all jobs in task are known during <a href="../../../../org/apache/ignite/compute/ComputeTask.html#map-java.util.List-T-"><code>map(List, Object)</code></a> step,
 use <a href="../../../../org/apache/ignite/compute/ComputeTaskContinuousMapper.html" title="interface in org.apache.ignite.compute"><code>ComputeTaskContinuousMapper</code></a> to continuously stream jobs from task even after <code>map(...)</code>
 step is complete. Usually with continuous mapper the number of jobs within task
 may grow too large - in this case it may make sense to use it in combination with
 <a href="../../../../org/apache/ignite/compute/ComputeTaskNoResultCache.html" title="annotation in org.apache.ignite.compute"><code>@ComputeTaskNoResultCache</code></a> annotation.
 <p>
 <h1 class="header">Task Result Caching</h1>
 Sometimes job results are too large or task simply has too many jobs to keep track
 of which may hinder performance. In such cases it may make sense to disable task
 result caching by attaching <a href="../../../../org/apache/ignite/compute/ComputeTaskNoResultCache.html" title="annotation in org.apache.ignite.compute"><code>@ComputeTaskNoResultCache</code></a> annotation to task class, and
 processing all results as they come in <a href="../../../../org/apache/ignite/compute/ComputeTask.html#result-org.apache.ignite.compute.ComputeJobResult-java.util.List-"><code>result(ComputeJobResult, List)</code></a> method.
 When Ignite sees this annotation it will disable tracking of job results and
 list of all job results passed into <a href="../../../../org/apache/ignite/compute/ComputeTask.html#result-org.apache.ignite.compute.ComputeJobResult-java.util.List-"><code>result(ComputeJobResult, List)</code></a> or
 <a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce-java.util.List-"><code>reduce(List)</code></a> methods will always be empty. Note that list of
 job siblings on <a href="../../../../org/apache/ignite/compute/ComputeTaskSession.html" title="interface in org.apache.ignite.compute"><code>ComputeTaskSession</code></a> will also be empty to prevent number
 of job siblings from growing as well.
 <p>
 <h1 class="header">Resource Injection</h1>
 Grid task implementation can be injected using IoC (dependency injection) with
 ignite resources. Both, field and method based injection are supported.
 The following ignite resources can be injected:
 <ul>
 <li><a href="../../../../org/apache/ignite/resources/TaskSessionResource.html" title="annotation in org.apache.ignite.resources"><code>TaskSessionResource</code></a></li>
 <li><a href="../../../../org/apache/ignite/resources/IgniteInstanceResource.html" title="annotation in org.apache.ignite.resources"><code>IgniteInstanceResource</code></a></li>
 <li><a href="../../../../org/apache/ignite/resources/LoggerResource.html" title="annotation in org.apache.ignite.resources"><code>LoggerResource</code></a></li>
 <li><a href="../../../../org/apache/ignite/resources/SpringApplicationContextResource.html" title="annotation in org.apache.ignite.resources"><code>SpringApplicationContextResource</code></a></li>
 <li><a href="../../../../org/apache/ignite/resources/SpringResource.html" title="annotation in org.apache.ignite.resources"><code>SpringResource</code></a></li>
 </ul>
 Refer to corresponding resource documentation for more information.
 <p>
 <h1 class="header">Grid Task Adapters</h1>
 <code>ComputeTask</code> comes with several convenience adapters to make the usage easier:
 <ul>
 <li>
 <a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute"><code>ComputeTaskAdapter</code></a> provides default implementation for <a href="../../../../org/apache/ignite/compute/ComputeTask.html#result-org.apache.ignite.compute.ComputeJobResult-java.util.List-"><code>result(ComputeJobResult, List)</code></a>
 method which provides automatic fail-over to another node if remote job has failed
 due to node crash (detected by <a href="../../../../org/apache/ignite/cluster/ClusterTopologyException.html" title="class in org.apache.ignite.cluster"><code>ClusterTopologyException</code></a> exception) or due to job
 execution rejection (detected by <a href="../../../../org/apache/ignite/compute/ComputeExecutionRejectedException.html" title="class in org.apache.ignite.compute"><code>ComputeExecutionRejectedException</code></a> exception).
 Here is an example of how a you would implement your task using <a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute"><code>ComputeTaskAdapter</code></a>:
 <pre name="code" class="java">
 public class MyFooBarTask extends ComputeTaskAdapter&lt;String, String&gt; {
     // Inject load balancer.
     &#64;LoadBalancerResource
     ComputeLoadBalancer balancer;

     // Map jobs to grid nodes.
     public Map&lt;? extends ComputeJob, ClusterNode&gt; map(List&lt;ClusterNode&gt; subgrid, String arg) throws IgniteCheckedException {
         Map&lt;MyFooBarJob, ClusterNode&gt; jobs = new HashMap&lt;MyFooBarJob, ClusterNode&gt;(subgrid.size());

         // In more complex cases, you can actually do
         // more complicated assignments of jobs to nodes.
         for (int i = 0; i &lt; subgrid.size(); i++) {
             // Pick the next best balanced node for the job.
             jobs.put(new MyFooBarJob(arg), balancer.getBalancedNode())
         }

         return jobs;
     }

     // Aggregate results into one compound result.
     public String reduce(List&lt;ComputeJobResult&gt; results) throws IgniteCheckedException {
         // For the purpose of this example we simply
         // concatenate string representation of every
         // job result
         StringBuilder buf = new StringBuilder();

         for (ComputeJobResult res : results) {
             // Append string representation of result
             // returned by every job.
             buf.append(res.getData().string());
         }

         return buf.string();
     }
 }
 </pre>
 </li>
 <li>
 <a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="class in org.apache.ignite.compute"><code>ComputeTaskSplitAdapter</code></a> hides the job-to-node mapping logic from
 user and provides convenient <a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html#split-int-T-"><code>ComputeTaskSplitAdapter.split(int, Object)</code></a>
 method for splitting task into sub-jobs in homogeneous environments.
 Here is an example of how you would implement your task using <a href="../../../../org/apache/ignite/compute/ComputeTaskSplitAdapter.html" title="class in org.apache.ignite.compute"><code>ComputeTaskSplitAdapter</code></a>:
 <pre name="code" class="java">
 public class MyFooBarTask extends ComputeTaskSplitAdapter&lt;Object, String&gt; {
     &#64;Override
     protected Collection&lt;? extends ComputeJob&gt; split(int gridSize, Object arg) throws IgniteCheckedException {
         List&lt;MyFooBarJob&gt; jobs = new ArrayList&lt;MyFooBarJob&gt;(gridSize);

         for (int i = 0; i &lt; gridSize; i++) {
             jobs.add(new MyFooBarJob(arg));
         }

         // Node assignment via load balancer
         // happens automatically.
         return jobs;
     }

     // Aggregate results into one compound result.
     public String reduce(List&lt;ComputeJobResult&gt; results) throws IgniteCheckedException {
         // For the purpose of this example we simply
         // concatenate string representation of every
         // job result
         StringBuilder buf = new StringBuilder();

         for (ComputeJobResult res : results) {
             // Append string representation of result
             // returned by every job.
             buf.append(res.getData().string());
         }

         return buf.string();
     }
 }
 </pre>
 </li>
 </ul></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;? extends <a href="../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>,<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/ignite/compute/ComputeTask.html#map-java.util.List-T-">map</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;subgrid,
   <a href="../../../../org/apache/ignite/compute/ComputeTask.html" title="type parameter in ComputeTask">T</a>&nbsp;arg)</code>
<div class="block">This method is called to map or split grid task into multiple grid jobs.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../../org/apache/ignite/compute/ComputeTask.html" title="type parameter in ComputeTask">R</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/ignite/compute/ComputeTask.html#reduce-java.util.List-">reduce</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/compute/ComputeJobResult.html" title="interface in org.apache.ignite.compute">ComputeJobResult</a>&gt;&nbsp;results)</code>
<div class="block">Reduces (or aggregates) results received so far into one compound result to be returned to
 caller via <a href="../../../../org/apache/ignite/compute/ComputeTaskFuture.html#get--"><code>ComputeTaskFuture.get()</code></a> method.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../../org/apache/ignite/compute/ComputeJobResultPolicy.html" title="enum in org.apache.ignite.compute">ComputeJobResultPolicy</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/ignite/compute/ComputeTask.html#result-org.apache.ignite.compute.ComputeJobResult-java.util.List-">result</a></span>(<a href="../../../../org/apache/ignite/compute/ComputeJobResult.html" title="interface in org.apache.ignite.compute">ComputeJobResult</a>&nbsp;res,
      <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/compute/ComputeJobResult.html" title="interface in org.apache.ignite.compute">ComputeJobResult</a>&gt;&nbsp;rcvd)</code>
<div class="block">Asynchronous callback invoked every time a result from remote execution is
 received.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="map-java.util.List-java.lang.Object-">
<!--   -->
</a><a name="map-java.util.List-T-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>map</h4>
<pre>@Nullable
<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;? extends <a href="../../../../org/apache/ignite/compute/ComputeJob.html" title="interface in org.apache.ignite.compute">ComputeJob</a>,<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;map(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/cluster/ClusterNode.html" title="interface in org.apache.ignite.cluster">ClusterNode</a>&gt;&nbsp;subgrid,
                                                    @Nullable
                                                    <a href="../../../../org/apache/ignite/compute/ComputeTask.html" title="type parameter in ComputeTask">T</a>&nbsp;arg)
                                             throws <a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></pre>
<div class="block">This method is called to map or split grid task into multiple grid jobs. This is the
 first method that gets called when task execution starts.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>arg</code> - Task execution argument. Can be <code>null</code>. This is the same argument
      as the one passed into <code>Grid#execute(...)</code> methods.</dd>
<dd><code>subgrid</code> - Nodes available for this task execution. Note that order of nodes is
      guaranteed to be randomized by container. This ensures that every time
      you simply iterate through grid nodes, the order of nodes will be random which
      over time should result into all nodes being used equally.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Map of grid jobs assigned to subgrid node. Unless <a href="../../../../org/apache/ignite/compute/ComputeTaskContinuousMapper.html" title="interface in org.apache.ignite.compute"><code>ComputeTaskContinuousMapper</code></a> is
      injected into task, if <code>null</code> or empty map is returned, exception will be thrown.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></code> - If mapping could not complete successfully. This exception will be
      thrown out of <a href="../../../../org/apache/ignite/compute/ComputeTaskFuture.html#get--"><code>ComputeTaskFuture.get()</code></a> method.</dd>
</dl>
</li>
</ul>
<a name="result-org.apache.ignite.compute.ComputeJobResult-java.util.List-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>result</h4>
<pre><a href="../../../../org/apache/ignite/compute/ComputeJobResultPolicy.html" title="enum in org.apache.ignite.compute">ComputeJobResultPolicy</a>&nbsp;result(<a href="../../../../org/apache/ignite/compute/ComputeJobResult.html" title="interface in org.apache.ignite.compute">ComputeJobResult</a>&nbsp;res,
                              <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/compute/ComputeJobResult.html" title="interface in org.apache.ignite.compute">ComputeJobResult</a>&gt;&nbsp;rcvd)
                       throws <a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></pre>
<div class="block">Asynchronous callback invoked every time a result from remote execution is
 received. It is ultimately upto this method to return a policy based
 on which the system will either wait for more results, reduce results
 received so far, or failover this job to another node. See
 <a href="../../../../org/apache/ignite/compute/ComputeJobResultPolicy.html" title="enum in org.apache.ignite.compute"><code>ComputeJobResultPolicy</code></a> for more information about result policies.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>res</code> - Received remote grid executable result.</dd>
<dd><code>rcvd</code> - All previously received results. Note that if task class has
      <a href="../../../../org/apache/ignite/compute/ComputeTaskNoResultCache.html" title="annotation in org.apache.ignite.compute"><code>ComputeTaskNoResultCache</code></a> annotation, then this list will be empty.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Result policy that dictates how to process further upcoming
       job results.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></code> - If handling a job result caused an error. This exception will
      be thrown out of <a href="../../../../org/apache/ignite/compute/ComputeTaskFuture.html#get--"><code>ComputeTaskFuture.get()</code></a> method.</dd>
</dl>
</li>
</ul>
<a name="reduce-java.util.List-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>reduce</h4>
<pre>@Nullable
<a href="../../../../org/apache/ignite/compute/ComputeTask.html" title="type parameter in ComputeTask">R</a>&nbsp;reduce(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../org/apache/ignite/compute/ComputeJobResult.html" title="interface in org.apache.ignite.compute">ComputeJobResult</a>&gt;&nbsp;results)
            throws <a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></pre>
<div class="block">Reduces (or aggregates) results received so far into one compound result to be returned to
 caller via <a href="../../../../org/apache/ignite/compute/ComputeTaskFuture.html#get--"><code>ComputeTaskFuture.get()</code></a> method.
 <p>
 Note, that if some jobs did not succeed and could not be failed over then the list of
 results passed into this method will include the failed results. Otherwise, failed
 results will not be in the list.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>results</code> - Received results of broadcasted remote executions. Note that if task class has
      <a href="../../../../org/apache/ignite/compute/ComputeTaskNoResultCache.html" title="annotation in org.apache.ignite.compute"><code>ComputeTaskNoResultCache</code></a> annotation, then this list will be empty.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Grid job result constructed from results of remote executions.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../org/apache/ignite/IgniteException.html" title="class in org.apache.ignite">IgniteException</a></code> - If reduction or results caused an error. This exception will
      be thrown out of <a href="../../../../org/apache/ignite/compute/ComputeTaskFuture.html#get--"><code>ComputeTaskFuture.get()</code></a> method.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ComputeTask.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage">Ignite - In-Memory Data Fabric</div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/apache/ignite/compute/ComputeLoadBalancer.html" title="interface in org.apache.ignite.compute"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/apache/ignite/compute/ComputeTaskAdapter.html" title="class in org.apache.ignite.compute"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/apache/ignite/compute/ComputeTask.html" target="_top">Frames</a></li>
<li><a href="ComputeTask.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><table width="100%" border="0" cellspacing=0 cellpadding=0 style="padding: 5px">                                     <tr>                                         <td>                                             <table style="padding-left: 0; margin: 0">                                                 <tbody style="padding: 0; margin: 0">                                                     <tr style="padding: 0; margin: 0">                                                         <td>                                                             <a target=_blank href="https://ignite.apache.org"><nobr>2018 Copyright &#169; Apache Software Foundation</nobr></a>                                                         </td>                                                     </tr>                                                 </tbody>                                             </table>                                         </td>                                         <td width="100%" align="right" valign="center">                                             <a href="https://twitter.com/ApacheIgnite" class="twitter-follow-button" data-show-count="false" data-size="large">Follow @ApacheIgnite</a>                                         </td>                                     </tr>                                     <tr>                                         <td colspan="2" valign="top" align="left">                                             <table style="padding-left: 0; margin: 0">                                                 <tbody style="padding: 0; margin: 0">                                                     <tr style="padding: 0; margin: 0">                                                         <td>                                                             <b>Ignite Fabric</b>                                                         </td>                                                         <td>:&nbsp;&nbsp;                                                             ver. <strong>2.6.0</strong>                                                         </td>                                                     </tr>                                                     <tr style="padding: 0; margin: 0">                                                         <td>                                                             <b>Release Date</b>                                                         </td>                                                         <td>:&nbsp;&nbsp;                                                             July 10 2018                                                         </td>                                                     </tr>                                                 </tbody>                                             </table>                                         </td>                                     </tr>                                     </table></small></p>
</body>
</html>
