http://git-wip-us.apache.org/repos/asf/mesos-site/blob/53f3d240/content/api/latest/c++/src_2master_2master_8hpp_source.html ---------------------------------------------------------------------- diff --git a/content/api/latest/c++/src_2master_2master_8hpp_source.html b/content/api/latest/c++/src_2master_2master_8hpp_source.html index 96d9e54..075838c 100644 --- a/content/api/latest/c++/src_2master_2master_8hpp_source.html +++ b/content/api/latest/c++/src_2master_2master_8hpp_source.html @@ -170,7 +170,7 @@ <div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div> <div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html"> 117</a></span> <span class="keyword">struct </span><a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html">Slave</a></div> <div class="line"><a name="l00118"></a><span class="lineno"> 118</span> {</div> -<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a299d31059b1a422f179f12e2b81c8463">Slave</a>(<a class="code" href="classmesos_1_1internal_1_1master_1_1Master.html">Master</a>* <span class="keyword">const</span> _master,</div> +<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#ad9989edad235edf8dfcb40cb68966469">Slave</a>(<a class="code" href="classmesos_1_1internal_1_1master_1_1Master.html">Master</a>* <span class="keyword">const</span> _master,</div> <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  SlaveInfo _info,</div> <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keyword">const</span> <a class="code" href="structprocess_1_1UPID.html">process::UPID</a>& _pid,</div> <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <span class="keyword">const</span> MachineID& _machineId,</div> @@ -178,7 +178,7 @@ <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  std::vector<SlaveInfo::Capability> _capabilites,</div> <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keyword">const</span> <a class="code" href="classprocess_1_1Time.html">process::Time</a>& _registeredTime,</div> <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  std::vector<Resource> _checkpointedResources,</div> -<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<id::UUID></a>& resourceVersion,</div> +<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<UUID></a>& resourceVersion,</div> <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  std::vector<ExecutorInfo> executorInfos = std::vector<ExecutorInfo>(),</div> <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  std::vector<Task> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#af31bd54cf2fd44fd1d95d1c898d6d2c8">tasks</a> = std::vector<Task>());</div> <div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div> @@ -206,7 +206,7 @@ <div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div> <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#acf415662b1183b6fc5b9a85e5c3bbbbe">removeOperation</a>(<a class="code" href="namespacecgroups_1_1blkio.html#a350b1eb57318afaea7700ab7786b55ef">Operation</a>* operation);</div> <div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div> -<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="namespacecgroups_1_1blkio.html#a350b1eb57318afaea7700ab7786b55ef">Operation</a>* <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a8e6bcddc552f8f4af9671a13fe041b5b">getOperation</a>(<span class="keyword">const</span> <a class="code" href="structid_1_1UUID.html">id::UUID</a>& uuid) <span class="keyword">const</span>;</div> +<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="namespacecgroups_1_1blkio.html#a350b1eb57318afaea7700ab7786b55ef">Operation</a>* <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a165609c395c72244513e2cc8e103f0a9">getOperation</a>(<span class="keyword">const</span> UUID& uuid) <span class="keyword">const</span>;</div> <div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div> <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#ac0e0040b54f748b44f56dbaa71e13f06">addOffer</a>(Offer* offer);</div> <div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div> @@ -230,12 +230,12 @@ <div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div> <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#ad599a4c248734bd05b36dd994599ab73">apply</a>(<span class="keyword">const</span> std::vector<ResourceConversion>& conversions);</div> <div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> -<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="classTry.html">Try<Nothing></a> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a087a1b1ecdd566388b31089aff7ba7ec">update</a>(</div> +<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="classTry.html">Try<Nothing></a> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#ac729a9714d67e9552ab8c587acdda8a8">update</a>(</div> <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keyword">const</span> SlaveInfo& <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#af4ee8827d405d9dcb03107dd04fa22ca">info</a>,</div> <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keyword">const</span> std::string& _version,</div> <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keyword">const</span> std::vector<SlaveInfo::Capability>& _capabilites,</div> <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>& _checkpointedResources,</div> -<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<id::UUID></a>& resourceVersion);</div> +<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">const</span> <a class="code" href="classOption.html">Option<UUID></a>& resourceVersion);</div> <div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div> <div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#a59f6d83e771ca1dc9bf7f3db88d9339d"> 186</a></span>  <a class="code" href="classmesos_1_1internal_1_1master_1_1Master.html">Master</a>* <span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a59f6d83e771ca1dc9bf7f3db88d9339d">master</a>;</div> <div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#a977de92e6e1fb9fa145aec95806be71f"> 187</a></span>  <span class="keyword">const</span> SlaveID <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a977de92e6e1fb9fa145aec95806be71f">id</a>;</div> @@ -299,7 +299,7 @@ <div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div> <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="comment">// Pending operations or terminal operations that have</span></div> <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="comment">// unacknowledged status updates on this agent.</span></div> -<div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#a640d0b7375333aa4e3fb1c696479d74a"> 248</a></span>  <a class="code" href="classhashmap.html">hashmap<id::UUID, Operation*></a> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a640d0b7375333aa4e3fb1c696479d74a">operations</a>;</div> +<div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#a4810733e4b2c0ff6c35ad5ade573ac75"> 248</a></span>  <a class="code" href="classhashmap.html">hashmap<UUID, Operation*></a> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a4810733e4b2c0ff6c35ad5ade573ac75">operations</a>;</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>  <span class="comment">// Active offers on this slave.</span></div> <div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#a9dbf820e6c564c4333f97eaff7136cb1"> 251</a></span>  <a class="code" href="classhashset.html">hashset<Offer*></a> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a9dbf820e6c564c4333f97eaff7136cb1">offers</a>;</div> @@ -332,11 +332,11 @@ <div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div> <div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#ace1f060347d268874173bac4c6e0a035"> 279</a></span>  SlaveObserver* <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#ace1f060347d268874173bac4c6e0a035">observer</a>;</div> <div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div> -<div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#a6a709976e522d37096cf8c48d2e3fd72"> 281</a></span>  <a class="code" href="classhashmap.html">hashmap<Option<ResourceProviderID></a>, <a class="code" href="structid_1_1UUID.html">id::UUID</a>> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a6a709976e522d37096cf8c48d2e3fd72">resourceVersions</a>;</div> +<div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#ad763dcc32cd2add5e670ae65c921b622"> 281</a></span>  <a class="code" href="classhashmap.html">hashmap<Option<ResourceProviderID></a>, UUID> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#ad763dcc32cd2add5e670ae65c921b622">resourceVersions</a>;</div> <div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Slave.html#a389358887487cad44e4f4a98ad12b1e9"> 282</a></span>  <a class="code" href="classhashmap.html">hashmap<ResourceProviderID, ResourceProviderInfo></a> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a389358887487cad44e4f4a98ad12b1e9">resourceProviders</a>;</div> <div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div> <div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">private</span>:</div> -<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#a299d31059b1a422f179f12e2b81c8463">Slave</a>(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html">Slave</a>&); <span class="comment">// No copying.</span></div> +<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html#ad9989edad235edf8dfcb40cb68966469">Slave</a>(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html">Slave</a>&); <span class="comment">// No copying.</span></div> <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html">Slave</a>& operator=(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Slave.html">Slave</a>&); <span class="comment">// No assigning.</span></div> <div class="line"><a name="l00287"></a><span class="lineno"> 287</span> };</div> <div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div> @@ -2454,506 +2454,504 @@ <div class="line"><a name="l02508"></a><span class="lineno"> 2508</span> </div> <div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>  <span class="keyword">const</span> FrameworkID& frameworkId = operation->framework_id();</div> <div class="line"><a name="l02510"></a><span class="lineno"> 2510</span> </div> -<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>  <a class="code" href="classTry.html">Try<id::UUID></a> uuid = <a class="code" href="structid_1_1UUID.html#afd66db1d29a4ee4be9c82581437dda74">id::UUID::fromBytes</a>(operation->uuid().value());</div> -<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(uuid);</div> -<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span> </div> -<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>  CHECK(!<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a62a748c068aad2de8153f3426a001f6a">operations</a>.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(uuid.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()))</div> -<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>  << <span class="stringliteral">"Duplicate operation '"</span> << operation->info().id()</div> -<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>  << <span class="stringliteral">"' (uuid: "</span> << uuid-><a class="code" href="structid_1_1UUID.html#af024badbc379374ac635031eed57dc5f">toString</a>() << <span class="stringliteral">") "</span></div> -<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>  << <span class="stringliteral">"of framework "</span> << frameworkId;</div> -<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span> </div> -<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a62a748c068aad2de8153f3426a001f6a">operations</a>.<a class="code" href="classhashmap.html#a040f93efd556981326f0809e0f24f9ef">put</a>(uuid.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>(), operation);</div> -<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span> </div> -<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>  <span class="keywordflow">if</span> (operation->info().has_id()) {</div> -<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a7216d67637db3ee049a2b2d2df8fcd45">operationUUIDs</a>.<a class="code" href="classhashmap.html#a040f93efd556981326f0809e0f24f9ef">put</a>(operation->info().id(), uuid.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>());</div> -<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>  }</div> -<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span> </div> -<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#a19a8e8be02b815dab4cecd8382e3dd26">protobuf::isSpeculativeOperation</a>(operation->info()) &&</div> -<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>  !<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aa31907fb62769822a77c06ffbf10451f">protobuf::isTerminalState</a>(operation->latest_status().state())) {</div> -<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>  <a class="code" href="classTry.html">Try<Resources></a> consumed =</div> -<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>  <a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aaad34fc9798891303cecdba77c1e473c">protobuf::getConsumedResources</a>(operation->info());</div> -<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(consumed);</div> -<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span> </div> -<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>  CHECK(operation->has_slave_id())</div> -<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>  << <span class="stringliteral">"External resource provider is not supported yet"</span>;</div> -<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span> </div> -<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>  <span class="keyword">const</span> SlaveID& slaveId = operation->slave_id();</div> -<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span> </div> -<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a> += consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> -<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId] += consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> -<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span> </div> -<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>  <span class="comment">// It's possible that we're not tracking the role from the</span></div> -<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>  <span class="comment">// resources in the operation for this framework if the role is</span></div> -<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>  <span class="comment">// absent from the framework's set of roles. In this case, we</span></div> -<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>  <span class="comment">// track the role's allocation for this framework.</span></div> -<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>  <a class="code" href="foreach_8hpp.html#acac417231a256d7c6164a86db970da86">foreachkey</a> (<span class="keyword">const</span> std::string& role, consumed->allocations()) {</div> -<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>  <span class="keywordflow">if</span> (!<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a614fb3ba127133b939e2a733c6ecbf2a">isTrackedUnderRole</a>(role)) {</div> -<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#afa185682905163563412aa1915e612c8">trackUnderRole</a>(role);</div> -<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>  }</div> -<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>  }</div> -<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>  }</div> -<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>  }</div> -<div class="line"><a name="l02550"></a><span class="lineno"> 2550</span> </div> -<div class="line"><a name="l02551"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#a6c372eac1cdd60d11a990d81acbd732f"> 2551</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a6c372eac1cdd60d11a990d81acbd732f">recoverResources</a>(<a class="code" href="namespacecgroups_1_1blkio.html#a350b1eb57318afaea7700ab7786b55ef">Operation</a>* operation)</div> -<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>  {</div> -<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>  CHECK(operation->has_slave_id())</div> -<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>  << <span class="stringliteral">"External resource provider is not supported yet"</span>;</div> -<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span> </div> -<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>  <span class="keyword">const</span> SlaveID& slaveId = operation->slave_id();</div> -<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span> </div> -<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#a19a8e8be02b815dab4cecd8382e3dd26">protobuf::isSpeculativeOperation</a>(operation->info())) {</div> -<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>  <span class="keywordflow">return</span>;</div> -<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>  }</div> -<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span> </div> -<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>  <a class="code" href="classTry.html">Try<Resources></a> consumed = <a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aaad34fc9798891303cecdba77c1e473c">protobuf::getConsumedResources</a>(operation->info());</div> -<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(consumed);</div> -<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span> </div> -<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a30fc4fe000da99818bfcee5bb780e5d4">contains</a>(consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()))</div> -<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>  << <span class="stringliteral">"Tried to recover resources "</span> << consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()</div> -<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>  << <span class="stringliteral">" which do not seem used"</span>;</div> -<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span> </div> -<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId].<a class="code" href="namespacestrings.html#a269921757daf11096d3f5e02686f8444">contains</a>(consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()))</div> -<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>  << <span class="stringliteral">"Tried to recover resources "</span> << consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>() << <span class="stringliteral">" of agent "</span></div> -<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>  << slaveId << <span class="stringliteral">" which do not seem used"</span>;</div> -<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span> </div> -<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a> -= consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> -<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId] -= consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> -<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>  <span class="keywordflow">if</span> (<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId].empty()) {</div> -<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>.erase(slaveId);</div> -<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>  }</div> -<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span> </div> -<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>  <span class="comment">// If we are no longer subscribed to the role to which these</span></div> -<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>  <span class="comment">// resources are being returned to, and we have no more resources</span></div> -<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>  <span class="comment">// allocated to us for that role, stop tracking the framework</span></div> -<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>  <span class="comment">// under the role.</span></div> -<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>  <a class="code" href="foreach_8hpp.html#acac417231a256d7c6164a86db970da86">foreachkey</a> (<span class="keyword">const</span> std::string& role, consumed->allocations()) {</div> -<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>  <span class="keyword">auto</span> allocatedToRole = [&role](<span class="keyword">const</span> Resource& resource) {</div> -<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>  <span class="keywordflow">return</span> resource.allocation_info().role() == role;</div> -<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>  };</div> -<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span> </div> -<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>  <span class="keywordflow">if</span> (<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a>.count(role) == 0 &&</div> -<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>(allocatedToRole).<a class="code" href="classmesos_1_1Resources.html#ab46b900ebe62b19390d9a2a82b46eb15">empty</a>()) {</div> -<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a965f66810b71a0d2bab683fee1b6a9b6">totalOfferedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>(allocatedToRole).<a class="code" href="classmesos_1_1Resources.html#ab46b900ebe62b19390d9a2a82b46eb15">empty</a>());</div> -<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a3edaf411ec6e409a3f8b2a77988ef65a">untrackUnderRole</a>(role);</div> -<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>  }</div> -<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>  }</div> -<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>  }</div> -<div class="line"><a name="l02595"></a><span class="lineno"> 2595</span> </div> -<div class="line"><a name="l02596"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#a4ab58c53f3b77b91a6b2af3b6eb55f84"> 2596</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a4ab58c53f3b77b91a6b2af3b6eb55f84">removeOperation</a>(<a class="code" href="namespacecgroups_1_1blkio.html#a350b1eb57318afaea7700ab7786b55ef">Operation</a>* operation)</div> -<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>  {</div> -<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>  <a class="code" href="classTry.html">Try<id::UUID></a> uuid = <a class="code" href="structid_1_1UUID.html#afd66db1d29a4ee4be9c82581437dda74">id::UUID::fromBytes</a>(operation->uuid().value());</div> -<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(uuid);</div> -<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span> </div> -<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a62a748c068aad2de8153f3426a001f6a">operations</a>.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(uuid.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()))</div> -<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>  << <span class="stringliteral">"Unknown operation '"</span> << operation->info().id()</div> -<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>  << <span class="stringliteral">"' (uuid: "</span> << uuid-><a class="code" href="structid_1_1UUID.html#af024badbc379374ac635031eed57dc5f">toString</a>() << <span class="stringliteral">") "</span></div> -<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>  << <span class="stringliteral">"of framework "</span> << operation->framework_id();</div> -<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span> </div> -<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#a19a8e8be02b815dab4cecd8382e3dd26">protobuf::isSpeculativeOperation</a>(operation->info()) &&</div> -<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>  !<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aa31907fb62769822a77c06ffbf10451f">protobuf::isTerminalState</a>(operation->latest_status().state())) {</div> -<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#af14287bdb6466ca003b6e5e6a37ae02a">recoverResources</a>(operation);</div> -<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>  }</div> -<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span> </div> -<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a62a748c068aad2de8153f3426a001f6a">operations</a>.erase(uuid.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>());</div> -<div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>  }</div> +<div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>  <span class="keyword">const</span> UUID& uuid = operation->uuid();</div> +<div class="line"><a name="l02512"></a><span class="lineno"> 2512</span> </div> +<div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>  CHECK(!<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2adf30b02ddb79430f00ce7fd664f524">operations</a>.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(uuid))</div> +<div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>  << <span class="stringliteral">"Duplicate operation '"</span> << operation->info().id()</div> +<div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>  << <span class="stringliteral">"' (uuid: "</span> << uuid << <span class="stringliteral">") "</span></div> +<div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>  << <span class="stringliteral">"of framework "</span> << frameworkId;</div> +<div class="line"><a name="l02517"></a><span class="lineno"> 2517</span> </div> +<div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2adf30b02ddb79430f00ce7fd664f524">operations</a>.<a class="code" href="classhashmap.html#a040f93efd556981326f0809e0f24f9ef">put</a>(uuid, operation);</div> +<div class="line"><a name="l02519"></a><span class="lineno"> 2519</span> </div> +<div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>  <span class="keywordflow">if</span> (operation->info().has_id()) {</div> +<div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#adbfbbfbf3b149924091212eff5cf8dc6">operationUUIDs</a>.<a class="code" href="classhashmap.html#a040f93efd556981326f0809e0f24f9ef">put</a>(operation->info().id(), uuid);</div> +<div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>  }</div> +<div class="line"><a name="l02523"></a><span class="lineno"> 2523</span> </div> +<div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#a19a8e8be02b815dab4cecd8382e3dd26">protobuf::isSpeculativeOperation</a>(operation->info()) &&</div> +<div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>  !<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aa31907fb62769822a77c06ffbf10451f">protobuf::isTerminalState</a>(operation->latest_status().state())) {</div> +<div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>  <a class="code" href="classTry.html">Try<Resources></a> consumed =</div> +<div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>  <a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aaad34fc9798891303cecdba77c1e473c">protobuf::getConsumedResources</a>(operation->info());</div> +<div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(consumed);</div> +<div class="line"><a name="l02529"></a><span class="lineno"> 2529</span> </div> +<div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>  CHECK(operation->has_slave_id())</div> +<div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>  << <span class="stringliteral">"External resource provider is not supported yet"</span>;</div> +<div class="line"><a name="l02532"></a><span class="lineno"> 2532</span> </div> +<div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>  <span class="keyword">const</span> SlaveID& slaveId = operation->slave_id();</div> +<div class="line"><a name="l02534"></a><span class="lineno"> 2534</span> </div> +<div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a> += consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> +<div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId] += consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> +<div class="line"><a name="l02537"></a><span class="lineno"> 2537</span> </div> +<div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>  <span class="comment">// It's possible that we're not tracking the role from the</span></div> +<div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>  <span class="comment">// resources in the operation for this framework if the role is</span></div> +<div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>  <span class="comment">// absent from the framework's set of roles. In this case, we</span></div> +<div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>  <span class="comment">// track the role's allocation for this framework.</span></div> +<div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>  <a class="code" href="foreach_8hpp.html#acac417231a256d7c6164a86db970da86">foreachkey</a> (<span class="keyword">const</span> std::string& role, consumed->allocations()) {</div> +<div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>  <span class="keywordflow">if</span> (!<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a614fb3ba127133b939e2a733c6ecbf2a">isTrackedUnderRole</a>(role)) {</div> +<div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#afa185682905163563412aa1915e612c8">trackUnderRole</a>(role);</div> +<div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>  }</div> +<div class="line"><a name="l02546"></a><span class="lineno"> 2546</span>  }</div> +<div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>  }</div> +<div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>  }</div> +<div class="line"><a name="l02549"></a><span class="lineno"> 2549</span> </div> +<div class="line"><a name="l02550"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#a6c372eac1cdd60d11a990d81acbd732f"> 2550</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a6c372eac1cdd60d11a990d81acbd732f">recoverResources</a>(<a class="code" href="namespacecgroups_1_1blkio.html#a350b1eb57318afaea7700ab7786b55ef">Operation</a>* operation)</div> +<div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>  {</div> +<div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>  CHECK(operation->has_slave_id())</div> +<div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>  << <span class="stringliteral">"External resource provider is not supported yet"</span>;</div> +<div class="line"><a name="l02554"></a><span class="lineno"> 2554</span> </div> +<div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>  <span class="keyword">const</span> SlaveID& slaveId = operation->slave_id();</div> +<div class="line"><a name="l02556"></a><span class="lineno"> 2556</span> </div> +<div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>  <span class="keywordflow">if</span> (<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#a19a8e8be02b815dab4cecd8382e3dd26">protobuf::isSpeculativeOperation</a>(operation->info())) {</div> +<div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>  <span class="keywordflow">return</span>;</div> +<div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>  }</div> +<div class="line"><a name="l02560"></a><span class="lineno"> 2560</span> </div> +<div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>  <a class="code" href="classTry.html">Try<Resources></a> consumed = <a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aaad34fc9798891303cecdba77c1e473c">protobuf::getConsumedResources</a>(operation->info());</div> +<div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>  <a class="code" href="stout_2include_2stout_2check_8hpp.html#aee320e7c6e107071f4b85d4cc135a265">CHECK_SOME</a>(consumed);</div> +<div class="line"><a name="l02563"></a><span class="lineno"> 2563</span> </div> +<div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a30fc4fe000da99818bfcee5bb780e5d4">contains</a>(consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()))</div> +<div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>  << <span class="stringliteral">"Tried to recover resources "</span> << consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()</div> +<div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>  << <span class="stringliteral">" which do not seem used"</span>;</div> +<div class="line"><a name="l02567"></a><span class="lineno"> 2567</span> </div> +<div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId].<a class="code" href="namespacestrings.html#a269921757daf11096d3f5e02686f8444">contains</a>(consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>()))</div> +<div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>  << <span class="stringliteral">"Tried to recover resources "</span> << consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>() << <span class="stringliteral">" of agent "</span></div> +<div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>  << slaveId << <span class="stringliteral">" which do not seem used"</span>;</div> +<div class="line"><a name="l02571"></a><span class="lineno"> 2571</span> </div> +<div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a> -= consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> +<div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId] -= consumed.<a class="code" href="classTry.html#a8bc7f43e75a47111ea18e9c83b007be5">get</a>();</div> +<div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>  <span class="keywordflow">if</span> (<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>[slaveId].empty()) {</div> +<div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a9085d3f2c156a7772cbd243776a62491">usedResources</a>.erase(slaveId);</div> +<div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>  }</div> +<div class="line"><a name="l02577"></a><span class="lineno"> 2577</span> </div> +<div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>  <span class="comment">// If we are no longer subscribed to the role to which these</span></div> +<div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>  <span class="comment">// resources are being returned to, and we have no more resources</span></div> +<div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>  <span class="comment">// allocated to us for that role, stop tracking the framework</span></div> +<div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>  <span class="comment">// under the role.</span></div> +<div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>  <a class="code" href="foreach_8hpp.html#acac417231a256d7c6164a86db970da86">foreachkey</a> (<span class="keyword">const</span> std::string& role, consumed->allocations()) {</div> +<div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>  <span class="keyword">auto</span> allocatedToRole = [&role](<span class="keyword">const</span> Resource& resource) {</div> +<div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>  <span class="keywordflow">return</span> resource.allocation_info().role() == role;</div> +<div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>  };</div> +<div class="line"><a name="l02586"></a><span class="lineno"> 2586</span> </div> +<div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>  <span class="keywordflow">if</span> (<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a>.count(role) == 0 &&</div> +<div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>(allocatedToRole).<a class="code" href="classmesos_1_1Resources.html#ab46b900ebe62b19390d9a2a82b46eb15">empty</a>()) {</div> +<div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a965f66810b71a0d2bab683fee1b6a9b6">totalOfferedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>(allocatedToRole).<a class="code" href="classmesos_1_1Resources.html#ab46b900ebe62b19390d9a2a82b46eb15">empty</a>());</div> +<div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a3edaf411ec6e409a3f8b2a77988ef65a">untrackUnderRole</a>(role);</div> +<div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>  }</div> +<div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>  }</div> +<div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>  }</div> +<div class="line"><a name="l02594"></a><span class="lineno"> 2594</span> </div> +<div class="line"><a name="l02595"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#a4ab58c53f3b77b91a6b2af3b6eb55f84"> 2595</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a4ab58c53f3b77b91a6b2af3b6eb55f84">removeOperation</a>(<a class="code" href="namespacecgroups_1_1blkio.html#a350b1eb57318afaea7700ab7786b55ef">Operation</a>* operation)</div> +<div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>  {</div> +<div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>  <span class="keyword">const</span> UUID& uuid = operation->uuid();</div> +<div class="line"><a name="l02598"></a><span class="lineno"> 2598</span> </div> +<div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2adf30b02ddb79430f00ce7fd664f524">operations</a>.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(uuid))</div> +<div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>  << <span class="stringliteral">"Unknown operation '"</span> << operation->info().id()</div> +<div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>  << <span class="stringliteral">"' (uuid: "</span> << uuid << <span class="stringliteral">") "</span></div> +<div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>  << <span class="stringliteral">"of framework "</span> << operation->framework_id();</div> +<div class="line"><a name="l02603"></a><span class="lineno"> 2603</span> </div> +<div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>  <span class="keywordflow">if</span> (!<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#a19a8e8be02b815dab4cecd8382e3dd26">protobuf::isSpeculativeOperation</a>(operation->info()) &&</div> +<div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>  !<a class="code" href="namespacemesos_1_1internal_1_1protobuf.html#aa31907fb62769822a77c06ffbf10451f">protobuf::isTerminalState</a>(operation->latest_status().state())) {</div> +<div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#af14287bdb6466ca003b6e5e6a37ae02a">recoverResources</a>(operation);</div> +<div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>  }</div> +<div class="line"><a name="l02608"></a><span class="lineno"> 2608</span> </div> +<div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2adf30b02ddb79430f00ce7fd664f524">operations</a>.erase(uuid);</div> +<div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>  }</div> +<div class="line"><a name="l02611"></a><span class="lineno"> 2611</span> </div> +<div class="line"><a name="l02612"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417"> 2612</a></span>  <span class="keyword">const</span> FrameworkID <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417">id</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> info.id(); }</div> <div class="line"><a name="l02613"></a><span class="lineno"> 2613</span> </div> -<div class="line"><a name="l02614"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417"> 2614</a></span>  <span class="keyword">const</span> FrameworkID <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417">id</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> info.id(); }</div> -<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span> </div> -<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>  <span class="comment">// Update fields in 'info' using those in 'newInfo'. Currently this</span></div> -<div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>  <span class="comment">// only updates `role`/`roles`, 'name', 'failover_timeout', 'hostname',</span></div> -<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>  <span class="comment">// 'webui_url', 'capabilities', and 'labels'.</span></div> -<div class="line"><a name="l02619"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#a8f5f1a0e7c16c0e7750373c1146dc3a1"> 2619</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a8f5f1a0e7c16c0e7750373c1146dc3a1">update</a>(<span class="keyword">const</span> FrameworkInfo& newInfo)</div> -<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>  {</div> -<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>  <span class="comment">// We only merge 'info' from the same framework 'id'.</span></div> -<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>  CHECK_EQ(info.id(), newInfo.id());</div> -<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span> </div> -<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>  <span class="comment">// Save the old list of roles for later.</span></div> -<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>  std::set<std::string> oldRoles = <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a>;</div> -<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span> </div> -<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>  <span class="comment">// TODO(jmlvanre): Merge other fields as per design doc in</span></div> -<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>  <span class="comment">// MESOS-703.</span></div> -<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span> </div> -<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>  info.clear_role();</div> -<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>  info.clear_roles();</div> -<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span> </div> -<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>  <span class="keywordflow">if</span> (newInfo.has_role()) {</div> -<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>  info.set_role(newInfo.role());</div> -<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>  }</div> -<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span> </div> -<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>  <span class="keywordflow">if</span> (newInfo.roles_size() > 0) {</div> -<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>  info.mutable_roles()->CopyFrom(newInfo.roles());</div> -<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>  }</div> +<div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>  <span class="comment">// Update fields in 'info' using those in 'newInfo'. Currently this</span></div> +<div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>  <span class="comment">// only updates `role`/`roles`, 'name', 'failover_timeout', 'hostname',</span></div> +<div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>  <span class="comment">// 'webui_url', 'capabilities', and 'labels'.</span></div> +<div class="line"><a name="l02617"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#a8f5f1a0e7c16c0e7750373c1146dc3a1"> 2617</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a8f5f1a0e7c16c0e7750373c1146dc3a1">update</a>(<span class="keyword">const</span> FrameworkInfo& newInfo)</div> +<div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>  {</div> +<div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>  <span class="comment">// We only merge 'info' from the same framework 'id'.</span></div> +<div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>  CHECK_EQ(info.id(), newInfo.id());</div> +<div class="line"><a name="l02621"></a><span class="lineno"> 2621</span> </div> +<div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>  <span class="comment">// Save the old list of roles for later.</span></div> +<div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>  std::set<std::string> oldRoles = <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a>;</div> +<div class="line"><a name="l02624"></a><span class="lineno"> 2624</span> </div> +<div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>  <span class="comment">// TODO(jmlvanre): Merge other fields as per design doc in</span></div> +<div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>  <span class="comment">// MESOS-703.</span></div> +<div class="line"><a name="l02627"></a><span class="lineno"> 2627</span> </div> +<div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>  info.clear_role();</div> +<div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>  info.clear_roles();</div> +<div class="line"><a name="l02630"></a><span class="lineno"> 2630</span> </div> +<div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>  <span class="keywordflow">if</span> (newInfo.has_role()) {</div> +<div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>  info.set_role(newInfo.role());</div> +<div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>  }</div> +<div class="line"><a name="l02634"></a><span class="lineno"> 2634</span> </div> +<div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>  <span class="keywordflow">if</span> (newInfo.roles_size() > 0) {</div> +<div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>  info.mutable_roles()->CopyFrom(newInfo.roles());</div> +<div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>  }</div> +<div class="line"><a name="l02638"></a><span class="lineno"> 2638</span> </div> +<div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a> = <a class="code" href="namespacemesos_1_1internal_1_1protobuf_1_1framework.html#a34d007aecebcd1c9dbd3ee0ad1d39155">protobuf::framework::getRoles</a>(newInfo);</div> <div class="line"><a name="l02640"></a><span class="lineno"> 2640</span> </div> -<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a> = <a class="code" href="namespacemesos_1_1internal_1_1protobuf_1_1framework.html#a34d007aecebcd1c9dbd3ee0ad1d39155">protobuf::framework::getRoles</a>(newInfo);</div> -<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span> </div> -<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>  <span class="keywordflow">if</span> (newInfo.user() != info.user()) {</div> -<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>  LOG(WARNING) << <span class="stringliteral">"Cannot update FrameworkInfo.user to '"</span> << newInfo.user()</div> -<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>  << <span class="stringliteral">"' for framework "</span> << <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417">id</a>() << <span class="stringliteral">". Check MESOS-703"</span>;</div> -<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>  }</div> +<div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>  <span class="keywordflow">if</span> (newInfo.user() != info.user()) {</div> +<div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>  LOG(WARNING) << <span class="stringliteral">"Cannot update FrameworkInfo.user to '"</span> << newInfo.user()</div> +<div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>  << <span class="stringliteral">"' for framework "</span> << <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417">id</a>() << <span class="stringliteral">". Check MESOS-703"</span>;</div> +<div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>  }</div> +<div class="line"><a name="l02645"></a><span class="lineno"> 2645</span> </div> +<div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>  info.set_name(newInfo.name());</div> <div class="line"><a name="l02647"></a><span class="lineno"> 2647</span> </div> -<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>  info.set_name(newInfo.name());</div> -<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span> </div> -<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>  <span class="keywordflow">if</span> (newInfo.has_failover_timeout()) {</div> -<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>  info.set_failover_timeout(newInfo.failover_timeout());</div> -<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>  } <span class="keywordflow">else</span> {</div> -<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>  info.clear_failover_timeout();</div> -<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>  }</div> -<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span> </div> -<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>  <span class="keywordflow">if</span> (newInfo.checkpoint() != info.checkpoint()) {</div> -<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>  LOG(WARNING) << <span class="stringliteral">"Cannot update FrameworkInfo.checkpoint to '"</span></div> -<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>  << <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(newInfo.checkpoint()) << <span class="stringliteral">"' for framework "</span></div> -<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>  << <span class="keywordtype">id</span>() << <span class="stringliteral">". Check MESOS-703"</span>;</div> -<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>  }</div> -<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span> </div> -<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>  <span class="keywordflow">if</span> (newInfo.has_hostname()) {</div> -<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>  info.set_hostname(newInfo.hostname());</div> -<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>  } <span class="keywordflow">else</span> {</div> -<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>  info.clear_hostname();</div> -<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>  }</div> -<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span> </div> -<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>  <span class="keywordflow">if</span> (newInfo.principal() != info.principal()) {</div> -<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>  LOG(WARNING) << <span class="stringliteral">"Cannot update FrameworkInfo.principal to '"</span></div> -<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>  << newInfo.principal() << <span class="stringliteral">"' for framework "</span> << <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417">id</a>()</div> -<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>  << <span class="stringliteral">". Check MESOS-703"</span>;</div> -<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>  }</div> -<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span> </div> -<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>  <span class="keywordflow">if</span> (newInfo.has_webui_url()) {</div> -<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>  info.set_webui_url(newInfo.webui_url());</div> -<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>  } <span class="keywordflow">else</span> {</div> -<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>  info.clear_webui_url();</div> -<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>  }</div> -<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span> </div> -<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>  <span class="keywordflow">if</span> (newInfo.capabilities_size() > 0) {</div> -<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>  info.mutable_capabilities()->CopyFrom(newInfo.capabilities());</div> -<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>  } <span class="keywordflow">else</span> {</div> -<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>  info.clear_capabilities();</div> -<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>  }</div> -<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a4bd6909f50c4594e8db3f4f791814dc7">capabilities</a> = <a class="code" href="structmesos_1_1internal_1_1protobuf_1_1framework_1_1Capabilities.html">protobuf::framework::Capabilities</a>(info.capabilities());</div> -<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span> </div> -<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>  <span class="keywordflow">if</span> (newInfo.has_labels()) {</div> -<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>  info.mutable_labels()->CopyFrom(newInfo.labels());</div> -<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>  } <span class="keywordflow">else</span> {</div> -<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>  info.clear_labels();</div> -<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>  }</div> +<div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>  <span class="keywordflow">if</span> (newInfo.has_failover_timeout()) {</div> +<div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>  info.set_failover_timeout(newInfo.failover_timeout());</div> +<div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>  } <span class="keywordflow">else</span> {</div> +<div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>  info.clear_failover_timeout();</div> +<div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>  }</div> +<div class="line"><a name="l02653"></a><span class="lineno"> 2653</span> </div> +<div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>  <span class="keywordflow">if</span> (newInfo.checkpoint() != info.checkpoint()) {</div> +<div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>  LOG(WARNING) << <span class="stringliteral">"Cannot update FrameworkInfo.checkpoint to '"</span></div> +<div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>  << <a class="code" href="namespacens.html#a28116b46e6543597a11733424cd1aa20">stringify</a>(newInfo.checkpoint()) << <span class="stringliteral">"' for framework "</span></div> +<div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>  << <span class="keywordtype">id</span>() << <span class="stringliteral">". Check MESOS-703"</span>;</div> +<div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>  }</div> +<div class="line"><a name="l02659"></a><span class="lineno"> 2659</span> </div> +<div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>  <span class="keywordflow">if</span> (newInfo.has_hostname()) {</div> +<div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>  info.set_hostname(newInfo.hostname());</div> +<div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>  } <span class="keywordflow">else</span> {</div> +<div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>  info.clear_hostname();</div> +<div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>  }</div> +<div class="line"><a name="l02665"></a><span class="lineno"> 2665</span> </div> +<div class="line"><a name="l02666"></a><span class="lineno"> 2666</span>  <span class="keywordflow">if</span> (newInfo.principal() != info.principal()) {</div> +<div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>  LOG(WARNING) << <span class="stringliteral">"Cannot update FrameworkInfo.principal to '"</span></div> +<div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>  << newInfo.principal() << <span class="stringliteral">"' for framework "</span> << <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#ac971d54c3567de6411c6aa7e998c5417">id</a>()</div> +<div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>  << <span class="stringliteral">". Check MESOS-703"</span>;</div> +<div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>  }</div> +<div class="line"><a name="l02671"></a><span class="lineno"> 2671</span> </div> +<div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>  <span class="keywordflow">if</span> (newInfo.has_webui_url()) {</div> +<div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>  info.set_webui_url(newInfo.webui_url());</div> +<div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>  } <span class="keywordflow">else</span> {</div> +<div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>  info.clear_webui_url();</div> +<div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>  }</div> +<div class="line"><a name="l02677"></a><span class="lineno"> 2677</span> </div> +<div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>  <span class="keywordflow">if</span> (newInfo.capabilities_size() > 0) {</div> +<div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>  info.mutable_capabilities()->CopyFrom(newInfo.capabilities());</div> +<div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>  } <span class="keywordflow">else</span> {</div> +<div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>  info.clear_capabilities();</div> +<div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>  }</div> +<div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a4bd6909f50c4594e8db3f4f791814dc7">capabilities</a> = <a class="code" href="structmesos_1_1internal_1_1protobuf_1_1framework_1_1Capabilities.html">protobuf::framework::Capabilities</a>(info.capabilities());</div> +<div class="line"><a name="l02684"></a><span class="lineno"> 2684</span> </div> +<div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>  <span class="keywordflow">if</span> (newInfo.has_labels()) {</div> +<div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>  info.mutable_labels()->CopyFrom(newInfo.labels());</div> +<div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>  } <span class="keywordflow">else</span> {</div> +<div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>  info.clear_labels();</div> +<div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>  }</div> +<div class="line"><a name="l02690"></a><span class="lineno"> 2690</span> </div> +<div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>  <span class="keyword">const</span> std::set<std::string>& newRoles = <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a>;</div> <div class="line"><a name="l02692"></a><span class="lineno"> 2692</span> </div> -<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>  <span class="keyword">const</span> std::set<std::string>& newRoles = <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a2d8cbc0dbd23317d8194398a3810a5b5">roles</a>;</div> -<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span> </div> -<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>  <span class="keyword">const</span> std::set<std::string> removedRoles = [&]() {</div> -<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>  std::set<std::string> result = oldRoles;</div> -<div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> std::string& role, newRoles) {</div> -<div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>  result.erase(role);</div> -<div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>  }</div> -<div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>  <span class="keywordflow">return</span> result;</div> -<div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>  }();</div> -<div class="line"><a name="l02702"></a><span class="lineno"> 2702</span> </div> -<div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> std::string& role, removedRoles) {</div> -<div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>  <span class="keyword">auto</span> allocatedToRole = [&role](<span class="keyword">const</span> Resource& resource) {</div> -<div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>  <span class="keywordflow">return</span> resource.allocation_info().role() == role;</div> -<div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>  };</div> -<div class="line"><a name="l02707"></a><span class="lineno"> 2707</span> </div> -<div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>  <span class="comment">// Stop tracking the framework under this role if there are</span></div> -<div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>  <span class="comment">// no longer any resources allocated to it.</span></div> -<div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>  <span class="keywordflow">if</span> (<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a35847f2388d25e0cb9b3a9d0a722fbdd">totalUsedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>(allocatedToRole).<a class="code" href="classmesos_1_1Resources.html#ab46b900ebe62b19390d9a2a82b46eb15">empty</a>()) {</div> -<div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>  CHECK(<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a965f66810b71a0d2bab683fee1b6a9b6">totalOfferedResources</a>.<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>(allocatedToRole).<a class="code" href="classmesos_1_1Resources.html#ab46b900ebe62b19390d9a2a82b46eb15">empty</a>());</div> -<div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a3edaf411ec6e409a3f8b2a77988ef65a">untrackUnderRole</a>(role);</div> -<div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>  }</div> -<div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>  }</div> -<div class="line"><a name="l02715"></a><span class="lineno"> 2715</span> </div> -<div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>  <span class="keyword">const</span> std::set<std::string> addedRoles = [&]() {</div> -<div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>  std::set<std::string> result = newRoles;</div> -<div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> std::string& role, oldRoles) {</div> -<div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>  result.erase(role);</div> -<div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>  }</div> -<div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>  <span class="keywordflow">return</span> result;</div> -<div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>  }();</div> -<div class="line"><a name="l02723"></a><span class="lineno"> 2723</span> </div> -<div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> std::string& role, addedRoles) {</div> -<div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>  <span class="comment">// NOTE: It's possible that we're already tracking this framework</span></div> -<div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>  <span class="comment">// under the role because a framework can unsubscribe from a role</span></div> -<div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>  <span class="comment">// while it still has resources allocated to the role.</span></div> -<div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>  <span class="keywordflow">if</span> (!<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a614fb3ba127133b939e2a733c6ecbf2a">isTrackedUnderRole</a>(role)) {</div> -<div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#afa185682905163563412aa1915e612c8">trackUnderRole</a>(role);</div> -<div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>  }</div> -<div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>  }</div> -<div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>  }</div> -<div class="line"><a name="l02733"></a><span class="lineno"> 2733</span> </div> -<div class="line"><a name="l02734"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#aa21baf526b32c397ea45f103cea5dd15"> 2734</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#aa21baf526b32c397ea45f103cea5dd15">updateConnection</a>(<span class="keyword">const</span> <a class="code" href="structprocess_1_1UPID.html">process::UPID</a>& newPid)</div> -<div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>  {</div> -<div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>  <span class="comment">// Cleanup the HTTP connnection if this is a downgrade from HTTP</span></div> -<div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>  <span class="comment">// to PID. Note that the connection may already be closed.</span></div> -<div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>  <span class="keywordflow">if</span> (<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a574beb521d564fcbbbce942e694d106c">http</a>.isSome()) {</div> -<div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a54362f290514769903a61d7cd0d6506b">closeHttpConnection</a>();</div> -<div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>  }</div> -<div class="line"><a name="l02741"></a><span class="lineno"> 2741</span> </div> -<div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>  <span class="comment">// TODO(benh): unlink(oldPid);</span></div> -<div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>  pid = newPid;</div> -<div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>  }</div> -<div class="line"><a name="l02745"></a><span class="lineno"> 2745</span> </div> -<div class="line"><a name="l02746"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1Framework.html#aab28c60e6ecfa298c41f4e006f73a911"> 2746</a></span>  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#aab28c60e6ecfa298c41f4e006f73a911">updateConnection</a>(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1HttpConnection.html">HttpConnection</a>& newHttp)</div> -<div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>  {</div> -<div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>  <span class="keywordflow">if</span> (pid.isSome()) {</div> -<div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>  <span class="comment">// Wipe the PID if this is an upgrade from PID to HTTP.</span></div> -<div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>  <span class="comment">// TODO(benh): unlink(oldPid);</span></div> -<div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>  pid = <a class="code" href="structNone.html">None</a>();</div> -<div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>  } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a574beb521d564fcbbbce942e694d106c">http</a>.isSome()) {</div> -<div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>  <span class="comment">// Cleanup the old HTTP connection.</span></div> -<div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>  <span class="comment">// Note that master creates a new HTTP connection for every</span></div> -<div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>  <span class="comment">// subscribe request, so 'newHttp' should always be different</span></div> -<div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>  <span class="comment">// from 'http'.</span></div> -<div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>  <a class="code" href="structmesos_1_1internal_1_1master_1_1Framework.html#a54362f290514769903a61d7cd0d6506b">closeHttpConnection</a>();</div> -<div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>  }</div> +<div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>  <span class="keyword">const</span> std::set<std::string> removedRoles = [&]() {</div> +<div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>  std::set<std::string> result = oldRoles;</div> +<div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> std::string& role, newRoles) {</div> +<div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>  res
<TRUNCATED>