You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gi...@apache.org on 2017/12/16 00:46:20 UTC
[2/3] mesos-site git commit: Updated the website built from mesos
SHA: a4b1134.
http://git-wip-us.apache.org/repos/asf/mesos-site/blob/db43ea8a/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 fff3090..f21b772 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
@@ -688,390 +688,403 @@
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="comment">// Open the updates file.</span></div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <a class="code" href="classTry.html">Try<int_fd></a> result = <a class="code" href="namespaceos.html#abbdbbbe902fd8dc271077d94b99994e7">os::open</a>(</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  path.<a class="code" href="classOption.html#a21358442c0fac1cc978a67a9a9089a79">get</a>(),</div>
-<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <a class="code" href="windows_2fcntl_8hpp.html#a1cf6b1de1fffedaa1d26b189e9a8d2cc">O_CREAT</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a2ecbb6269fcd18d1c24f57e832e0c826">O_SYNC</a> | <a class="code" href="windows_2fcntl_8hpp.html#a11b644a8526139c4cc1850dac1271ced">O_WRONLY</a> | <a class="code" href="windows_2fcntl_8hpp.html#ad6d8fbe4e494b4dbe051612572d3f757">O_CLOEXEC</a>,</div>
-<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a66cff14a0638cde9f422c7a4b0938e61">S_IRUSR</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#aead39710af2622ee9b0d412f62e90aa5">S_IWUSR</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a55fad1c3746e1b8a6a00c10998e91d91">S_IRGRP</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a90d7514882640a8cd7b8da14138103b7">S_IROTH</a>);</div>
-<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div>
-<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
-<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="stringliteral">"Failed to open '"</span> + path.<a class="code" href="classOption.html#a21358442c0fac1cc978a67a9a9089a79">get</a>() + <span class="stringliteral">"' : "</span> + result.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
-<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  }</div>
-<div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div>
-<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  fd = result.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>();</div>
-<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }</div>
+<div class="line"><a name="l00637"></a><span class="lineno"> 637</span> <span class="preprocessor">#ifdef __WINDOWS__</span></div>
+<div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"></span> O_BINARY |</div>
+<div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor">#endif // __WINDOWS__</span></div>
+<div class="line"><a name="l00640"></a><span class="lineno"> 640</span> <span class="preprocessor"></span> <a class="code" href="windows_2fcntl_8hpp.html#a1cf6b1de1fffedaa1d26b189e9a8d2cc">O_CREAT</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a2ecbb6269fcd18d1c24f57e832e0c826">O_SYNC</a> | <a class="code" href="windows_2fcntl_8hpp.html#a11b644a8526139c4cc1850dac1271ced">O_WRONLY</a> | <a class="code" href="windows_2fcntl_8hpp.html#ad6d8fbe4e494b4dbe051612572d3f757">O_CLOEXEC</a>,</div>
+<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a66cff14a0638cde9f422c7a4b0938e61">S_IRUSR</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#aead39710af2622ee9b0d412f62e90aa5">S_IWUSR</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a55fad1c3746e1b8a6a00c10998e91d91">S_IRGRP</a> | <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a90d7514882640a8cd7b8da14138103b7">S_IROTH</a>);</div>
+<div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div>
+<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
+<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="stringliteral">"Failed to open '"</span> + path.<a class="code" href="classOption.html#a21358442c0fac1cc978a67a9a9089a79">get</a>() + <span class="stringliteral">"' : "</span> + result.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
+<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  }</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div>
-<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  process::Owned<StatusUpdateStream> stream(</div>
-<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keyword">new</span> StatusUpdateStream(statusUpdateType, streamId, path, fd));</div>
+<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  fd = result.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>();</div>
+<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div>
-<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  stream->frameworkId = frameworkId;</div>
-<div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div>
-<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keywordflow">return</span> std::move(stream);</div>
-<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  }</div>
+<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  process::Owned<StatusUpdateStream> stream(</div>
+<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keyword">new</span> StatusUpdateStream(statusUpdateType, streamId, path, fd));</div>
+<div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div>
+<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  stream->frameworkId = frameworkId;</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span> </div>
-<div class="line"><a name="l00656"></a><span class="lineno"> 656</span> </div>
-<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keyword">static</span> <a class="code" href="classResult.html">Result<std::pair<process::Owned<StatusUpdateStream></a>, State>> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#ab8a393d0453cc8174d71dad6f1e45d6f">recover</a>(</div>
-<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keyword">const</span> std::string& statusUpdateType,</div>
-<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">const</span> IDType& streamId,</div>
-<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keyword">const</span> std::string& path,</div>
-<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordtype">bool</span> strict)</div>
-<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  {</div>
-<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceos.html#a69b3969276ffa4cb698b9431ee43bd7c">os::exists</a>(<a class="code" href="classPath.html">Path</a>(path).dirname()) && !<a class="code" href="namespaceos.html#a69b3969276ffa4cb698b9431ee43bd7c">os::exists</a>(path)) {</div>
-<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="comment">// This could happen if the process died before it checkpointed any</span></div>
-<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="comment">// status updates.</span></div>
-<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</a>();</div>
-<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  }</div>
-<div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div>
-<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="comment">// Open the status updates file for reading and writing.</span></div>
-<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <a class="code" href="classTry.html">Try<int_fd></a> fd = <a class="code" href="namespaceos.html#abbdbbbe902fd8dc271077d94b99994e7">os::open</a>(path, <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a2ecbb6269fcd18d1c24f57e832e0c826">O_SYNC</a> | <a class="code" href="windows_2fcntl_8hpp.html#abb0586253488ee61072b73557eeb873b">O_RDWR</a> | <a class="code" href="windows_2fcntl_8hpp.html#ad6d8fbe4e494b4dbe051612572d3f757">O_CLOEXEC</a>);</div>
+<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">return</span> std::move(stream);</div>
+<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  }</div>
+<div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div>
+<div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div>
+<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keyword">static</span> <a class="code" href="classResult.html">Result<std::pair<process::Owned<StatusUpdateStream></a>, State>> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#ab8a393d0453cc8174d71dad6f1e45d6f">recover</a>(</div>
+<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keyword">const</span> std::string& statusUpdateType,</div>
+<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keyword">const</span> IDType& streamId,</div>
+<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keyword">const</span> std::string& path,</div>
+<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordtype">bool</span> strict)</div>
+<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  {</div>
+<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceos.html#a69b3969276ffa4cb698b9431ee43bd7c">os::exists</a>(<a class="code" href="classPath.html">Path</a>(path).dirname()) && !<a class="code" href="namespaceos.html#a69b3969276ffa4cb698b9431ee43bd7c">os::exists</a>(path)) {</div>
+<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="comment">// This could happen if the process died before it checkpointed any</span></div>
+<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="comment">// status updates.</span></div>
+<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</a>();</div>
+<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  }</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div>
-<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">if</span> (fd.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">"Failed to open '"</span> + path + <span class="stringliteral">"': "</span> + fd.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
-<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  }</div>
-<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div>
-<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  process::Owned<StatusUpdateStream> stream(</div>
-<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keyword">new</span> StatusUpdateStream(statusUpdateType, streamId, path, fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>()));</div>
-<div class="line"><a name="l00678"></a><span class="lineno"> 678</span> </div>
-<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  VLOG(1) << <span class="stringliteral">"Replaying "</span> << statusUpdateType << <span class="stringliteral">" stream "</span></div>
-<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  << <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(streamId);</div>
-<div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div>
-<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="comment">// Read the updates/acknowledgments, building both the stream's in-memory</span></div>
-<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="comment">// structures and the state object which will be returned.</span></div>
-<div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div>
-<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  State state;</div>
-<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <a class="code" href="classResult.html">Result<CheckpointType></a> record = <a class="code" href="structNone.html">None</a>();</div>
-<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
-<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="comment">// Ignore errors due to partial protobuf read and enable undoing failed</span></div>
-<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <span class="comment">// reads by reverting to the previous seek position.</span></div>
-<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  record = ::protobuf::read<CheckpointType>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), <span class="keyword">true</span>, <span class="keyword">true</span>);</div>
-<div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div>
-<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">if</span> (!record.<a class="code" href="classResult.html#a85eaa52037223d71092e65701c166562">isSome</a>()) {</div>
-<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  }</div>
-<div class="line"><a name="l00695"></a><span class="lineno"> 695</span> </div>
-<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">switch</span> (record->type()) {</div>
-<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">case</span> CheckpointType::ACK: {</div>
-<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="comment">// Get the corresponding update for this ACK.</span></div>
-<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keyword">const</span> <a class="code" href="classResult.html">Result<UpdateType></a>& update = stream->next();</div>
-<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">if</span> (update.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div>
-<div class="line"><a name="l00701"></a><span class="lineno"> 701</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="l00702"></a><span class="lineno"> 702</span>  }</div>
+<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="comment">// Open the status updates file for reading and writing.</span></div>
+<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <a class="code" href="classTry.html">Try<int_fd></a> fd = <a class="code" href="namespaceos.html#abbdbbbe902fd8dc271077d94b99994e7">os::open</a>(</div>
+<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  path,</div>
+<div class="line"><a name="l00675"></a><span class="lineno"> 675</span> #ifdef __WINDOWS__</div>
+<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  O_BINARY |</div>
+<div class="line"><a name="l00677"></a><span class="lineno"> 677</span> #endif <span class="comment">// __WINDOWS__</span></div>
+<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <a class="code" href="3rdparty_2stout_2include_2stout_2windows_8hpp.html#a2ecbb6269fcd18d1c24f57e832e0c826">O_SYNC</a> | <a class="code" href="windows_2fcntl_8hpp.html#abb0586253488ee61072b73557eeb873b">O_RDWR</a> | <a class="code" href="windows_2fcntl_8hpp.html#ad6d8fbe4e494b4dbe051612572d3f757">O_CLOEXEC</a>);</div>
+<div class="line"><a name="l00679"></a><span class="lineno"> 679</span> </div>
+<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (fd.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">"Failed to open '"</span> + path + <span class="stringliteral">"': "</span> + fd.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
+<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div>
+<div class="line"><a name="l00683"></a><span class="lineno"> 683</span> </div>
+<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  process::Owned<StatusUpdateStream> stream(</div>
+<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keyword">new</span> StatusUpdateStream(statusUpdateType, streamId, path, fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>()));</div>
+<div class="line"><a name="l00686"></a><span class="lineno"> 686</span> </div>
+<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  VLOG(1) << <span class="stringliteral">"Replaying "</span> << statusUpdateType << <span class="stringliteral">" stream "</span></div>
+<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  << <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(streamId);</div>
+<div class="line"><a name="l00689"></a><span class="lineno"> 689</span> </div>
+<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="comment">// Read the updates/acknowledgments, building both the stream's in-memory</span></div>
+<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="comment">// structures and the state object which will be returned.</span></div>
+<div class="line"><a name="l00692"></a><span class="lineno"> 692</span> </div>
+<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  State state;</div>
+<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <a class="code" href="classResult.html">Result<CheckpointType></a> record = <a class="code" href="structNone.html">None</a>();</div>
+<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
+<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="comment">// Ignore errors due to partial protobuf read and enable undoing failed</span></div>
+<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="comment">// reads by reverting to the previous seek position.</span></div>
+<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  record = ::protobuf::read<CheckpointType>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), <span class="keyword">true</span>, <span class="keyword">true</span>);</div>
+<div class="line"><a name="l00699"></a><span class="lineno"> 699</span> </div>
+<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">if</span> (!record.<a class="code" href="classResult.html#a85eaa52037223d71092e65701c166562">isSome</a>()) {</div>
+<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  }</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div>
-<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">if</span> (update.<a class="code" href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div>
-<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
-<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="stringliteral">"Unexpected "</span> + statusUpdateType + <span class="stringliteral">" acknowledgment"</span></div>
-<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="stringliteral">" (UUID: "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(record->uuid()) +</div>
-<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="stringliteral">") for stream "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(streamId));</div>
-<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  }</div>
-<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  stream->_handle(update.<a class="code" href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>(), record->type());</div>
-<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  }</div>
-<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordflow">case</span> CheckpointType::UPDATE: {</div>
-<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  stream->_handle(record->update(), record->type());</div>
-<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  state.updates.push_back(record->update());</div>
-<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordflow">break</span>;</div>
-<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div>
-<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  }</div>
-<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  }</div>
-<div class="line"><a name="l00720"></a><span class="lineno"> 720</span> </div>
-<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="comment">// Always truncate the file to contain only valid updates.</span></div>
-<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="comment">// NOTE: This is safe even though we ignore partial protobuf read</span></div>
-<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="comment">// errors above, because the `fd` is properly set to the end of the</span></div>
-<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="comment">// last valid update by `protobuf::read()`.</span></div>
-<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <a class="code" href="classTry.html">Try<off_t></a> currentPosition = <a class="code" href="namespaceos.html#ae933a0291b9f1195709f10b568daccac">os::lseek</a>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), 0, SEEK_CUR);</div>
-<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">if</span> (currentPosition.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
-<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="stringliteral">"Failed to lseek file '"</span> + path + <span class="stringliteral">"': "</span> + currentPosition.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
-<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  }</div>
-<div class="line"><a name="l00730"></a><span class="lineno"> 730</span> </div>
-<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <a class="code" href="classTry.html">Try<Nothing></a> truncated = <a class="code" href="namespaceos.html#af41b169df092f5afbd41de13c450e959">os::ftruncate</a>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), currentPosition.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>());</div>
-<div class="line"><a name="l00732"></a><span class="lineno"> 732</span> </div>
-<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <span class="keywordflow">if</span> (truncated.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
-<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="stringliteral">"Failed to truncate file '"</span> + path + <span class="stringliteral">"': "</span> + truncated.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
-<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  }</div>
-<div class="line"><a name="l00737"></a><span class="lineno"> 737</span> </div>
-<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  <span class="comment">// After reading a non-corrupted updates file, `record` should be `none`.</span></div>
-<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">if</span> (record.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div>
-<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  std::string <a class="code" href="classprocess_1_1ProcessBase.html#afb219ae4b5e8dab3f724e78032e03d0c">message</a> =</div>
-<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="stringliteral">"Failed to read file '"</span> + path + <span class="stringliteral">"': "</span> + record.<a class="code" href="classResult.html#a521adf96f5c27d26d6b1d580aae8aaee">error</a>();</div>
-<div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div>
-<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (strict) {</div>
-<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(message);</div>
-<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  }</div>
-<div class="line"><a name="l00746"></a><span class="lineno"> 746</span> </div>
-<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  LOG(WARNING) << <a class="code" href="classprocess_1_1ProcessBase.html#afb219ae4b5e8dab3f724e78032e03d0c">message</a>;</div>
-<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  state.error = <span class="keyword">true</span>;</div>
-<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  }</div>
+<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">switch</span> (record->type()) {</div>
+<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">case</span> CheckpointType::ACK: {</div>
+<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="comment">// Get the corresponding update for this ACK.</span></div>
+<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keyword">const</span> <a class="code" href="classResult.html">Result<UpdateType></a>& update = stream->next();</div>
+<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordflow">if</span> (update.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div>
+<div class="line"><a name="l00709"></a><span class="lineno"> 709</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="l00710"></a><span class="lineno"> 710</span>  }</div>
+<div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div>
+<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">if</span> (update.<a class="code" href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div>
+<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
+<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="stringliteral">"Unexpected "</span> + statusUpdateType + <span class="stringliteral">" acknowledgment"</span></div>
+<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  <span class="stringliteral">" (UUID: "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(record->uuid()) +</div>
+<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="stringliteral">") for stream "</span> + <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(streamId));</div>
+<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div>
+<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  stream->_handle(update.<a class="code" href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>(), record->type());</div>
+<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  }</div>
+<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">case</span> CheckpointType::UPDATE: {</div>
+<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  stream->_handle(record->update(), record->type());</div>
+<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  state.updates.push_back(record->update());</div>
+<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">break</span>;</div>
+<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  }</div>
+<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  }</div>
+<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  }</div>
+<div class="line"><a name="l00728"></a><span class="lineno"> 728</span> </div>
+<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="comment">// Always truncate the file to contain only valid updates.</span></div>
+<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="comment">// NOTE: This is safe even though we ignore partial protobuf read</span></div>
+<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="comment">// errors above, because the `fd` is properly set to the end of the</span></div>
+<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="comment">// last valid update by `protobuf::read()`.</span></div>
+<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="classTry.html">Try<off_t></a> currentPosition = <a class="code" href="namespaceos.html#ae933a0291b9f1195709f10b568daccac">os::lseek</a>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), 0, SEEK_CUR);</div>
+<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">if</span> (currentPosition.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
+<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="stringliteral">"Failed to lseek file '"</span> + path + <span class="stringliteral">"': "</span> + currentPosition.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
+<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>  }</div>
+<div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div>
+<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  <a class="code" href="classTry.html">Try<Nothing></a> truncated = <a class="code" href="namespaceos.html#af41b169df092f5afbd41de13c450e959">os::ftruncate</a>(fd.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>(), currentPosition.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>());</div>
+<div class="line"><a name="l00740"></a><span class="lineno"> 740</span> </div>
+<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordflow">if</span> (truncated.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
+<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="stringliteral">"Failed to truncate file '"</span> + path + <span class="stringliteral">"': "</span> + truncated.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
+<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  }</div>
+<div class="line"><a name="l00745"></a><span class="lineno"> 745</span> </div>
+<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="comment">// After reading a non-corrupted updates file, `record` should be `none`.</span></div>
+<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">if</span> (record.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div>
+<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  std::string <a class="code" href="classprocess_1_1ProcessBase.html#afb219ae4b5e8dab3f724e78032e03d0c">message</a> =</div>
+<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="stringliteral">"Failed to read file '"</span> + path + <span class="stringliteral">"': "</span> + record.<a class="code" href="classResult.html#a521adf96f5c27d26d6b1d580aae8aaee">error</a>();</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span> </div>
-<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  state.terminated = stream->terminated;</div>
-<div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div>
-<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (state.updates.empty()) {</div>
-<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="comment">// A stream is created only once there's something to write to it, so</span></div>
-<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="comment">// this can only happen if the checkpointing of the first update was</span></div>
-<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="comment">// interrupted.</span></div>
-<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <a class="code" href="classTry.html">Try<Nothing></a> <a class="code" href="namespacerouting_1_1link.html#aec1d046cc8ec45a0265d0522d673ade8">removed</a> = <a class="code" href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">os::rm</a>(path);</div>
+<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">if</span> (strict) {</div>
+<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(message);</div>
+<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  }</div>
+<div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div>
+<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  LOG(WARNING) << <a class="code" href="classprocess_1_1ProcessBase.html#afb219ae4b5e8dab3f724e78032e03d0c">message</a>;</div>
+<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  state.error = <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  }</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div>
-<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">if</span> (removed.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
-<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="stringliteral">"Failed to remove file '"</span> + path + <span class="stringliteral">"': "</span> + removed.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
-<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  }</div>
-<div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div>
-<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</a>();</div>
-<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  }</div>
-<div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div>
-<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keywordflow">return</span> std::make_pair(stream, state);</div>
-<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  }</div>
-<div class="line"><a name="l00769"></a><span class="lineno"> 769</span> </div>
-<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="comment">// This function handles the update, checkpointing if necessary.</span></div>
-<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <span class="comment">//</span></div>
-<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <span class="comment">// Returns `true`: if the update is successfully handled.</span></div>
-<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="comment">// `false`: if the update is a duplicate or has already been</span></div>
-<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="comment">// acknowledged.</span></div>
-<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="comment">// `Error`: any errors (e.g., checkpointing).</span></div>
-<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <a class="code" href="classTry.html">Try<bool></a> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>(<span class="keyword">const</span> UpdateType& update)</div>
-<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  {</div>
-<div class="line"><a name="l00778"></a><span class="lineno"> 778</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="l00779"></a><span class="lineno"> 779</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="l00780"></a><span class="lineno"> 780</span>  }</div>
-<div class="line"><a name="l00781"></a><span class="lineno"> 781</span> </div>
-<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div>
-<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div>
-<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div>
-<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="comment">// depending on identical field names.</span></div>
-<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">if</span> (!update.status().has_status_uuid()) {</div>
-<div class="line"><a name="l00787"></a><span class="lineno"> 787</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="l00788"></a><span class="lineno"> 788</span>  }</div>
-<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <a class="code" href="classTry.html">Try<id::UUID></a> statusUuid =</div>
-<div class="line"><a name="l00790"></a><span class="lineno"> 790</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="l00791"></a><span class="lineno"> 791</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(statusUuid);</div>
-<div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div>
-<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <span class="comment">// Check that this status update has not already been acknowledged.</span></div>
-<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">if</span> (acknowledged.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div>
-<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring "</span> << statusUpdateType << <span class="stringliteral">" "</span> << update</div>
-<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  << <span class="stringliteral">" that has already been acknowledged"</span>;</div>
-<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  }</div>
-<div class="line"><a name="l00799"></a><span class="lineno"> 799</span> </div>
-<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="comment">// Check that this update has not already been received.</span></div>
-<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (received.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div>
-<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring duplicate "</span> << statusUpdateType << <span class="stringliteral">" "</span></div>
-<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div>
-<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  }</div>
-<div class="line"><a name="l00806"></a><span class="lineno"> 806</span> </div>
-<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="comment">// Handle the update, checkpointing if necessary.</span></div>
-<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::UPDATE);</div>
-<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00810"></a><span class="lineno"> 810</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="l00759"></a><span class="lineno"> 759</span>  state.terminated = stream->terminated;</div>
+<div class="line"><a name="l00760"></a><span class="lineno"> 760</span> </div>
+<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">if</span> (state.updates.empty()) {</div>
+<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="comment">// A stream is created only once there's something to write to it, so</span></div>
+<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="comment">// this can only happen if the checkpointing of the first update was</span></div>
+<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="comment">// interrupted.</span></div>
+<div class="line"><a name="l00765"></a><span class="lineno"> 765</span> </div>
+<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="comment">// On Windows you can only delete a file if it is not open. The</span></div>
+<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="comment">// stream's destructor will close the file, so we need to destroy it</span></div>
+<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="comment">// here.</span></div>
+<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  stream.reset();</div>
+<div class="line"><a name="l00770"></a><span class="lineno"> 770</span> </div>
+<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <a class="code" href="classTry.html">Try<Nothing></a> <a class="code" href="namespacerouting_1_1link.html#aec1d046cc8ec45a0265d0522d673ade8">removed</a> = <a class="code" href="namespaceos.html#ac1c8ce3595084d78291f98c2be9f62ba">os::rm</a>(path);</div>
+<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  <span class="keywordflow">if</span> (removed.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
+<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="stringliteral">"Failed to remove file '"</span> + path + <span class="stringliteral">"': "</span> + removed.<a class="code" href="classTry.html#aec4a11ddd3c036e889d90b7eb6258ba7">error</a>());</div>
+<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  }</div>
+<div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div>
+<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</a>();</div>
+<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  }</div>
+<div class="line"><a name="l00779"></a><span class="lineno"> 779</span> </div>
+<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">return</span> std::make_pair(stream, state);</div>
+<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div>
+<div class="line"><a name="l00782"></a><span class="lineno"> 782</span> </div>
+<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="comment">// This function handles the update, checkpointing if necessary.</span></div>
+<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="comment">//</span></div>
+<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <span class="comment">// Returns `true`: if the update is successfully handled.</span></div>
+<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="comment">// `false`: if the update is a duplicate or has already been</span></div>
+<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <span class="comment">// acknowledged.</span></div>
+<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="comment">// `Error`: any errors (e.g., checkpointing).</span></div>
+<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <a class="code" href="classTry.html">Try<bool></a> <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>(<span class="keyword">const</span> UpdateType& update)</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="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="l00792"></a><span class="lineno"> 792</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="l00793"></a><span class="lineno"> 793</span>  }</div>
+<div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div>
+<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div>
+<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div>
+<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div>
+<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="comment">// depending on identical field names.</span></div>
+<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordflow">if</span> (!update.status().has_status_uuid()) {</div>
+<div class="line"><a name="l00800"></a><span class="lineno"> 800</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="l00801"></a><span class="lineno"> 801</span>  }</div>
+<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <a class="code" href="classTry.html">Try<id::UUID></a> statusUuid =</div>
+<div class="line"><a name="l00803"></a><span class="lineno"> 803</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="l00804"></a><span class="lineno"> 804</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(statusUuid);</div>
+<div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div>
+<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="comment">// Check that this status update has not already been acknowledged.</span></div>
+<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">if</span> (acknowledged.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div>
+<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring "</span> << statusUpdateType << <span class="stringliteral">" "</span> << update</div>
+<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  << <span class="stringliteral">" that has already been acknowledged"</span>;</div>
+<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">return</span> <span class="keyword">false</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="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  }</div>
-<div class="line"><a name="l00815"></a><span class="lineno"> 815</span> </div>
-<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="comment">// This function handles the ACK, checkpointing if necessary.</span></div>
-<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">//</span></div>
-<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// Returns `true`: if the acknowledgement is successfully handled.</span></div>
-<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="comment">// `false`: if the acknowledgement is a duplicate.</span></div>
-<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  <span class="comment">// `Error`: Any errors (e.g., checkpointing).</span></div>
-<div class="line"><a name="l00821"></a><span class="lineno"> 821</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="l00822"></a><span class="lineno"> 822</span>  {</div>
-<div class="line"><a name="l00823"></a><span class="lineno"> 823</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="l00824"></a><span class="lineno"> 824</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="l00825"></a><span class="lineno"> 825</span>  }</div>
-<div class="line"><a name="l00826"></a><span class="lineno"> 826</span> </div>
-<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="comment">// Get the corresponding update for this ACK.</span></div>
-<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keyword">const</span> <a class="code" href="classResult.html">Result<UpdateType></a>& update_ = next();</div>
-<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div>
-<div class="line"><a name="l00830"></a><span class="lineno"> 830</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="l00831"></a><span class="lineno"> 831</span>  }</div>
-<div class="line"><a name="l00832"></a><span class="lineno"> 832</span> </div>
-<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="comment">// This might happen if we retried a status update and got back</span></div>
-<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div>
-<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div>
-<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
-<div class="line"><a name="l00837"></a><span class="lineno"> 837</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="l00838"></a><span class="lineno"> 838</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="l00839"></a><span class="lineno"> 839</span>  }</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="keyword">const</span> UpdateType& update = update_.<a class="code" href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>();</div>
-<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div>
-<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">if</span> (acknowledged.contains(statusUuid)) {</div>
-<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  LOG(WARNING) << <span class="stringliteral">"Duplicate acknowledgment for "</span> << statusUpdateType</div>
-<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div>
-<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
-<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  }</div>
-<div class="line"><a name="l00848"></a><span class="lineno"> 848</span> </div>
-<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div>
-<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div>
-<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div>
-<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="comment">// depending on identical field names.</span></div>
-<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <a class="code" href="classTry.html">Try<id::UUID></a> updateStatusUuid =</div>
-<div class="line"><a name="l00854"></a><span class="lineno"> 854</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="l00855"></a><span class="lineno"> 855</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(updateStatusUuid);</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>  <span class="comment">// This might happen if we retried a status update and got back</span></div>
-<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div>
-<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">if</span> (statusUuid != updateStatusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>()) {</div>
-<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  LOG(WARNING) << <span class="stringliteral">"Unexpected "</span> << statusUpdateType</div>
-<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  << <span class="stringliteral">" acknowledgment (received "</span> << statusUuid</div>
-<div class="line"><a name="l00862"></a><span class="lineno"> 862</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="l00863"></a><span class="lineno"> 863</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div>
-<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</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> </div>
-<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="comment">// Handle the ACK, checkpointing if necessary.</span></div>
-<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::ACK);</div>
-<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
-<div class="line"><a name="l00870"></a><span class="lineno"> 870</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="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="keywordflow">return</span> <span class="keyword">true</span>;</div>
-<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</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="comment">// Returns the next update (or none, if empty) in the queue.</span></div>
-<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <a class="code" href="classResult.html">Result<UpdateType></a> next()</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="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="l00880"></a><span class="lineno"> 880</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="l00881"></a><span class="lineno"> 881</span>  }</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>  <span class="keywordflow">if</span> (!<a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.empty()) {</div>
-<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>.front();</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="keywordflow">return</span> <a class="code" href="structNone.html">None</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"> 889</span> </div>
-<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="comment">// Returns `true` if the stream is checkpointed, `false` otherwise.</span></div>
-<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordtype">bool</span> checkpointed() { <span class="keywordflow">return</span> path.isSome(); }</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="keyword">const</span> IDType streamId;</div>
-<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> </div>
-<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordtype">bool</span> terminated;</div>
-<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <a class="code" href="classOption.html">Option<FrameworkID></a> frameworkId;</div>
-<div class="line"><a name="l00897"></a><span class="lineno"> 897</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="l00898"></a><span class="lineno"> 898</span>  std::queue<UpdateType> <a class="code" href="namespaceos_1_1signals.html#a712c95e437c6ae6caa6fbc6dcce30f26">pending</a>;</div>
+<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="comment">// Check that this update has not already been received.</span></div>
+<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordflow">if</span> (received.contains(statusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>())) {</div>
+<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  LOG(WARNING) << <span class="stringliteral">"Ignoring duplicate "</span> << statusUpdateType << <span class="stringliteral">" "</span></div>
+<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div>
+<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  }</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="comment">// Handle the update, checkpointing if necessary.</span></div>
+<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::UPDATE);</div>
+<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a name="l00823"></a><span class="lineno"> 823</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="l00824"></a><span class="lineno"> 824</span>  }</div>
+<div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div>
+<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  }</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>  <span class="comment">// This function handles the ACK, checkpointing if necessary.</span></div>
+<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <span class="comment">//</span></div>
+<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <span class="comment">// Returns `true`: if the acknowledgement is successfully handled.</span></div>
+<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="comment">// `false`: if the acknowledgement is a duplicate.</span></div>
+<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="comment">// `Error`: Any errors (e.g., checkpointing).</span></div>
+<div class="line"><a name="l00834"></a><span class="lineno"> 834</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="l00835"></a><span class="lineno"> 835</span>  {</div>
+<div class="line"><a name="l00836"></a><span class="lineno"> 836</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="l00837"></a><span class="lineno"> 837</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="l00838"></a><span class="lineno"> 838</span>  }</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="comment">// Get the corresponding update for this ACK.</span></div>
+<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keyword">const</span> <a class="code" href="classResult.html">Result<UpdateType></a>& update_ = next();</div>
+<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#aeca16ad17d299ad885c9b46c83b12a3d">isError</a>()) {</div>
+<div class="line"><a name="l00843"></a><span class="lineno"> 843</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="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">// This might happen if we retried a status update and got back</span></div>
+<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div>
+<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">if</span> (update_.<a class="code" href="classResult.html#ac2cdc0db9f9d29a5bb2f1cf19c29da49">isNone</a>()) {</div>
+<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(</div>
+<div class="line"><a name="l00850"></a><span class="lineno"> 850</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="l00851"></a><span class="lineno"> 851</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="l00852"></a><span class="lineno"> 852</span>  }</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="keyword">const</span> UpdateType& update = update_.<a class="code" href="classResult.html#aedf79f3b14dcda5791b84a64ada4d412">get</a>();</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>  <span class="keywordflow">if</span> (acknowledged.contains(statusUuid)) {</div>
+<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  LOG(WARNING) << <span class="stringliteral">"Duplicate acknowledgment for "</span> << statusUpdateType</div>
+<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  << <span class="stringliteral">" "</span> << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div>
+<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div>
+<div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div>
+<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <span class="comment">// TODO(gkleiman): This won't work with `StatusUpdate`, because the field</span></div>
+<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <span class="comment">// containing the status update uuid has a different name. In order to</span></div>
+<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <span class="comment">// make the `TaskStatusUpdateManager` use this process, we should avoid</span></div>
+<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="comment">// depending on identical field names.</span></div>
+<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <a class="code" href="classTry.html">Try<id::UUID></a> updateStatusUuid =</div>
+<div class="line"><a name="l00867"></a><span class="lineno"> 867</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="l00868"></a><span class="lineno"> 868</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(updateStatusUuid);</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="comment">// This might happen if we retried a status update and got back</span></div>
+<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="comment">// acknowledgments for both the original and the retried update.</span></div>
+<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keywordflow">if</span> (statusUuid != updateStatusUuid.<a class="code" href="classTry.html#a7be0768038e0628632492edf6cc1515a">get</a>()) {</div>
+<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  LOG(WARNING) << <span class="stringliteral">"Unexpected "</span> << statusUpdateType</div>
+<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  << <span class="stringliteral">" acknowledgment (received "</span> << statusUuid</div>
+<div class="line"><a name="l00875"></a><span class="lineno"> 875</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="l00876"></a><span class="lineno"> 876</span>  << <a class="code" href="classmesos_1_1internal_1_1StatusUpdateManagerProcess.html#a1658b4adb952dc5e20465e31d572633b">update</a>;</div>
+<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> <span class="keyword">false</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>  <span class="comment">// Handle the ACK, checkpointing if necessary.</span></div>
+<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="classTry.html">Try<Nothing></a> result = handle(update, CheckpointType::ACK);</div>
+<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">if</span> (result.<a class="code" href="classTry.html#a0b98f95163b8a38daafd1651b043a276">isError</a>()) {</div>
+<div class="line"><a na
<TRUNCATED>