http://git-wip-us.apache.org/repos/asf/mesos-site/blob/94774512/content/api/latest/c++/slave_8hpp_source.html ---------------------------------------------------------------------- diff --git a/content/api/latest/c++/slave_8hpp_source.html b/content/api/latest/c++/slave_8hpp_source.html index 4264fae..d2ee9ca 100644 --- a/content/api/latest/c++/slave_8hpp_source.html +++ b/content/api/latest/c++/slave_8hpp_source.html @@ -887,286 +887,309 @@ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="comment">// Returns true if there are any queued/launched/terminated tasks.</span></div> <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a79093461e7bc35f4b4b9c7a796b88e2e">incompleteTasks</a>();</div> <div class="line"><a name="l00835"></a><span class="lineno"> 835</span> </div> -<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="comment">// Sends a message to the connected executor.</span></div> -<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> Message></div> -<div class="line"><a name="l00838"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6088e2d4d0160d0cdaf8674c46d91c43"> 838</a></span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6088e2d4d0160d0cdaf8674c46d91c43">send</a>(<span class="keyword">const</span> Message& message)</div> -<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  {</div> -<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">if</span> (state == <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a47f27688eed5f4b7b8fae1fe60e35d0d">REGISTERING</a> || state == <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ada3a926bc25ef3c7e060789f52aacd75">TERMINATED</a>) {</div> -<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  LOG(WARNING) << <span class="stringliteral">"Attempting to send message to disconnected"</span></div> -<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  << <span class="stringliteral">" executor "</span> << *<span class="keyword">this</span> << <span class="stringliteral">" in state "</span> << <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a27e0e6e088c0fd88a0c7f679c964c409">state</a>;</div> -<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  }</div> -<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div> -<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keywordflow">if</span> (http.isSome()) {</div> -<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">if</span> (!http-><a class="code" href="structmesos_1_1internal_1_1slave_1_1HttpConnection.html#ad0773acb50a9d74589dc050ee9bc3f9b">send</a>(message)) {</div> -<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  LOG(WARNING) << <span class="stringliteral">"Unable to send event to executor "</span> << *<span class="keyword">this</span></div> -<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  << <span class="stringliteral">": connection closed"</span>;</div> -<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div> -<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pid.<a class="code" href="classOption.html#a4e3bf8416d95246f43c91f1b5c309323">isSome</a>()) {</div> -<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  slave-><a class="code" href="classProtobufProcess.html#a6c404fdc490a7199a0d2ad881d588e5c">send</a>(pid.<a class="code" href="classOption.html#a21358442c0fac1cc978a67a9a9089a79">get</a>(), message);</div> -<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  } <span class="keywordflow">else</span> {</div> -<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  LOG(WARNING) << <span class="stringliteral">"Unable to send event to executor "</span> << *<span class="keyword">this</span></div> -<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  << <span class="stringliteral">": unknown connection type"</span>;</div> -<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  }</div> -<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  }</div> -<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> </div> -<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="comment">// Returns true if this executor is generated by Mesos for a command</span></div> -<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="comment">// task (either command executor for MesosContainerizer or docker</span></div> -<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="comment">// executor for DockerContainerizer).</span></div> -<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aa015f42f8b5fe1a51616a87def9924ab">isGeneratedForCommandTask</a>() <span class="keyword">const</span>;</div> -<div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div> -<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="comment">// Closes the HTTP connection.</span></div> -<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a546589bcf81d103b1e50be965494d430">closeHttpConnection</a>();</div> -<div class="line"><a name="l00865"></a><span class="lineno"> 865</span> </div> -<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="comment">// Returns the task group associated with the task.</span></div> -<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <a class="code" href="classOption.html">Option<TaskGroupInfo></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad6bd3d3bec32d1d06d96f90d1325bf8d">getQueuedTaskGroup</a>(<span class="keyword">const</span> TaskID& taskId);</div> -<div class="line"><a name="l00868"></a><span class="lineno"> 868</span> </div> -<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <a class="code" href="classmesos_1_1Resources.html">Resources</a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aab395584ca0bd5c7867e093597e6ab09">allocatedResources</a>() <span class="keyword">const</span>;</div> -<div class="line"><a name="l00870"></a><span class="lineno"> 870</span> </div> -<div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0"> 871</a></span>  <span class="keyword">enum</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0">State</a></div> -<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  {</div> -<div class="line"><a name="l00873"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a47f27688eed5f4b7b8fae1fe60e35d0d"> 873</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a47f27688eed5f4b7b8fae1fe60e35d0d">REGISTERING</a>, <span class="comment">// Executor is launched but not (re-)registered yet.</span></div> -<div class="line"><a name="l00874"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a1485da27f38622c47c16abf8c1491683"> 874</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a1485da27f38622c47c16abf8c1491683">RUNNING</a>, <span class="comment">// Executor has (re-)registered.</span></div> -<div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ab536b2fae4842fc2c6e24905f142c920"> 875</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ab536b2fae4842fc2c6e24905f142c920">TERMINATING</a>, <span class="comment">// Executor is being shutdown/killed.</span></div> -<div class="line"><a name="l00876"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ada3a926bc25ef3c7e060789f52aacd75"> 876</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ada3a926bc25ef3c7e060789f52aacd75">TERMINATED</a>, <span class="comment">// Executor has terminated but there might be pending updates.</span></div> -<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  } <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a27e0e6e088c0fd88a0c7f679c964c409">state</a>;</div> -<div class="line"><a name="l00878"></a><span class="lineno"> 878</span> </div> -<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="comment">// We store the pointer to 'Slave' to get access to its methods</span></div> -<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <span class="comment">// variables. One could imagine 'Executor' as being an inner class</span></div> -<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="comment">// of the 'Slave' class.</span></div> -<div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addd8f0d655f9d03ad6bc594c4d476818"> 882</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Slave.html">Slave</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addd8f0d655f9d03ad6bc594c4d476818">slave</a>;</div> -<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div> -<div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a9037a16ee390fa0893f1229aca4e33ea"> 884</a></span>  <span class="keyword">const</span> ExecutorID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a9037a16ee390fa0893f1229aca4e33ea">id</a>;</div> -<div class="line"><a name="l00885"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6d93343a7cac0e8f5398e4d55a19c856"> 885</a></span>  <span class="keyword">const</span> ExecutorInfo <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6d93343a7cac0e8f5398e4d55a19c856">info</a>;</div> -<div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div> -<div class="line"><a name="l00887"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a34bfb0214dd593dcbf1ad4fa398a417c"> 887</a></span>  <span class="keyword">const</span> FrameworkID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a34bfb0214dd593dcbf1ad4fa398a417c">frameworkId</a>;</div> +<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="comment">// TODO(qianzhang): This is a workaround to make the default executor</span></div> +<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  <span class="comment">// task's volume directory visible in MESOS UI. In MESOS-7225, we made</span></div> +<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="comment">// sure a task can access any volumes specified in its disk resources</span></div> +<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="comment">// from its sandbox by introducing a workaround to the default executor,</span></div> +<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="comment">// i.e., adding a `SANDBOX_PATH` volume with type `PARENT` to the</span></div> +<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="comment">// corresponding nested container. This volume gets translated into a</span></div> +<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="comment">// bind mount in the nested container's mount namespace, which is is not</span></div> +<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="comment">// visible in Mesos UI because it operates in the host namespace. See</span></div> +<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="comment">// Mesos-8279 for details.</span></div> +<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">// To make the task's volume directory visible in Mesos UI, here we</span></div> +<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="comment">// attach the executor's volume directory to it, so when users browse</span></div> +<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="comment">// task's volume directory in Mesos UI, what they actually browse is the</span></div> +<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="comment">// executor's volume directory. Note when calling `Files::attach()`, the</span></div> +<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="comment">// third argument `authorized` is not specified because it is already</span></div> +<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="comment">// specified when we do the attach for the executor's sandbox and it also</span></div> +<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="comment">// applies to the executor's tasks.</span></div> +<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a34c9f925687f2fc9da51133d82008f6f">attachTaskVolumeDirectory</a>(<span class="keyword">const</span> Task& task);</div> +<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div> +<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="comment">// TODO(qianzhang): Remove the task's volume directory from the /files</span></div> +<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="comment">// endpoint. This is a workaround for MESOS-8279.</span></div> +<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ab10fc02ca52ae27003fc90a88add19a0">detachTaskVolumeDirectory</a>(<span class="keyword">const</span> Task& task);</div> +<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> </div> +<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="comment">// Sends a message to the connected executor.</span></div> +<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> Message></div> +<div class="line"><a name="l00861"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6088e2d4d0160d0cdaf8674c46d91c43"> 861</a></span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6088e2d4d0160d0cdaf8674c46d91c43">send</a>(<span class="keyword">const</span> Message& message)</div> +<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  {</div> +<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="keywordflow">if</span> (state == <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a47f27688eed5f4b7b8fae1fe60e35d0d">REGISTERING</a> || state == <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ada3a926bc25ef3c7e060789f52aacd75">TERMINATED</a>) {</div> +<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  LOG(WARNING) << <span class="stringliteral">"Attempting to send message to disconnected"</span></div> +<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  << <span class="stringliteral">" executor "</span> << *<span class="keyword">this</span> << <span class="stringliteral">" in state "</span> << <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a27e0e6e088c0fd88a0c7f679c964c409">state</a>;</div> +<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div> +<div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div> +<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">if</span> (http.isSome()) {</div> +<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">if</span> (!http-><a class="code" href="structmesos_1_1internal_1_1slave_1_1HttpConnection.html#ad0773acb50a9d74589dc050ee9bc3f9b">send</a>(message)) {</div> +<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  LOG(WARNING) << <span class="stringliteral">"Unable to send event to executor "</span> << *<span class="keyword">this</span></div> +<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  << <span class="stringliteral">": connection closed"</span>;</div> +<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  }</div> +<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pid.<a class="code" href="classOption.html#a4e3bf8416d95246f43c91f1b5c309323">isSome</a>()) {</div> +<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  slave-><a class="code" href="classProtobufProcess.html#a6c404fdc490a7199a0d2ad881d588e5c">send</a>(pid.<a class="code" href="classOption.html#a21358442c0fac1cc978a67a9a9089a79">get</a>(), message);</div> +<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  } <span class="keywordflow">else</span> {</div> +<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  LOG(WARNING) << <span class="stringliteral">"Unable to send event to executor "</span> << *<span class="keyword">this</span></div> +<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  << <span class="stringliteral">": unknown connection type"</span>;</div> +<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div> +<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  }</div> +<div class="line"><a name="l00880"></a><span class="lineno"> 880</span> </div> +<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="comment">// Returns true if this executor is generated by Mesos for a command</span></div> +<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="comment">// task (either command executor for MesosContainerizer or docker</span></div> +<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="comment">// executor for DockerContainerizer).</span></div> +<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aa015f42f8b5fe1a51616a87def9924ab">isGeneratedForCommandTask</a>() <span class="keyword">const</span>;</div> +<div class="line"><a name="l00885"></a><span class="lineno"> 885</span> </div> +<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <span class="comment">// Closes the HTTP connection.</span></div> +<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a546589bcf81d103b1e50be965494d430">closeHttpConnection</a>();</div> <div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div> -<div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aaad02226a9d30491088dd9ef315effbc"> 889</a></span>  <span class="keyword">const</span> ContainerID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aaad02226a9d30491088dd9ef315effbc">containerId</a>;</div> -<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div> -<div class="line"><a name="l00891"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aabe86347ab1d23297172813dc5d1c8f5"> 891</a></span>  <span class="keyword">const</span> std::string <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aabe86347ab1d23297172813dc5d1c8f5">directory</a>;</div> -<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> </div> -<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="comment">// The sandbox will be owned by this user and the executor will</span></div> -<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="comment">// run as this user. This can be set to None when --switch_user</span></div> -<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="comment">// is false or when compiled for Windows.</span></div> -<div class="line"><a name="l00896"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aed6f0c1093840e82b6e920164be9df74"> 896</a></span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<std::string></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aed6f0c1093840e82b6e920164be9df74">user</a>;</div> -<div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div> -<div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ab05d451e6d84e8da41ac5b156cb7a79f"> 898</a></span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ab05d451e6d84e8da41ac5b156cb7a79f">checkpoint</a>;</div> -<div class="line"><a name="l00899"></a><span class="lineno"> 899</span> </div> -<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// An Executor can either be connected via HTTP or by libprocess</span></div> -<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="comment">// message passing. The following are the possible states:</span></div> -<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="comment">// Agent State Executor State http pid Executor Type</span></div> -<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="comment">// ----------- -------------- ---- ---- -------------</span></div> -<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="comment">// RECOVERING REGISTERING None UPID() Unknown</span></div> -<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="comment">// REGISTERING None Some Libprocess</span></div> -<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="comment">// REGISTERING None None HTTP</span></div> -<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="comment">// * REGISTERING None None Not known yet</span></div> -<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <span class="comment">// * * None Some Libprocess</span></div> -<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="comment">// * * Some None HTTP</span></div> -<div class="line"><a name="l00912"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad432746af325d55919e69efe7d82fbb9"> 912</a></span>  <a class="code" href="classOption.html">Option<HttpConnection></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad432746af325d55919e69efe7d82fbb9">http</a>;</div> -<div class="line"><a name="l00913"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a29666bff86d8f043ce5ba4f8a4ccb0b8"> 913</a></span>  <a class="code" href="classOption.html">Option<process::UPID></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a29666bff86d8f043ce5ba4f8a4ccb0b8">pid</a>;</div> -<div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div> -<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="comment">// Tasks can be found in one of the following four data structures:</span></div> -<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// TODO(bmahler): Make these private to enforce that the task</span></div> -<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// lifecycle helper functions are not being bypassed, and provide</span></div> -<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="comment">// public views into them.</span></div> +<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="comment">// Returns the task group associated with the task.</span></div> +<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <a class="code" href="classOption.html">Option<TaskGroupInfo></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad6bd3d3bec32d1d06d96f90d1325bf8d">getQueuedTaskGroup</a>(<span class="keyword">const</span> TaskID& taskId);</div> +<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> </div> +<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <a class="code" href="classmesos_1_1Resources.html">Resources</a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aab395584ca0bd5c7867e093597e6ab09">allocatedResources</a>() <span class="keyword">const</span>;</div> +<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div> +<div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0"> 894</a></span>  <span class="keyword">enum</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0">State</a></div> +<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  {</div> +<div class="line"><a name="l00896"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a47f27688eed5f4b7b8fae1fe60e35d0d"> 896</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a47f27688eed5f4b7b8fae1fe60e35d0d">REGISTERING</a>, <span class="comment">// Executor is launched but not (re-)registered yet.</span></div> +<div class="line"><a name="l00897"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a1485da27f38622c47c16abf8c1491683"> 897</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0a1485da27f38622c47c16abf8c1491683">RUNNING</a>, <span class="comment">// Executor has (re-)registered.</span></div> +<div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ab536b2fae4842fc2c6e24905f142c920"> 898</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ab536b2fae4842fc2c6e24905f142c920">TERMINATING</a>, <span class="comment">// Executor is being shutdown/killed.</span></div> +<div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ada3a926bc25ef3c7e060789f52aacd75"> 899</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a3b2abbbd9f9e9ca5c08b75329ac426c0ada3a926bc25ef3c7e060789f52aacd75">TERMINATED</a>, <span class="comment">// Executor has terminated but there might be pending updates.</span></div> +<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  } <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a27e0e6e088c0fd88a0c7f679c964c409">state</a>;</div> +<div class="line"><a name="l00901"></a><span class="lineno"> 901</span> </div> +<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="comment">// We store the pointer to 'Slave' to get access to its methods</span></div> +<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <span class="comment">// variables. One could imagine 'Executor' as being an inner class</span></div> +<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <span class="comment">// of the 'Slave' class.</span></div> +<div class="line"><a name="l00905"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addd8f0d655f9d03ad6bc594c4d476818"> 905</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Slave.html">Slave</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addd8f0d655f9d03ad6bc594c4d476818">slave</a>;</div> +<div class="line"><a name="l00906"></a><span class="lineno"> 906</span> </div> +<div class="line"><a name="l00907"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a9037a16ee390fa0893f1229aca4e33ea"> 907</a></span>  <span class="keyword">const</span> ExecutorID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a9037a16ee390fa0893f1229aca4e33ea">id</a>;</div> +<div class="line"><a name="l00908"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6d93343a7cac0e8f5398e4d55a19c856"> 908</a></span>  <span class="keyword">const</span> ExecutorInfo <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a6d93343a7cac0e8f5398e4d55a19c856">info</a>;</div> +<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> </div> +<div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a34bfb0214dd593dcbf1ad4fa398a417c"> 910</a></span>  <span class="keyword">const</span> FrameworkID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a34bfb0214dd593dcbf1ad4fa398a417c">frameworkId</a>;</div> +<div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div> +<div class="line"><a name="l00912"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aaad02226a9d30491088dd9ef315effbc"> 912</a></span>  <span class="keyword">const</span> ContainerID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aaad02226a9d30491088dd9ef315effbc">containerId</a>;</div> +<div class="line"><a name="l00913"></a><span class="lineno"> 913</span> </div> +<div class="line"><a name="l00914"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aabe86347ab1d23297172813dc5d1c8f5"> 914</a></span>  <span class="keyword">const</span> std::string <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aabe86347ab1d23297172813dc5d1c8f5">directory</a>;</div> +<div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div> +<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">// The sandbox will be owned by this user and the executor will</span></div> +<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// run as this user. This can be set to None when --switch_user</span></div> +<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// is false or when compiled for Windows.</span></div> +<div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aed6f0c1093840e82b6e920164be9df74"> 919</a></span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<std::string></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#aed6f0c1093840e82b6e920164be9df74">user</a>;</div> <div class="line"><a name="l00920"></a><span class="lineno"> 920</span> </div> -<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="comment">// Not yet launched tasks. This also includes tasks from `queuedTaskGroups`.</span></div> -<div class="line"><a name="l00922"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a806e8af598eb003694dbaeacdda2c66b"> 922</a></span>  <a class="code" href="classLinkedHashMap.html">LinkedHashMap<TaskID, TaskInfo></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a806e8af598eb003694dbaeacdda2c66b">queuedTasks</a>;</div> -<div class="line"><a name="l00923"></a><span class="lineno"> 923</span> </div> -<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="comment">// Not yet launched task groups. This is needed for correctly sending</span></div> -<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="comment">// TASK_KILLED status updates for all tasks in the group if any of the</span></div> -<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="comment">// tasks were killed before the executor could register with the agent.</span></div> -<div class="line"><a name="l00927"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a2fc2e9b051c144f259f003b79a3d5ec3"> 927</a></span>  std::list<TaskGroupInfo> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a2fc2e9b051c144f259f003b79a3d5ec3">queuedTaskGroups</a>;</div> -<div class="line"><a name="l00928"></a><span class="lineno"> 928</span> </div> -<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="comment">// Running.</span></div> -<div class="line"><a name="l00930"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a8c9a1989d4b769bbccd7ce7385fd054d"> 930</a></span>  <a class="code" href="classLinkedHashMap.html">LinkedHashMap<TaskID, Task*></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a8c9a1989d4b769bbccd7ce7385fd054d">launchedTasks</a>;</div> -<div class="line"><a name="l00931"></a><span class="lineno"> 931</span> </div> -<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="comment">// Terminated but pending updates.</span></div> -<div class="line"><a name="l00933"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#abd7e32a67b2bf5409c1ab855f3220625"> 933</a></span>  <a class="code" href="classLinkedHashMap.html">LinkedHashMap<TaskID, Task*></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#abd7e32a67b2bf5409c1ab855f3220625">terminatedTasks</a>;</div> -<div class="line"><a name="l00934"></a><span class="lineno"> 934</span> </div> -<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  <span class="comment">// Terminated and updates acked.</span></div> -<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  <span class="comment">// NOTE: We use a shared pointer for Task because clang doesn't like</span></div> -<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="comment">// Boost's implementation of circular_buffer with Task (Boost</span></div> -<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="comment">// attempts to do some memset's which are unsafe).</span></div> -<div class="line"><a name="l00939"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad326f6f8e9c161095f6a7e033da58550"> 939</a></span>  boost::circular_buffer<std::shared_ptr<Task>> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad326f6f8e9c161095f6a7e033da58550">completedTasks</a>;</div> -<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div> -<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="comment">// When the slave initiates a destroy of the container, we expect a</span></div> -<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <span class="comment">// termination to occur. The 'pendingTermation' indicates why the</span></div> -<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="comment">// slave initiated the destruction and will influence the</span></div> -<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="comment">// information sent in the status updates for any remaining</span></div> -<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <span class="comment">// non-terminal tasks.</span></div> -<div class="line"><a name="l00946"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addae2cfbd131b946f10a7986aafac151"> 946</a></span>  <a class="code" href="classOption.html">Option<mesos::slave::ContainerTermination></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addae2cfbd131b946f10a7986aafac151">pendingTermination</a>;</div> -<div class="line"><a name="l00947"></a><span class="lineno"> 947</span> </div> -<div class="line"><a name="l00948"></a><span class="lineno"> 948</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a2743c0fdfd1c12f467e85e628a779114">Executor</a>(<span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>&) = <span class="keyword">delete</span>;</div> -<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>& operator=(<span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>&) = <span class="keyword">delete</span>;</div> +<div class="line"><a name="l00921"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ab05d451e6d84e8da41ac5b156cb7a79f"> 921</a></span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ab05d451e6d84e8da41ac5b156cb7a79f">checkpoint</a>;</div> +<div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div> +<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="comment">// An Executor can either be connected via HTTP or by libprocess</span></div> +<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="comment">// message passing. The following are the possible states:</span></div> +<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  <span class="comment">// Agent State Executor State http pid Executor Type</span></div> +<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  <span class="comment">// ----------- -------------- ---- ---- -------------</span></div> +<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <span class="comment">// RECOVERING REGISTERING None UPID() Unknown</span></div> +<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  <span class="comment">// REGISTERING None Some Libprocess</span></div> +<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <span class="comment">// REGISTERING None None HTTP</span></div> +<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  <span class="comment">// * REGISTERING None None Not known yet</span></div> +<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="comment">// * * None Some Libprocess</span></div> +<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="comment">// * * Some None HTTP</span></div> +<div class="line"><a name="l00935"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad432746af325d55919e69efe7d82fbb9"> 935</a></span>  <a class="code" href="classOption.html">Option<HttpConnection></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad432746af325d55919e69efe7d82fbb9">http</a>;</div> +<div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a29666bff86d8f043ce5ba4f8a4ccb0b8"> 936</a></span>  <a class="code" href="classOption.html">Option<process::UPID></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a29666bff86d8f043ce5ba4f8a4ccb0b8">pid</a>;</div> +<div class="line"><a name="l00937"></a><span class="lineno"> 937</span> </div> +<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="comment">// Tasks can be found in one of the following four data structures:</span></div> +<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="comment">// TODO(bmahler): Make these private to enforce that the task</span></div> +<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="comment">// lifecycle helper functions are not being bypassed, and provide</span></div> +<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <span class="comment">// public views into them.</span></div> +<div class="line"><a name="l00943"></a><span class="lineno"> 943</span> </div> +<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="comment">// Not yet launched tasks. This also includes tasks from `queuedTaskGroups`.</span></div> +<div class="line"><a name="l00945"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a806e8af598eb003694dbaeacdda2c66b"> 945</a></span>  <a class="code" href="classLinkedHashMap.html">LinkedHashMap<TaskID, TaskInfo></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a806e8af598eb003694dbaeacdda2c66b">queuedTasks</a>;</div> +<div class="line"><a name="l00946"></a><span class="lineno"> 946</span> </div> +<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <span class="comment">// Not yet launched task groups. This is needed for correctly sending</span></div> +<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="comment">// TASK_KILLED status updates for all tasks in the group if any of the</span></div> +<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <span class="comment">// tasks were killed before the executor could register with the agent.</span></div> +<div class="line"><a name="l00950"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a2fc2e9b051c144f259f003b79a3d5ec3"> 950</a></span>  std::list<TaskGroupInfo> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a2fc2e9b051c144f259f003b79a3d5ec3">queuedTaskGroups</a>;</div> <div class="line"><a name="l00951"></a><span class="lineno"> 951</span> </div> -<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="keywordtype">bool</span> isGeneratedForCommandTask_;</div> -<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> };</div> +<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="comment">// Running.</span></div> +<div class="line"><a name="l00953"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a8c9a1989d4b769bbccd7ce7385fd054d"> 953</a></span>  <a class="code" href="classLinkedHashMap.html">LinkedHashMap<TaskID, Task*></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a8c9a1989d4b769bbccd7ce7385fd054d">launchedTasks</a>;</div> <div class="line"><a name="l00954"></a><span class="lineno"> 954</span> </div> -<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div> -<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">// Information about a framework.</span></div> -<div class="line"><a name="l00957"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html"> 957</a></span> <span class="keyword">class </span><a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html">Framework</a></div> -<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> {</div> -<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <span class="keyword">public</span>:</div> -<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a98caed7c7f98f89fa2cb716cbfe38217">Framework</a>(</div> -<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Slave.html">Slave</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a28542cb83d680c4bd37f31ae58382866">slave</a>,</div> -<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Flags.html">Flags</a>& slaveFlags,</div> -<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="keyword">const</span> FrameworkInfo& <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ab024621d83bc1381fd176d0fc8cdeac2">info</a>,</div> -<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<process::UPID></a>& pid);</div> -<div class="line"><a name="l00965"></a><span class="lineno"> 965</span> </div> -<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a6803557157471add8d9cccc7272beb14">~Framework</a>();</div> -<div class="line"><a name="l00967"></a><span class="lineno"> 967</span> </div> -<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="comment">// Returns whether the framework is idle, where idle is</span></div> -<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="comment">// defined as having no activity:</span></div> -<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="comment">// (1) The framework has no non-terminal tasks and executors.</span></div> -<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="comment">// (2) All status updates have been acknowledged.</span></div> -<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="comment">// TODO(bmahler): The framework should also not be considered</span></div> -<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <span class="comment">// idle if there are unacknowledged updates for "pending" tasks.</span></div> -<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ac08555852cd25a946886181831cb423e">idle</a>() <span class="keyword">const</span>;</div> -<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> </div> -<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ae1271f8b0a5113b0413c4c5ca3035ae5">checkpointFramework</a>() <span class="keyword">const</span>;</div> +<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  <span class="comment">// Terminated but pending updates.</span></div> +<div class="line"><a name="l00956"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#abd7e32a67b2bf5409c1ab855f3220625"> 956</a></span>  <a class="code" href="classLinkedHashMap.html">LinkedHashMap<TaskID, Task*></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#abd7e32a67b2bf5409c1ab855f3220625">terminatedTasks</a>;</div> +<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> </div> +<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  <span class="comment">// Terminated and updates acked.</span></div> +<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  <span class="comment">// NOTE: We use a shared pointer for Task because clang doesn't like</span></div> +<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  <span class="comment">// Boost's implementation of circular_buffer with Task (Boost</span></div> +<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="comment">// attempts to do some memset's which are unsafe).</span></div> +<div class="line"><a name="l00962"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad326f6f8e9c161095f6a7e033da58550"> 962</a></span>  boost::circular_buffer<std::shared_ptr<Task>> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#ad326f6f8e9c161095f6a7e033da58550">completedTasks</a>;</div> +<div class="line"><a name="l00963"></a><span class="lineno"> 963</span> </div> +<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="comment">// When the slave initiates a destroy of the container, we expect a</span></div> +<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="comment">// termination to occur. The 'pendingTermation' indicates why the</span></div> +<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <span class="comment">// slave initiated the destruction and will influence the</span></div> +<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="comment">// information sent in the status updates for any remaining</span></div> +<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="comment">// non-terminal tasks.</span></div> +<div class="line"><a name="l00969"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addae2cfbd131b946f10a7986aafac151"> 969</a></span>  <a class="code" href="classOption.html">Option<mesos::slave::ContainerTermination></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#addae2cfbd131b946f10a7986aafac151">pendingTermination</a>;</div> +<div class="line"><a name="l00970"></a><span class="lineno"> 970</span> </div> +<div class="line"><a name="l00971"></a><span class="lineno"> 971</span> <span class="keyword">private</span>:</div> +<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html#a2743c0fdfd1c12f467e85e628a779114">Executor</a>(<span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>&) = <span class="keyword">delete</span>;</div> +<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>& operator=(<span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>&) = <span class="keyword">delete</span>;</div> +<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> </div> +<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <span class="keywordtype">bool</span> isGeneratedForCommandTask_;</div> +<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> };</div> +<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> </div> <div class="line"><a name="l00978"></a><span class="lineno"> 978</span> </div> -<div class="line"><a name="l00979"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a65933e3034706258069b54549081fdbf"> 979</a></span>  <span class="keyword">const</span> FrameworkID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a65933e3034706258069b54549081fdbf">id</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> info.id(); }</div> -<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> </div> -<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a4cbc84739c113be2cb1e6b4c88c46983">addExecutor</a>(<span class="keyword">const</span> ExecutorInfo& executorInfo);</div> -<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aaa044d0c042d68e59815f1244440560e">getExecutor</a>(<span class="keyword">const</span> ExecutorID& executorId) <span class="keyword">const</span>;</div> -<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aaa044d0c042d68e59815f1244440560e">getExecutor</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> -<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div> -<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a8a39feb604858a43d0f7f747961d4592">destroyExecutor</a>(<span class="keyword">const</span> ExecutorID& executorId);</div> -<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> </div> -<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a440112e6053e7d36a46c18580a1b5133">recoverExecutor</a>(</div> -<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1slave_1_1state_1_1ExecutorState.html">state::ExecutorState</a>& <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#adbfec960b7cb705602bdac9853fb0c12">state</a>,</div> -<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordtype">bool</span> recheckpointExecutor,</div> -<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <span class="keyword">const</span> <a class="code" href="classhashset.html">hashset<TaskID></a>& tasksToRecheckpoint);</div> -<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> </div> -<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aeb25f4fcc70053454fa9b96fdc723472">addPendingTask</a>(</div> -<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keyword">const</span> ExecutorID& executorId,</div> -<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keyword">const</span> TaskInfo& task);</div> -<div class="line"><a name="l00995"></a><span class="lineno"> 995</span> </div> -<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="comment">// Note that these tasks will also be tracked within `pendingTasks`.</span></div> -<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#af3e51bb9c1d72d282695d8a4a9b2e072">addPendingTaskGroup</a>(</div> -<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keyword">const</span> ExecutorID& executorId,</div> -<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keyword">const</span> TaskGroupInfo& taskGroup);</div> -<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div> -<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aa4d1693c6eaeccb8df16ae925c3979e0">hasTask</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> -<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ab67788cb552b7320783b7ecd7b80f82a">isPending</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> +<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="comment">// Information about a framework.</span></div> +<div class="line"><a name="l00980"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html"> 980</a></span> <span class="keyword">class </span><a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html">Framework</a></div> +<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> {</div> +<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keyword">public</span>:</div> +<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a98caed7c7f98f89fa2cb716cbfe38217">Framework</a>(</div> +<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Slave.html">Slave</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a28542cb83d680c4bd37f31ae58382866">slave</a>,</div> +<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Flags.html">Flags</a>& slaveFlags,</div> +<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <span class="keyword">const</span> FrameworkInfo& <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ab024621d83bc1381fd176d0fc8cdeac2">info</a>,</div> +<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<process::UPID></a>& pid);</div> +<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> </div> +<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a6803557157471add8d9cccc7272beb14">~Framework</a>();</div> +<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> </div> +<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="comment">// Returns whether the framework is idle, where idle is</span></div> +<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <span class="comment">// defined as having no activity:</span></div> +<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="comment">// (1) The framework has no non-terminal tasks and executors.</span></div> +<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="comment">// (2) All status updates have been acknowledged.</span></div> +<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="comment">// TODO(bmahler): The framework should also not be considered</span></div> +<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="comment">// idle if there are unacknowledged updates for "pending" tasks.</span></div> +<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ac08555852cd25a946886181831cb423e">idle</a>() <span class="keyword">const</span>;</div> +<div class="line"><a name="l00999"></a><span class="lineno"> 999</span> </div> +<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ae1271f8b0a5113b0413c4c5ca3035ae5">checkpointFramework</a>() <span class="keyword">const</span>;</div> +<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> </div> +<div class="line"><a name="l01002"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a65933e3034706258069b54549081fdbf"> 1002</a></span>  <span class="keyword">const</span> FrameworkID <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a65933e3034706258069b54549081fdbf">id</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> info.id(); }</div> <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> </div> -<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="comment">// Returns the task group associated with a pending task.</span></div> -<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <a class="code" href="classOption.html">Option<TaskGroupInfo></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a1c287e7b3a052ddbddc88f26a33784d4">getTaskGroupForPendingTask</a>(<span class="keyword">const</span> TaskID& taskId);</div> -<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> </div> -<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="comment">// Returns whether the pending task was removed.</span></div> -<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aabbcae80a9967d73db3218e33505921c">removePendingTask</a>(<span class="keyword">const</span> TaskID& taskId);</div> +<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a4cbc84739c113be2cb1e6b4c88c46983">addExecutor</a>(<span class="keyword">const</span> ExecutorInfo& executorInfo);</div> +<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aaa044d0c042d68e59815f1244440560e">getExecutor</a>(<span class="keyword">const</span> ExecutorID& executorId) <span class="keyword">const</span>;</div> +<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Executor.html">Executor</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aaa044d0c042d68e59815f1244440560e">getExecutor</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> +<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span> </div> +<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a8a39feb604858a43d0f7f747961d4592">destroyExecutor</a>(<span class="keyword">const</span> ExecutorID& executorId);</div> <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> </div> -<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <a class="code" href="classOption.html">Option<ExecutorID></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a2fff4fc7fabe8cd06c9fca35f187b82b">getExecutorIdForPendingTask</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> -<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> </div> -<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <a class="code" href="classmesos_1_1Resources.html">Resources</a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a004ea3cee927e6983397de310e42a0d1">allocatedResources</a>() <span class="keyword">const</span>;</div> -<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div> -<div class="line"><a name="l01014"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8add"> 1014</a></span>  <span class="keyword">enum</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8add">State</a></div> -<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  {</div> -<div class="line"><a name="l01016"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8addaee1aee9245f83af93404e62fe978dcc0"> 1016</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8addaee1aee9245f83af93404e62fe978dcc0">RUNNING</a>, <span class="comment">// First state of a newly created framework.</span></div> -<div class="line"><a name="l01017"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8adda577bc0be9a10978a6926259b04ac779e"> 1017</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8adda577bc0be9a10978a6926259b04ac779e">TERMINATING</a>, <span class="comment">// Framework is shutting down in the cluster.</span></div> -<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  } <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#adbfec960b7cb705602bdac9853fb0c12">state</a>;</div> -<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div> -<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="comment">// We store the pointer to 'Slave' to get access to its methods and</span></div> -<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="comment">// variables. One could imagine 'Framework' being an inner class of</span></div> -<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="comment">// the 'Slave' class.</span></div> -<div class="line"><a name="l01023"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a28542cb83d680c4bd37f31ae58382866"> 1023</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Slave.html">Slave</a>* <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a28542cb83d680c4bd37f31ae58382866">slave</a>;</div> -<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div> -<div class="line"><a name="l01025"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ab024621d83bc1381fd176d0fc8cdeac2"> 1025</a></span>  FrameworkInfo <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ab024621d83bc1381fd176d0fc8cdeac2">info</a>;</div> +<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a440112e6053e7d36a46c18580a1b5133">recoverExecutor</a>(</div> +<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  <span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1slave_1_1state_1_1ExecutorState.html">state::ExecutorState</a>& <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#adbfec960b7cb705602bdac9853fb0c12">state</a>,</div> +<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <span class="keywordtype">bool</span> recheckpointExecutor,</div> +<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <span class="keyword">const</span> <a class="code" href="classhashset.html">hashset<TaskID></a>& tasksToRecheckpoint);</div> +<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div> +<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aeb25f4fcc70053454fa9b96fdc723472">addPendingTask</a>(</div> +<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <span class="keyword">const</span> ExecutorID& executorId,</div> +<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="keyword">const</span> TaskInfo& task);</div> +<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> </div> +<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="comment">// Note that these tasks will also be tracked within `pendingTasks`.</span></div> +<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#af3e51bb9c1d72d282695d8a4a9b2e072">addPendingTaskGroup</a>(</div> +<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="keyword">const</span> ExecutorID& executorId,</div> +<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keyword">const</span> TaskGroupInfo& taskGroup);</div> +<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div> +<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aa4d1693c6eaeccb8df16ae925c3979e0">hasTask</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> +<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ab67788cb552b7320783b7ecd7b80f82a">isPending</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div> -<div class="line"><a name="l01027"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#af7ac61858b800f9b2adf0778d442f3ab"> 1027</a></span>  <a class="code" href="structmesos_1_1internal_1_1protobuf_1_1framework_1_1Capabilities.html">protobuf::framework::Capabilities</a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#af7ac61858b800f9b2adf0778d442f3ab">capabilities</a>;</div> -<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div> -<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="comment">// Frameworks using the scheduler driver will have a 'pid',</span></div> -<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="comment">// which allows us to send executor messages directly to the</span></div> -<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="comment">// driver. Frameworks using the HTTP API (in 0.24.0) will</span></div> -<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="comment">// not have a 'pid', in which case executor messages are</span></div> -<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="comment">// sent through the master.</span></div> -<div class="line"><a name="l01034"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ad7dbb2013ee11ad0a55f177bfd7a0461"> 1034</a></span>  <a class="code" href="classOption.html">Option<process::UPID></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#ad7dbb2013ee11ad0a55f177bfd7a0461">pid</a>;</div> -<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span> </div> -<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="comment">// Executors can be found in one of the following</span></div> -<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="comment">// data structures:</span></div> -<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="comment">//</span></div> -<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="comment">// TODO(bmahler): Make these private to enforce that</span></div> -<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="comment">// the executors lifecycle helper functions are not</span></div> -<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="comment">// being bypassed, and provide public views into them.</span></div> +<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="comment">// Returns the task group associated with a pending task.</span></div> +<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <a class="code" href="classOption.html">Option<TaskGroupInfo></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a1c287e7b3a052ddbddc88f26a33784d4">getTaskGroupForPendingTask</a>(<span class="keyword">const</span> TaskID& taskId);</div> +<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div> +<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="comment">// Returns whether the pending task was removed.</span></div> +<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aabbcae80a9967d73db3218e33505921c">removePendingTask</a>(<span class="keyword">const</span> TaskID& taskId);</div> +<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span> </div> +<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <a class="code" href="classOption.html">Option<ExecutorID></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a2fff4fc7fabe8cd06c9fca35f187b82b">getExecutorIdForPendingTask</a>(<span class="keyword">const</span> TaskID& taskId) <span class="keyword">const</span>;</div> +<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div> +<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <a class="code" href="classmesos_1_1Resources.html">Resources</a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a004ea3cee927e6983397de310e42a0d1">allocatedResources</a>() <span class="keyword">const</span>;</div> +<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div> +<div class="line"><a name="l01037"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8add"> 1037</a></span>  <span class="keyword">enum</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8add">State</a></div> +<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  {</div> +<div class="line"><a name="l01039"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8addaee1aee9245f83af93404e62fe978dcc0"> 1039</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8addaee1aee9245f83af93404e62fe978dcc0">RUNNING</a>, <span class="comment">// First state of a newly created framework.</span></div> +<div class="line"><a name="l01040"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8adda577bc0be9a10978a6926259b04ac779e"> 1040</a></span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#accb4e9c8d32936b20f3d0ddc71fe8adda577bc0be9a10978a6926259b04ac779e">TERMINATING</a>, <span class="comment">// Framework is shutting down in the cluster.</span></div> +<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  } <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#adbfec960b7cb705602bdac9853fb0c12">state</a>;</div> <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div> -<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="comment">// Executors with pending tasks.</span></div> -<div class="line"><a name="l01044"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a895612a28929288abe2071620d7958da"> 1044</a></span>  <a class="code" href="classhashmap.html">hashmap<ExecutorID, hashmap<TaskID, TaskInfo></a>> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a895612a28929288abe2071620d7958da">pendingTasks</a>;</div> -<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> </div> -<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <span class="comment">// Pending task groups. This is needed for correctly sending</span></div> -<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="comment">// TASK_KILLED status updates for all tasks in the group if</span></div> -<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  <span class="comment">// any of the tasks are killed while pending.</span></div> -<div class="line"><a name="l01049"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aa52d24c559cecfc18ba6167dd72c1988"> 1049</a></span>  std::list<TaskGroupInfo> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#aa52d24c559cecfc18ba6167dd72c1988">pendingTaskGroups</a>;</div> -<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span> </div> -<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="comment">// Current running executors.</span></div> -<div class="line"><a name="l01052"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a67ace79356a9523a2486d8ffd235847f"> 1052</a></span>  <a class="code" href="classhashmap.html">hashmap<ExecutorID, Executor*></a> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a67ace79356a9523a2486d8ffd235847f">executors</a>;</div> -<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span> </div> -<div class="line"><a name="l01054"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a64da4492057ddd2ed2019e737819d79b"> 1054</a></span>  boost::circular_buffer<process::Owned<Executor>> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a64da4492057ddd2ed2019e737819d79b">completedExecutors</a>;</div> -<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div> -<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html#a98caed7c7f98f89fa2cb716cbfe38217">Framework</a>(<span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html">Framework</a>&) = <span class="keyword">delete</span>;</div> -<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html">Framework</a>& operator=(<span class="keyword">const</span> <a class="code" href="classmesos_1_1internal_1_1slave_1_1Framework.html">Framework</a>&) = <span class="keyword">delete</span>;</div> -<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span> };</div> -<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span> </div> -<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> </div> -<div class="line"><a name="l01062"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1slave_1_1ResourceProvider.html"> 1062</a></span> <span class="keyword">struct </span><a class="code" href="structmesos_1_1internal_1_1slave_1_1ResourceProvider.html">ResourceProvider</a></div> -<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> {</div> -<div class="line"><a name="l01064"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1slave_1_1ResourceProvider.html#afe22db29500a5157a6fb0c5da3fb9d2f"> 1064</a></span>  <a class="code" href="structmesos_1_1internal_1_1slave_1_1ResourceProvider.html#afe22db29500a5157a6fb0c5da3fb9d2f">ResourceProvider</a>(</div> -<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="keyword">const</span> Res
<TRUNCATED>