http://git-wip-us.apache.org/repos/asf/mesos-site/blob/aac7827c/content/api/latest/c++/status__update__manager__process_8hpp_source.html ---------------------------------------------------------------------- diff --git a/content/api/latest/c++/status__update__manager__process_8hpp_source.html b/content/api/latest/c++/status__update__manager__process_8hpp_source.html index a4df9c8..5a0683f 100644 --- a/content/api/latest/c++/status__update__manager__process_8hpp_source.html +++ b/content/api/latest/c++/status__update__manager__process_8hpp_source.html @@ -297,9 +297,9 @@ <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// `false` same as above except the status update stream is</span></div> <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="comment">// terminated.</span></div> <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="comment">// `Failure` if there are any errors (e.g., duplicate, checkpointing).</span></div> -<div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#aaae7192b8a53cb1ad5b745cddeacc42b"> 246</a></span>  <a class="code" href="classprocess_1_1Future.html">process::Future<bool></a> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#aaae7192b8a53cb1ad5b745cddeacc42b">acknowledgement</a>(</div> +<div class="line"><a name="l00246"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a9aa45e70ff97941eefdc582b410c1221"> 246</a></span>  <a class="code" href="classprocess_1_1Future.html">process::Future<bool></a> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a9aa45e70ff97941eefdc582b410c1221">acknowledgement</a>(</div> <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keyword">const</span> IDType& streamId,</div> -<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">const</span> <a class="code" href="structid_1_1UUID.html">UUID</a>& uuid)</div> +<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">const</span> <a class="code" href="structid_1_1UUID.html">id::UUID</a>& uuid)</div> <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {</div> <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  LOG(INFO) << <span class="stringliteral">"Received "</span> << statusUpdateType</div> <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  << <span class="stringliteral">" acknowledgement (UUID: "</span> << uuid << <span class="stringliteral">")"</span></div> @@ -756,7 +756,7 @@ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">if</span> (update.<a class="code" href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div> <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div> <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="stringliteral">"Unexpected "</span> + statusUpdateType + <span class="stringliteral">" acknowledgment"</span></div> -<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="stringliteral">" (UUID: "</span> + UUID::fromBytes(record->uuid())->toString() +</div> +<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="stringliteral">" (UUID: "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(record->uuid()) +</div> <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="stringliteral">") for stream "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(streamId));</div> <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  }</div> <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  stream->_handle(update.<a class="code" href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>(), record->type());</div> @@ -838,236 +838,238 @@ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">if</span> (!update.status().has_status_uuid()) {</div> <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">"Status update is missing 'status_uuid'"</span>);</div> <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  }</div> -<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="classTry.html">Try<UUID></a> statusUuid = UUID::fromBytes(update.status().status_uuid());</div> -<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(statusUuid);</div> -<div class="line"><a name="l00789"></a><span class="lineno"> 789</span> </div> -<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="comment">// Check that this status update has not already been acknowledged.</span></div> -<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordflow">if</span> (acknowledged.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div> -<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring "</span> << statusUpdateType << <span class="stringliteral">" "</span> << update</div> -<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  << <span class="stringliteral">" that has already been acknowledged"</span>;</div> -<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  }</div> -<div class="line"><a name="l00796"></a><span class="lineno"> 796</span> </div> -<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="comment">// Check that this update has not already been received.</span></div> -<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">if</span> (received.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div> -<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring duplicate "</span> << statusUpdateType << <span class="stringliteral">" "</span></div> -<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div> -<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> -<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  }</div> -<div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div> -<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="comment">// Handle the update, checkpointing if necessary.</span></div> -<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::UPDATE);</div> -<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div> -<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(result.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div> -<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  }</div> -<div class="line"><a name="l00809"></a><span class="lineno"> 809</span> </div> -<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  }</div> -<div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div> -<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="comment">// This function handles the ACK, checkpointing if necessary.</span></div> -<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="comment">// Returns `true`: if the acknowledgement is successfully handled.</span></div> -<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="comment">// `false`: if the acknowledgement is a duplicate.</span></div> -<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">// `Error`: Any errors (e.g., checkpointing).</span></div> -<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <a class="code" href="classTry.html">Try<bool></a> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#aaae7192b8a53cb1ad5b745cddeacc42b">acknowledgement</a>(<span class="keyword">const</span> <a class="code" href="structid_1_1UUID.html">UUID</a>& statusUuid)</div> -<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  {</div> -<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.isSome()) {</div> -<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.get());</div> -<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  }</div> -<div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div> -<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="comment">// Get the corresponding update for this ACK.</span></div> -<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keyword">const</span> <a class="code" href="classResult.html">Result<UpdateType></a>& update_ = next();</div> -<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div> -<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(update_.<a class="code" href="classResult.html#a521adf96f5c27d26d6b1d580aae8aaee">error</a>());</div> -<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  }</div> -<div class="line"><a name="l00829"></a><span class="lineno"> 829</span> </div> -<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="comment">// This might happen if we retried a status update and got back</span></div> -<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div> -<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div> -<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div> -<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="stringliteral">"Unexpected acknowledgment (UUID: "</span> + statusUuid.<a class="code" href="structid_1_1UUID.html#af024badbc379374ac635031eed57dc5f">toString</a>() +</div> -<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="stringliteral">") for "</span> + statusUpdateType + <span class="stringliteral">" stream "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(streamId));</div> -<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  }</div> -<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> </div> -<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keyword">const</span> UpdateType& update = update_.<a class="code" href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>();</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> (acknowledged.contains(statusUuid)) {</div> -<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  LOG(WARNING) << <span class="stringliteral">"Duplicate acknowledgment for "</span> << statusUpdateType</div> -<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div> -<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">return</span> <span class="keyword">false</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> </div> -<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div> -<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div> -<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div> -<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="comment">// depending on identical field names.</span></div> -<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <a class="code" href="classTry.html">Try<UUID></a> updateStatusUuid =</div> -<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  UUID::fromBytes(update.status().status_uuid());</div> -<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(updateStatusUuid);</div> -<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> </div> -<div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="comment">// This might happen if we retried a status update and got back</span></div> -<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div> -<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="keywordflow">if</span> (statusUuid != updateStatusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>()) {</div> -<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  LOG(WARNING) << <span class="stringliteral">"Unexpected "</span> << statusUpdateType</div> -<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  << <span class="stringliteral">" acknowledgment (received "</span> << statusUuid</div> -<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  << <span class="stringliteral">", expecting "</span> << updateStatusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>() << <span class="stringliteral">") for "</span></div> -<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div> -<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">return</span> <span class="keyword">false</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> </div> -<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="comment">// Handle the ACK, checkpointing if necessary.</span></div> -<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::ACK);</div> -<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div> -<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(result.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</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> </div> -<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> -<div class="line"><a name="l00871"></a><span class="lineno"> 871</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="comment">// Returns the next update (or none, if empty) in the queue.</span></div> -<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <a class="code" href="classResult.html">Result<UpdateType></a> next()</div> -<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  {</div> -<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.isSome()) {</div> -<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.get());</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>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.empty()) {</div> -<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.front();</div> -<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  }</div> -<div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div> -<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</a>();</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> </div> -<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="comment">// Returns `true` if the stream is checkpointed, `false` otherwise.</span></div> -<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keywordtype">bool</span> checkpointed() { <span class="keywordflow">return</span> path.isSome(); }</div> -<div class="line"><a name="l00889"></a><span class="lineno"> 889</span> </div> -<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keyword">const</span> IDType streamId;</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>  <span class="keywordtype">bool</span> terminated;</div> -<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <a class="code" href="classOption.html">Option<FrameworkID></a> frameworkId;</div> -<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <a class="code" href="classOption.html">Option<process::Timeout></a> timeout; <span class="comment">// Timeout for resending status update.</span></div> -<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  std::queue<UpdateType> <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>;</div> -<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> </div> -<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <span class="keyword">private</span>:</div> -<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  StatusUpdateStream(</div> -<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="keyword">const</span> std::string& _statusUpdateType,</div> -<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keyword">const</span> IDType& _streamId,</div> -<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<std::string></a>& _path,</div> -<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <a class="code" href="classOption.html">Option<int_fd></a> _fd)</div> -<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  : streamId(_streamId),</div> -<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  terminated(false),</div> -<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  statusUpdateType(_statusUpdateType),</div> -<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  path(_path),</div> -<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  fd(_fd) {}</div> -<div class="line"><a name="l00908"></a><span class="lineno"> 908</span> </div> -<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="comment">// Handles the status update and writes it to disk, if necessary.</span></div> -<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <span class="comment">//</span></div> -<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="comment">// TODO(vinod): The write has to be asynchronous to avoid status updates</span></div> -<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="comment">// that are being checkpointed, blocking the processing of other updates.</span></div> -<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <span class="comment">// One solution is to wrap the protobuf::write inside async, but it's</span></div> -<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="comment">// probably too much of an overhead to spin up a new libprocess per status</span></div> -<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="comment">// update?</span></div> -<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">// A better solution might be to be have async write capability for file IO.</span></div> -<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <a class="code" href="classTry.html">Try<Nothing></a> handle(</div> -<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keyword">const</span> UpdateType& update,</div> -<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="namespacemesos_1_1internal_1_1capabilities.html#aaa5ec6d56ccbeba718b9e8fc6ec2f7c9">CheckpointType::Type</a>& <a class="code" href="namespacemesos_1_1internal_1_1fs.html#a2343e2642db514496ba8380776487fba">type</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>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#ab8738e43a60086f3b434c0278933e85e">CHECK_NONE</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</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">// Checkpoint the update if necessary.</span></div> -<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="keywordflow">if</span> (checkpointed()) {</div> -<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  LOG(INFO) << <span class="stringliteral">"Checkpointing "</span> << type << <span class="stringliteral">" for "</span> << statusUpdateType</div> -<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div> -<div class="line"><a name="l00927"></a><span class="lineno"> 927</span> </div> -<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(fd);</div> -<div class="line"><a name="l00929"></a><span class="lineno"> 929</span> </div> -<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  CheckpointType record;</div> -<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  record.set_type(type);</div> -<div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div> -<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="keywordflow">switch</span> (type) {</div> -<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">case</span> CheckpointType::UPDATE:</div> -<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  record.mutable_update()->CopyFrom(update);</div> -<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  <span class="keywordflow">break</span>;</div> -<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keywordflow">case</span> CheckpointType::ACK:</div> -<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the</span></div> -<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="comment">// field containing the status update uuid has a different name.</span></div> -<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="comment">// In order to make the `TaskStatusUpdateManager` use this process,</span></div> -<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="comment">// we should avoid depending on identical field names.</span></div> -<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  record.set_uuid(update.status().status_uuid());</div> -<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">break</span>;</div> -<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  }</div> -<div class="line"><a name="l00945"></a><span class="lineno"> 945</span> </div> -<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <a class="code" href="classTry.html">Try<Nothing></a> <a class="code" href="namespacemesos_1_1internal_1_1log_1_1protocol.html#a66ff2d5af4db53227f787281c0765d8d">write</a> = <a class="code" href="namespacemesos_1_1internal_1_1log_1_1protocol.html#a66ff2d5af4db53227f787281c0765d8d">::protobuf::write</a>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), record);</div> -<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <span class="keywordflow">if</span> (write.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div> -<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a> =</div> -<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <span class="stringliteral">"Failed to write to file '"</span> + path.get() + <span class="stringliteral">"': "</span> + write.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>();</div> -<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.get());</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>  }</div> -<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> </div> -<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="comment">// Now actually handle the update.</span></div> -<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  _handle(update, type);</div> -<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div> -<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  <span class="keywordflow">return</span> <a class="code" href="structNothing.html">Nothing</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> </div> +<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="classTry.html">Try<id::UUID></a> statusUuid =</div> +<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <a class="code" href="structid_1_1UUID.html#afd66db1d29a4ee4be9c82581437dda74">id::UUID::fromBytes</a>(update.status().status_uuid().value());</div> +<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(statusUuid);</div> +<div class="line"><a name="l00790"></a><span class="lineno"> 790</span> </div> +<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="comment">// Check that this status update has not already been acknowledged.</span></div> +<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">if</span> (acknowledged.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div> +<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring "</span> << statusUpdateType << <span class="stringliteral">" "</span> << update</div> +<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  << <span class="stringliteral">" that has already been acknowledged"</span>;</div> +<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  }</div> +<div class="line"><a name="l00797"></a><span class="lineno"> 797</span> </div> +<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="comment">// Check that this update has not already been received.</span></div> +<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordflow">if</span> (received.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div> +<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring duplicate "</span> << statusUpdateType << <span class="stringliteral">" "</span></div> +<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div> +<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  }</div> +<div class="line"><a name="l00804"></a><span class="lineno"> 804</span> </div> +<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="comment">// Handle the update, checkpointing if necessary.</span></div> +<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::UPDATE);</div> +<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div> +<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(result.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div> +<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  }</div> +<div class="line"><a name="l00810"></a><span class="lineno"> 810</span> </div> +<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div> +<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  }</div> +<div class="line"><a name="l00813"></a><span class="lineno"> 813</span> </div> +<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="comment">// This function handles the ACK, checkpointing if necessary.</span></div> +<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="comment">// Returns `true`: if the acknowledgement is successfully handled.</span></div> +<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">// `false`: if the acknowledgement is a duplicate.</span></div> +<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// `Error`: Any errors (e.g., checkpointing).</span></div> +<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <a class="code" href="classTry.html">Try<bool></a> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a9aa45e70ff97941eefdc582b410c1221">acknowledgement</a>(<span class="keyword">const</span> <a class="code" href="structid_1_1UUID.html">id::UUID</a>& statusUuid)</div> +<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  {</div> +<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.isSome()) {</div> +<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.get());</div> +<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  }</div> +<div class="line"><a name="l00824"></a><span class="lineno"> 824</span> </div> +<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="comment">// Get the corresponding update for this ACK.</span></div> +<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keyword">const</span> <a class="code" href="classResult.html">Result<UpdateType></a>& update_ = next();</div> +<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div> +<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(update_.<a class="code" href="classResult.html#a521adf96f5c27d26d6b1d580aae8aaee">error</a>());</div> +<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div> +<div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div> +<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="comment">// This might happen if we retried a status update and got back</span></div> +<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div> +<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div> +<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div> +<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="stringliteral">"Unexpected acknowledgment (UUID: "</span> + statusUuid.<a class="code" href="structid_1_1UUID.html#af024badbc379374ac635031eed57dc5f">toString</a>() +</div> +<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="stringliteral">") for "</span> + statusUpdateType + <span class="stringliteral">" stream "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(streamId));</div> +<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  }</div> +<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> </div> +<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keyword">const</span> UpdateType& update = update_.<a class="code" href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>();</div> +<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> </div> +<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keywordflow">if</span> (acknowledged.contains(statusUuid)) {</div> +<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  LOG(WARNING) << <span class="stringliteral">"Duplicate acknowledgment for "</span> << statusUpdateType</div> +<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div> +<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  }</div> +<div class="line"><a name="l00846"></a><span class="lineno"> 846</span> </div> +<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div> +<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div> +<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div> +<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="comment">// depending on identical field names.</span></div> +<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="classTry.html">Try<id::UUID></a> updateStatusUuid =</div> +<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <a class="code" href="structid_1_1UUID.html#afd66db1d29a4ee4be9c82581437dda74">id::UUID::fromBytes</a>(update.status().status_uuid().value());</div> +<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(updateStatusUuid);</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">// This might happen if we retried a status update and got back</span></div> +<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div> +<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">if</span> (statusUuid != updateStatusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>()) {</div> +<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  LOG(WARNING) << <span class="stringliteral">"Unexpected "</span> << statusUpdateType</div> +<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  << <span class="stringliteral">" acknowledgment (received "</span> << statusUuid</div> +<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  << <span class="stringliteral">", expecting "</span> << updateStatusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>() << <span class="stringliteral">") for "</span></div> +<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div> +<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div> +<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  }</div> +<div class="line"><a name="l00864"></a><span class="lineno"> 864</span> </div> +<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="comment">// Handle the ACK, checkpointing if necessary.</span></div> +<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::ACK);</div> +<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div> +<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(result.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div> +<div class="line"><a name="l00869"></a><span class="lineno"> 869</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"> 871</span>  <span class="keywordflow">return</span> <span class="keyword">true</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> </div> +<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="comment">// Returns the next update (or none, if empty) in the queue.</span></div> +<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <a class="code" href="classResult.html">Result<UpdateType></a> next()</div> +<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  {</div> +<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.isSome()) {</div> +<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.get());</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="keywordflow">if</span> (!<a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.empty()) {</div> +<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.front();</div> +<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div> +<div class="line"><a name="l00884"></a><span class="lineno"> 884</span> </div> +<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</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"> 887</span> </div> +<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="comment">// Returns `true` if the stream is checkpointed, `false` otherwise.</span></div> +<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordtype">bool</span> checkpointed() { <span class="keywordflow">return</span> path.isSome(); }</div> +<div class="line"><a name="l00890"></a><span class="lineno"> 890</span> </div> +<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keyword">const</span> IDType streamId;</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="keywordtype">bool</span> terminated;</div> +<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <a class="code" href="classOption.html">Option<FrameworkID></a> frameworkId;</div> +<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <a class="code" href="classOption.html">Option<process::Timeout></a> timeout; <span class="comment">// Timeout for resending status update.</span></div> +<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  std::queue<UpdateType> <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</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"> 898</span>  <span class="keyword">private</span>:</div> +<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  StatusUpdateStream(</div> +<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keyword">const</span> std::string& _statusUpdateType,</div> +<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="keyword">const</span> IDType& _streamId,</div> +<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<std::string></a>& _path,</div> +<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <a class="code" href="classOption.html">Option<int_fd></a> _fd)</div> +<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  : streamId(_streamId),</div> +<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  terminated(false),</div> +<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  statusUpdateType(_statusUpdateType),</div> +<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  path(_path),</div> +<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  fd(_fd) {}</div> +<div class="line"><a name="l00909"></a><span class="lineno"> 909</span> </div> +<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <span class="comment">// Handles the status update and writes it to disk, if necessary.</span></div> +<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="comment">//</span></div> +<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="comment">// TODO(vinod): The write has to be asynchronous to avoid status updates</span></div> +<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <span class="comment">// that are being checkpointed, blocking the processing of other updates.</span></div> +<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  <span class="comment">// One solution is to wrap the protobuf::write inside async, but it's</span></div> +<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="comment">// probably too much of an overhead to spin up a new libprocess per status</span></div> +<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">// update?</span></div> +<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// A better solution might be to be have async write capability for file IO.</span></div> +<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <a class="code" href="classTry.html">Try<Nothing></a> handle(</div> +<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keyword">const</span> UpdateType& update,</div> +<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="namespacemesos_1_1internal_1_1capabilities.html#aaa5ec6d56ccbeba718b9e8fc6ec2f7c9">CheckpointType::Type</a>& <a class="code" href="namespacemesos_1_1internal_1_1fs.html#a2343e2642db514496ba8380776487fba">type</a>)</div> +<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  {</div> +<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#ab8738e43a60086f3b434c0278933e85e">CHECK_NONE</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</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">// Checkpoint the update if necessary.</span></div> +<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="keywordflow">if</span> (checkpointed()) {</div> +<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  LOG(INFO) << <span class="stringliteral">"Checkpointing "</span> << type << <span class="stringliteral">" for "</span> << statusUpdateType</div> +<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</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>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(fd);</div> +<div class="line"><a name="l00930"></a><span class="lineno"> 930</span> </div> +<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  CheckpointType record;</div> +<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  record.set_type(type);</div> +<div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div> +<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>  <span class="keywordflow">switch</span> (type) {</div> +<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>  <span class="keywordflow">case</span> CheckpointType::UPDATE:</div> +<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>  record.mutable_update()->CopyFrom(update);</div> +<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">case</span> CheckpointType::ACK:</div> +<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the</span></div> +<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>  <span class="comment">// field containing the status update uuid has a different name.</span></div> +<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>  <span class="comment">// In order to make the `TaskStatusUpdateManager` use this process,</span></div> +<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  <span class="comment">// we should avoid depending on identical field names.</span></div> +<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  record.mutable_uuid()->CopyFrom(update.status().status_uuid());</div> +<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  }</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>  <a class="code" href="classTry.html">Try<Nothing></a> <a class="code" href="namespacemesos_1_1internal_1_1log_1_1protocol.html#a66ff2d5af4db53227f787281c0765d8d">write</a> = <a class="code" href="namespacemesos_1_1internal_1_1log_1_1protocol.html#a66ff2d5af4db53227f787281c0765d8d">::protobuf::write</a>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), record);</div> +<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <span class="keywordflow">if</span> (write.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div> +<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a> =</div> +<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <span class="stringliteral">"Failed to write to file '"</span> + path.get() + <span class="stringliteral">"': "</span> + write.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>();</div> +<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>.get());</div> +<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  }</div> +<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  }</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>  <span class="comment">// Now actually handle the update.</span></div> +<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  _handle(update, type);</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="keywordflow">return</span> <a class="code" href="structNothing.html">Nothing</a>();</div> +<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>  }</div> <div class="line"><a name="l00960"></a><span class="lineno"> 960</span> </div> -<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="comment">// Handles the status update without checkpointing.</span></div> -<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="keywordtype">void</span> _handle(</div> -<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="keyword">const</span> UpdateType& update,</div> -<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="namespacemesos_1_1internal_1_1capabilities.html#aaa5ec6d56ccbeba718b9e8fc6ec2f7c9">CheckpointType::Type</a>& type)</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="stout_2include_2stout_2check_8hpp.html#ab8738e43a60086f3b434c0278933e85e">CHECK_NONE</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</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">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div> -<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div> -<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div> -<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="comment">// depending on identical field names.</span></div> -<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <a class="code" href="classTry.html">Try<UUID></a> statusUuid = UUID::fromBytes(update.status().status_uuid());</div> -<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(statusUuid);</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="keywordflow">switch</span> (type) {</div> -<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  <span class="keywordflow">case</span> CheckpointType::UPDATE:</div> -<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordflow">if</span> (update.has_framework_id()) {</div> -<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  frameworkId = update.framework_id();</div> -<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  }</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>  received.insert(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>());</div> +<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> </div> +<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="comment">// Handles the status update without checkpointing.</span></div> +<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="keywordtype">void</span> _handle(</div> +<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  <span class="keyword">const</span> UpdateType& update,</div> +<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="namespacemesos_1_1internal_1_1capabilities.html#aaa5ec6d56ccbeba718b9e8fc6ec2f7c9">CheckpointType::Type</a>& type)</div> +<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  {</div> +<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#ab8738e43a60086f3b434c0278933e85e">CHECK_NONE</a>(<a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>);</div> +<div class="line"><a name="l00968"></a><span class="lineno"> 968</span> </div> +<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div> +<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div> +<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div> +<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="comment">// depending on identical field names.</span></div> +<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <a class="code" href="classTry.html">Try<id::UUID></a> statusUuid =</div> +<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <a class="code" href="structid_1_1UUID.html#afd66db1d29a4ee4be9c82581437dda74">id::UUID::fromBytes</a>(update.status().status_uuid().value());</div> +<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(statusUuid);</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="keywordflow">switch</span> (type) {</div> +<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="keywordflow">case</span> CheckpointType::UPDATE:</div> +<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="keywordflow">if</span> (update.has_framework_id()) {</div> +<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  frameworkId = update.framework_id();</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> </div> -<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <span class="comment">// Add it to the pending updates queue.</span></div> -<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.push(update);</div> -<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">break</span>;</div> -<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <span class="keywordflow">case</span> CheckpointType::ACK:</div> -<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  acknowledged.insert(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>());</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>  <span class="comment">// Remove the corresponding update from the pending queue.</span></div> -<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.pop();</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="keywordflow">if</span> (!terminated) {</div> -<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  terminated = <a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aa31907fb62769822a77c06ffbf10451f">protobuf::isTerminalState</a>(update.status().state());</div> -<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  }</div> -<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keywordflow">break</span>;</div> -<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div> -<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  }</div> -<div class="line"><a name="l00998"></a><span class="lineno"> 998</span> </div> -<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="comment">// Type of status updates handled by the stream, e.g., "offer operation</span></div> -<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <span class="comment">// status update".</span></div> -<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="keyword">const</span> std::string& statusUpdateType;</div> -<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span> </div> -<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<std::string></a> path; <span class="comment">// File path of the update stream.</span></div> -<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<int_fd></a> fd; <span class="comment">// File descriptor to the update stream.</span></div> -<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div> -<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <a class="code" href="classhashset.html">hashset<UUID></a> received;</div> -<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <a class="code" href="classhashset.html">hashset<UUID></a> acknowledged;</div> -<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span> </div> -<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  <a class="code" href="classOption.html">Option<std::string></a> <a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>; <span class="comment">// Potential non-retryable error.</span></div> -<div class="line"><a name="l01010"></a><span class="lineno"> 1010</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> </div> -<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> } <span class="comment">// namespace internal {</span></div> -<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> } <span class="comment">// namespace mesos {</span></div> -<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> </div> -<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="preprocessor">#endif // __STATUS_UPDATE_MANAGER_PROCESS_HPP__</span></div> +<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  received.insert(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>());</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="comment">// Add it to the pending updates queue.</span></div> +<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.push(update);</div> +<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keywordflow">case</span> CheckpointType::ACK:</div> +<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  acknowledged.insert(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</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">// Remove the corresponding update from the pending queue.</span></div> +<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.pop();</div> +<div class="line"><a name="l00993"></a><span class="lineno"> 993</span> </div> +<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordflow">if</span> (!terminated) {</div> +<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  terminated = <a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aa31907fb62769822a77c06ffbf10451f">protobuf::isTerminalState</a>(update.status().state());</div> +<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div> +<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">break</span>;</div> +<div class="line"><a name="l00998"></a><span class="lineno"> 998</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> </div> +<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="comment">// Type of status updates handled by the stream, e.g., "offer operation</span></div> +<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="comment">// status update".</span></div> +<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <span class="keyword">const</span> std::string& statusUpdateType;</div> +<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div> +<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<std::string></a> path; <span class="comment">// File path of the update stream.</span></div> +<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<int_fd></a> fd; <span class="comment">// File descriptor to the update stream.</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>  <a class="code" href="classhashset.html">hashset<id::UUID></a> received;</div> +<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  <a class="code" href="classhashset.html">hashset<id::UUID></a> acknowledged;</div> +<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div> +<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  <a class="code" href="classOption.html">Option<std::string></a> <a class="code" href="namespacemesos_1_1internal_1_1slave_1_1cni_1_1spec.html#ae58e703656ab4a1bd5d9870441236727">error</a>; <span class="comment">// Potential non-retryable error.</span></div> +<div class="line"><a name="l01012"></a><span class="lineno"> 1012</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"> 1014</span> </div> +<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> } <span class="comment">// namespace internal {</span></div> +<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> } <span class="comment">// namespace mesos {</span></div> +<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> </div> +<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="preprocessor">#endif // __STATUS_UPDATE_MANAGER_PROCESS_HPP__</span></div> <div class="ttc" id="namespacemesos_1_1internal_1_1log_1_1protocol_html_afa485608d261b11b9b4c619b4b4d6e28"><div class="ttname"><a href="namespacemesos_1_1internal_1_1log_1_1protocol.html#afa485608d261b11b9b4c619b4b4d6e28">mesos::internal::log::protocol::recover</a></div><div class="ttdeci">Protocol< RecoverRequest, RecoverResponse > recover</div></div> <div class="ttc" id="namespacemesos_1_1internal_1_1slave_html_ad21670291a9464020160f8b9048ef582"><div class="ttname"><a href="namespacemesos_1_1internal_1_1slave.html#ad21670291a9464020160f8b9048ef582">mesos::internal::slave::STATUS_UPDATE_RETRY_INTERVAL_MAX</a></div><div class="ttdeci">constexpr Duration STATUS_UPDATE_RETRY_INTERVAL_MAX</div><div class="ttdef"><b>Definition:</b> constants.hpp:56</div></div> <div class="ttc" id="namespaceprocess_1_1ID_html_aeb11a48c9def1da169d8455a30d0ee39"><div class="ttname"><a href="namespaceprocess_1_1ID.html#aeb11a48c9def1da169d8455a30d0ee39">process::ID::generate</a></div><div class="ttdeci">std::string generate(const std::string &prefix="")</div><div class="ttdoc">Returns &#39;prefix(N)&#39; where N represents the number of instances where the same prefix (wrt...</div></div> @@ -1090,7 +1092,7 @@ <div class="ttc" id="timeout_8hpp_html"><div class="ttname"><a href="timeout_8hpp.html">timeout.hpp</a></div></div> <div class="ttc" id="classmesos_1_1internal_1_1StatusUpdateManagerProcess_html_a1658b4adb952dc5e20465e31d572633b"><div class="ttname"><a href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">mesos::internal::StatusUpdateManagerProcess::update</a></div><div class="ttdeci">process::Future< Nothing > update(const UpdateType &update, const IDType &streamId, bool checkpoint)</div><div class="ttdef"><b>Definition:</b> status_update_manager_process.hpp:145</div></div> <div class="ttc" id="classResult_html_a521adf96f5c27d26d6b1d580aae8aaee"><div class="ttname"><a href="classResult.html#a521adf96f5c27d26d6b1d580aae8aaee">Result::error</a></div><div class="ttdeci">static Result< T > error(const std::string &message)</div><div class="ttdef"><b>Definition:</b> result.hpp:53</div></div> -<div class="ttc" id="classhashset_html"><div class="ttname"><a href="classhashset.html">hashset< UUID ></a></div></div> +<div class="ttc" id="classhashset_html"><div class="ttname"><a href="classhashset.html">hashset< id::UUID ></a></div></div> <div class="ttc" id="classmesos_1_1internal_1_1StatusUpdateManagerProcess_html_a86a61db827ba0cb772ba8199b14403a2"><div class="ttname"><a href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a86a61db827ba0cb772ba8199b14403a2">mesos::internal::StatusUpdateManagerProcess::cleanup</a></div><div class="ttdeci">void cleanup(const FrameworkID &frameworkId)</div><div class="ttdef"><b>Definition:</b> status_update_manager_process.hpp:362</div></div> <div class="ttc" id="stout_2include_2stout_2check_8hpp_html_ab8738e43a60086f3b434c0278933e85e"><div class="ttname"><a href="stout_2include_2stout_2check_8hpp.html#ab8738e43a60086f3b434c0278933e85e">CHECK_NONE</a></div><div class="ttdeci">#define CHECK_NONE(expression)</div><div class="ttdef"><b>Definition:</b> check.hpp:48</div></div> <div class="ttc" id="3rdparty_2stout_2include_2stout_2windows_8hpp_html_aead39710af2622ee9b0d412f62e90aa5"><div class="ttname"><a href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#aead39710af2622ee9b0d412f62e90aa5">S_IWUSR</a></div><div class="ttdeci">const mode_t S_IWUSR</div><div class="ttdef"><b>Definition:</b> windows.hpp:312</div></div> @@ -1127,7 +1129,7 @@ <div class="ttc" id="namespaceos_html_af0f3343df38b8241f66750a273d4a5a6"><div class="ttname"><a href="namespaceos.html#af0f3343df38b8241f66750a273d4a5a6">os::mkdir</a></div><div class="ttdeci">Try< Nothing > mkdir(const std::string &directory, bool recursive=true)</div><div class="ttdef"><b>Definition:</b> mkdir.hpp:31</div></div> <div class="ttc" id="classprocess_1_1ProcessBase_html_a6baf49d6234eb638d068a98514e4ae3f"><div class="ttname"><a href="classprocess_1_1ProcessBase.html#a6baf49d6234eb638d068a98514e4ae3f">process::ProcessBase::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Invoked when a process gets spawned. </div><div class="ttdef"><b>Definition:</b> process.hpp:100</div></div> <div class="ttc" id="classmesos_1_1internal_1_1StatusUpdateManagerProcess_html_ada5dee44c0cc874403efa6c2c3cde9d2"><div class="ttname"><a href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#ada5dee44c0cc874403efa6c2c3cde9d2">mesos::internal::StatusUpdateManagerProcess::initialize</a></div><div class="ttdeci">void initialize(const lambda::function< void(const UpdateType &)> &_forwardCallback, const lambda::function< const std::string(const IDType &)> &_getPath)</div><div class="ttdef"><b>Definition:</b> status_update_manager_process.hpp:133</div></div> -<div class="ttc" id="structid_1_1UUID_html"><div class="ttname"><a href="structid_1_1UUID.html">id::UUID</a></div><div class="ttdef"><b>Definition:</b> uuid.hpp:40</div></div> +<div class="ttc" id="structid_1_1UUID_html"><div class="ttname"><a href="structid_1_1UUID.html">id::UUID</a></div><div class="ttdef"><b>Definition:</b> uuid.hpp:35</div></div> <div class="ttc" id="option_8hpp_html_a78407a45187058b9b4ef2042accb9bc4"><div class="ttname"><a href="option_8hpp.html#a78407a45187058b9b4ef2042accb9bc4">min</a></div><div class="ttdeci">Option< T > min(const Option< T > &left, const Option< T > &right)</div><div class="ttdef"><b>Definition:</b> option.hpp:170</div></div> <div class="ttc" id="namespaceprocess_html_ad46335bec9fe626e60003c33e8f13023"><div class="ttname"><a href="namespaceprocess.html#ad46335bec9fe626e60003c33e8f13023">process::delay</a></div><div class="ttdeci">Timer delay(const Duration &duration, const PID< T > &pid, void(T::*method)())</div><div class="ttdef"><b>Definition:</b> delay.hpp:31</div></div> <div class="ttc" id="src_2slave_2constants_8hpp_html"><div class="ttname"><a href="src_2slave_2constants_8hpp.html">constants.hpp</a></div></div> @@ -1136,7 +1138,6 @@ <div class="ttc" id="3rdparty_2stout_2include_2stout_2protobuf_8hpp_html"><div class="ttname"><a href="3rdparty_2stout_2include_2stout_2protobuf_8hpp.html">protobuf.hpp</a></div></div> <div class="ttc" id="classProtobufProcess_html"><div class="ttname"><a href="classProtobufProcess.html">ProtobufProcess</a></div><div class="ttdef"><b>Definition:</b> protobuf.hpp:100</div></div> <div class="ttc" id="foreach_8hpp_html_a28670619e64a84270d76f07b0f6eb3b6"><div class="ttname"><a href="foreach_8hpp.html#a28670619e64a84270d76f07b0f6eb3b6">foreachvalue</a></div><div class="ttdeci">#define foreachvalue(VALUE, ELEMS)</div><div class="ttdef"><b>Definition:</b> foreach.hpp:77</div></div> -<div class="ttc" id="classmesos_1_1internal_1_1StatusUpdateManagerProcess_html_aaae7192b8a53cb1ad5b745cddeacc42b"><div class="ttname"><a href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#aaae7192b8a53cb1ad5b745cddeacc42b">mesos::internal::StatusUpdateManagerProcess::acknowledgement</a></div><div class="ttdeci">process::Future< bool > acknowledgement(const IDType &streamId, const UUID &uuid)</div><div class="ttdef"><b>Definition:</b> status_update_manager_process.hpp:246</div></div> <div class="ttc" id="classResult_html_aedf79f3b14dcda5791b84a64ada4d412"><div class="ttname"><a href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">Result::get</a></div><div class="ttdeci">const T & get() const </div><div class="ttdef"><b>Definition:</b> result.hpp:112</div></div> <div class="ttc" id="option_8
<TRUNCATED>
