mesos-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From git-site-r...@apache.org
Subject [05/18] mesos-site git commit: Updated the website built from mesos SHA: cacc1db.
Date Mon, 04 Jun 2018 21:40:21 GMT
http://git-wip-us.apache.org/repos/asf/mesos-site/blob/10cb4b9f/content/api/latest/c++/random_2sorter_8hpp_source.html
----------------------------------------------------------------------
diff --git a/content/api/latest/c++/random_2sorter_8hpp_source.html b/content/api/latest/c++/random_2sorter_8hpp_source.html
new file mode 100644
index 0000000..f041f91
--- /dev/null
+++ b/content/api/latest/c++/random_2sorter_8hpp_source.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen 1.8.11"/>
+<title>Apache Mesos: src/master/allocator/sorter/random/sorter.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">Apache Mesos
+   </div>
+  </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.8.11 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="examples.html"><span>Examples</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
+    </ul>
+  </div>
+<div id="nav-path" class="navpath">
+  <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_ae1a660fbe587eff2b475b14d217c1ef.html">master</a></li><li class="navelem"><a class="el" href="dir_bf13619d78c3acd3aa274e5971195a4d.html">allocator</a></li><li class="navelem"><a class="el" href="dir_edf01e246fc730a3939248c4f7ca0516.html">sorter</a></li><li class="navelem"><a class="el" href="dir_34901257f56813f64231b70cff79a812.html">random</a></li>  </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+  <div class="headertitle">
+<div class="title">sorter.hpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<a href="random_2sorter_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Licensed to the Apache Software Foundation (ASF) under one</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// or more contributor license agreements.  See the NOTICE file</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// distributed with this work for additional information</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">// regarding copyright ownership.  The ASF licenses this file</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">// to you under the Apache License, Version 2.0 (the</span></div><div class="line"><a name="l00006"></a><s
 pan class="lineno">    6</span>&#160;<span class="comment">// &quot;License&quot;); you may not use this file except in compliance</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">// with the License.  You may obtain a copy of the License at</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">//     http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">// di
 stributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">// limitations under the License.</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef __MASTER_ALLOCATOR_SORTER_RANDOM_SORTER_HPP__</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define __MASTER_ALLOCATOR_SORTER_
 RANDOM_SORTER_HPP__</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;random&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="p
 reprocessor">#include &lt;<a class="code" href="include_2mesos_2mesos_8hpp.html">mesos/mesos.hpp</a>&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="resources_8hpp.html">mesos/resources.hpp</a>&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="include_2mesos_2values_8hpp.html">mesos/values.hpp</a>&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="stout_2include_2stout_2check_8hpp.html">stout/check.hpp</a>&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="hashmap_8hpp.html">stout/has
 hmap.hpp</a>&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="option_8hpp.html">stout/option.hpp</a>&gt;</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="sorter_8hpp.html">master/allocator/sorter/sorter.hpp</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacemesos.html">mesos</a> {</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">namespace </span><a class="
 code" href="namespaceinternal.html">internal</a> {</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacemesos_1_1v1_1_1master.html">master</a> {</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="keyword">namespace </span>allocator {</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html">   42</a></span>&#160;<span class="keyword">class </span><a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html">RandomSorter</a> : <span class="keyword">public</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1Sorter.html">Sorter</a></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160
 ;{</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a1786c10ddb878707caa1afa0724c9feb">RandomSorter</a>();</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;  <span class="keyword">explicit</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a1786c10ddb878707caa1afa0724c9feb">RandomSorter</a>(</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;      <span class="keyword">const</span> <a class="code" href="structprocess_1_1UPID.html">process::UPID</a>&amp; allocator,</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;     
  <span class="keyword">const</span> std::string&amp; metricsPrefix);</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="keyword">virtual</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a809ecc0074a047786bc13fe24a3f6b3b">~RandomSorter</a>();</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a36fb7a19c8d28fd95146ac651fa85544">initialize</a>(</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;      <span class="keyword">const</span> <a class="code" href="classOption.html">Option</a>&lt;std::set&lt;std
 ::string&gt;&gt;&amp; fairnessExcludeResourceNames);</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a43a8efed7d28fe094d1c547cbf0032b1">add</a>(<span class="keyword">const</span> std::string&amp; clientPath);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <span class="keyword">remove</span>(<span class="keyword">const</span> std::string&amp; clientPath);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</sp
 an>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a0e2f1d41cdbd6690633ece31b46e0957">activate</a>(<span class="keyword">const</span> std::string&amp; clientPath);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#aa05b296a94f94d02a558d32b84cef11c">deactivate</a>(<span class="keyword">const</span> std::string&amp; clientPath);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" h
 ref="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a304a264a828345973752733c35b5f769">updateWeight</a>(<span class="keyword">const</span> std::string&amp; <a class="code" href="namespacepath.html">path</a>, <span class="keywordtype">double</span> weight);</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a2ebff336f83910e32cb26c3a860a0abe">allocated</a>(</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      <span class="keyword">const</span> std::string&amp; clientPath,</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId,</div><div class="line"><a name="l00069
 "></a><span class="lineno">   69</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; resources);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ad78bf7089969bed9adeaaa46683506a8">update</a>(</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;      <span class="keyword">const</span> std::string&amp; clientPath,</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId,</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;      <span class="keyword">const</span> <a class="code" href="cla
 ssmesos_1_1Resources.html">Resources</a>&amp; oldAllocation,</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; newAllocation);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a5630fe839c3a9f56058e6879d4d74d57">unallocated</a>(</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;      <span class="keyword">const</span> std::string&amp; clientPath,</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId,</div><div class="line"><a name="l00080"><
 /a><span class="lineno">   80</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; resources);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classhashmap.html">hashmap&lt;SlaveID, Resources&gt;</a>&amp; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ac86428b55a605cbe33419d54706d883a">allocation</a>(</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;      <span class="keyword">const</span> std::string&amp; clientPath) <span class="keyword">const</span>;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <span cl
 ass="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ab006bdc77fcaa4cfc27867d3d0f40a59">allocationScalarQuantities</a>(</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      <span class="keyword">const</span> std::string&amp; clientPath) <span class="keyword">const</span>;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <span class="keyword">virtual</span> <a class="code" href="classhashmap.html">hashmap&lt;std::string, Resources&gt;</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ac86428b55a605cbe33419d54706d883a">allocation</a>(</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;     
  <span class="keyword">const</span> SlaveID&amp; slaveId) <span class="keyword">const</span>;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <span class="keyword">virtual</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ac86428b55a605cbe33419d54706d883a">allocation</a>(</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;      <span class="keyword">const</span> std::string&amp; clientPath,</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;      <span class="keyword">const</span> SlaveID&amp; slaveId) <span class="keyword">const</span>;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</
 span>&#160;  <span class="keyword">virtual</span> <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ab8c3c1fd4b1b55bf538cba3c16b8a0b4">totalScalarQuantities</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a43a8efed7d28fe094d1c547cbf0032b1">add</a>(<span class="keyword">const</span> SlaveID&amp; slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; resources);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div><div class="l
 ine"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <span class="keyword">remove</span>(<span class="keyword">const</span> SlaveID&amp; slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; resources);</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <span class="comment">// This will perform a weighted random shuffle on each call.</span></div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="comment">//</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="comment">// TODO(bmahler): Unlike the DRF sorter, the allocator ideally would</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  
 <span class="comment">// not call `sort()` for every agent, but rather loop through a single</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="comment">// weighted shuffle before re-shuffling..</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  <span class="keyword">virtual</span> std::vector&lt;std::string&gt; <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a7469d4840caa9ccd226e6340d973f09b">sort</a>();</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a7d200b2c37563695d823cb654b1387f9">contains</a>(<span class="keyword">const</span> std::string&amp; clientPath) <span c
 lass="keyword">const</span>;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a862a133c453addb48033a7306a15add1">count</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  <span class="comment">// A node in the sorter&#39;s tree.</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;  <span class="keyword">struct </span><a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1Ra
 ndomSorter_1_1Node.html">Node</a>;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  <span class="comment">// Returns the weight associated with the node. If no weight has</span></div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  <span class="comment">// been configured for the node&#39;s path, the default weight (1.0) is</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  <span class="comment">// returned.</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="keywordtype">double</span> findWeight(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* node) <span class="keyword">const</span>;</div><div class="line"><a name="l00120"></a><span class="lineno"
 >  120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;  <span class="comment">// Returns the client associated with the given path. Returns</span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;  <span class="comment">// nullptr if the path is not found or if the path identifies an</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  <span class="comment">// internal node in the tree (not a client).</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* <a class="code" href="namespaceos.html#a965c9c19022c17c26fc5720f718e6c1a">find</a>(<span class="keyword">const</span> std::string&amp; clientPath) <span class="keyword">const</span>;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;</d
 iv><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  <span class="comment">// Used for random number generation.</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  std::mt19937 generator;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  <span class="comment">// The root node in the sorter tree.</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* root;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  <span class="comment">// To speed lookups, we keep a map from client paths to the leaf</span></div><div class="line"><a name="l00133">
 </a><span class="lineno">  133</span>&#160;  <span class="comment">// node associated with that client. There is an entry in this map</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;  <span class="comment">// for every leaf node in the client tree (except for the root when</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;  <span class="comment">// the tree is empty). Paths in this map do NOT contain the trailing</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;  <span class="comment">// &quot;.&quot; label we use for leaf nodes.</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, Node*&gt;</a> clients;</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</sp
 an>&#160;  <span class="comment">// Weights associated with role paths. Setting the weight for a path</span></div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  <span class="comment">// influences the sampling probability of all nodes in the subtree</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  <span class="comment">// rooted at that path. This hashmap might include weights for paths</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  <span class="comment">// that are not currently in the sorter tree.</span></div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  <a class="code" href="classhashmap.html">hashmap&lt;std::string, double&gt;</a> weights;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  <span class="comment"
 >// Total resources.</span></div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;  <span class="keyword">struct </span>Total</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  {</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <span class="comment">// We need to keep track of the resources (and not just scalar</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="comment">// quantities) to account for multiple copies of the same shared</span></div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    <span class="comment">// resources. We need to ensure that we do not update the scalar</span></div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    <span class="comment">// quantities for shared resources when the change is only in the</span></div><div class="line"><a name="
 l00152"></a><span class="lineno">  152</span>&#160;    <span class="comment">// number of copies in the sorter.</span></div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    <a class="code" href="classhashmap.html">hashmap&lt;SlaveID, Resources&gt;</a> resources;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    <span class="comment">// NOTE: Scalars can be safely aggregated across slaves. We keep</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="comment">// that to speed up the calculation of shares. See MESOS-2891 for</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="comment">// the reasons why we want to do that.</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class=
 "comment">//</span></div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;    <span class="comment">// NOTE: We omit information about dynamic reservations and</span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <span class="comment">// persistent volumes here to enable resources to be aggregated</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    <span class="comment">// across slaves more effectively. See MESOS-4833 for more</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    <span class="comment">// information.</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="comment">// Sharedness info is also stripped out when resource identities</span></div><div clas
 s="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="comment">// are omitted because sharedness inherently refers to the</span></div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    <span class="comment">// identities of resources and not quantities.</span></div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;    <a class="code" href="classmesos_1_1Resources.html">Resources</a> scalarQuantities;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="comment">// We also store a map version of `scalarQuantities`, mapping</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    <span class="comment">// the `Resource::name` to aggregated scalar. This improves the</span></div><div class="line"><a name="l00171"></a><span class="lin
 eno">  171</span>&#160;    <span class="comment">// performance of calculating shares. See MESOS-4694.</span></div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;    <span class="comment">// TODO(bmahler): Ideally we do not store `scalarQuantities`</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;    <span class="comment">// redundantly here, investigate performance improvements to</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    <span class="comment">// `Resources` to make this unnecessary.</span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    <a class="code" href="classhashmap.html">hashmap&lt;std::string, Value::Scalar&gt;</a> totals;</div><div class="line"><a name="l00177"></a><span class="lineno">  177</spa
 n>&#160;  } total_;</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;};</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="comment">// Represents a node in the sorter&#39;s tree. The structure of the tree</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="comment">// reflects the hierarchical relationships between the clients of the</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="comment">// sorter. Some (but not all) nodes correspond to sorter clients; some</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="comment">// nodes only exist to represent the structure of the sorter</span><
 /div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="comment">// tree. Clients are always associated with leaf nodes.</span></div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;<span class="comment">// For example, if there are two sorter clients &quot;a/b&quot; and &quot;c/d&quot;, the</span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;<span class="comment">// tree will contain five nodes: the root node, internal nodes for &quot;a&quot;</span></div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="comment">// and &quot;c&quot;, and leaf nodes for the clients &quot;a/b&quot; and &quot;c/d&quot;.</span></div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1mast
 er_1_1allocator_1_1RandomSorter_1_1Node.html">  190</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">RandomSorter::Node</a></div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;{</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  <span class="comment">// Indicates whether a node is an active leaf node, an inactive leaf</span></div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="comment">// node, or an internal node. Sorter clients always correspond to</span></div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;  <span class="comment">// leaf nodes, and only leaf nodes can be activated or deactivated.</span></div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;  <span class="comment">// The root node is always an &quo
 t;internal&quot; node.</span></div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3">  196</a></span>&#160;  <span class="keyword">enum</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3">Kind</a></div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;  {</div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3a9892b22953d63bc5359351d48e5b6f77">  198</a></span>&#160;    <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3a9892b22953d63bc5359351d48e5b6f77">ACTIVE_LEAF</a>,</div><div class="line"><a name="l00199"></
 a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3a6c8ce8ebea023706f04344f88b201b7d">  199</a></span>&#160;    <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3a6c8ce8ebea023706f04344f88b201b7d">INACTIVE_LEAF</a>,</div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3aa8af9d0a7146a3a8f243446e72f070eb">  200</a></span>&#160;    INTERNAL</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  };</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.h
 tml#aa6a069d00185a6291d37d4a7845104b0">  203</a></span>&#160;  <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#aa6a069d00185a6291d37d4a7845104b0">Node</a>(<span class="keyword">const</span> std::string&amp; _name, <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3">Kind</a> _kind, <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* _parent)</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    : <a class="code" href="namespaceos_1_1Shell.html#acfe16ef2b1146ad49a8651c0a457ce46">name</a>(_name), <a class="code" href="namespacemesos_1_1modules.html#a70163bdea2fe39ef5b798a7d7ee0c220">kind</a>(_kind), parent(_parent)</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;  {</div><div class="line"><a name="l00206"></a><span class="lineno">  20
 6</span>&#160;    <span class="comment">// Compute the node&#39;s path. Three cases:</span></div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="comment">//  (1) If the root node, use the empty string</span></div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    <span class="comment">//  (2) If a child of the root node, use the child&#39;s name</span></div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="comment">//  (3) Otherwise, use the parent&#39;s name, &quot;/&quot;, and the child&#39;s name.</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keywordflow">if</span> (parent == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00212"></a><span class="lineno">  2
 12</span>&#160;      <a class="code" href="namespacepath.html">path</a> = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (parent-&gt;parent == <span class="keyword">nullptr</span>) {</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;      <a class="code" href="namespacepath.html">path</a> = <a class="code" href="namespaceos_1_1Shell.html#acfe16ef2b1146ad49a8651c0a457ce46">name</a>;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;      <a class="code" href="namespacepath.html">path</a> = <a class="code" href="namespacestrings.html#ac315a6174f56cba0d8295f84da265416">strings::join</a>(<span class="stringliteral">&quot;/&quot;</spa
 n>, parent-&gt;path, <a class="code" href="namespaceos_1_1Shell.html#acfe16ef2b1146ad49a8651c0a457ce46">name</a>);</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    }</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  }</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;</div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a65232b224b7dccfc14e1dd6e3b4f65d4">  220</a></span>&#160;  <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a65232b224b7dccfc14e1dd6e3b4f65d4">~Node</a>()</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;  {</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    <span class="keywordflow">foreach</span> (<a class="code" href="structmesos_1_1in
 ternal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* child, <a class="code" href="namespaceos.html#a363f959e94e301ec8ec483e3c22258a6">children</a>) {</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;      <span class="keyword">delete</span> child;</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    }</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;  }</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;  <span class="comment">// The label of the edge from this node&#39;s parent to the</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;  <span class="comment">// node. &quot;Implicit&quot; leaf nodes are always named &quot;.&quot;.</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>
 &#160;  <span class="comment">//</span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;  <span class="comment">// TODO(neilc): Consider naming implicit leaf nodes in a clearer</span></div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  <span class="comment">// way, e.g., by making `name` an Option?</span></div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a5e5552460ef5dcfc3cf48c90e9fd0f4e">  232</a></span>&#160;  std::string <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a5e5552460ef5dcfc3cf48c90e9fd0f4e">name</a>;</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;  <span class="comment">// Complete path from root to node. This includes the 
 trailing &quot;.&quot;</span></div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;  <span class="comment">// label for virtual leaf nodes.</span></div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#ad0f2418e6d3e6eab224803157e91bfd5">  236</a></span>&#160;  std::string <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#ad0f2418e6d3e6eab224803157e91bfd5">path</a>;</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#abc5626caa825ddd965d4e64ae0763b35">  238</a></span>&#160;  <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3">Kind
 </a> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#abc5626caa825ddd965d4e64ae0763b35">kind</a>;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#adc15d359fa7ce7550186bbbae4666634">  240</a></span>&#160;  <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#adc15d359fa7ce7550186bbbae4666634">parent</a>;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;  <span class="comment">// Pointers to the child nodes. `children` is only non-empty if</span></div><div class="line"><a n
 ame="l00243"></a><span class="lineno">  243</span>&#160;  <span class="comment">// `kind` is INTERNAL_NODE.</span></div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  <span class="comment">//</span></div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;  <span class="comment">// All inactive leaves are stored at the end of the vector; that</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  <span class="comment">// is, each `children` vector consists of zero or more active leaves</span></div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="comment">// and internal nodes, followed by zero or more inactive leaves. This</span></div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;  <span class="comment">// means that code that only wants to iterate over active children</span></div><div class="line"><a name="l00249
 "></a><span class="lineno">  249</span>&#160;  <span class="comment">// can stop when the first inactive leaf is observed.</span></div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a7a4cb30426bbd47794a4fda65b15eead">  250</a></span>&#160;  std::vector&lt;Node*&gt; <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a7a4cb30426bbd47794a4fda65b15eead">children</a>;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  <span class="comment">// If this node represents a sorter client, this returns the path of</span></div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  <span class="comment">// that client. Unlike the `path` field, this does NOT include the</span></div><div class="line"><a
  name="l00254"></a><span class="lineno">  254</span>&#160;  <span class="comment">// trailing &quot;.&quot; label for virtual leaf nodes.</span></div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;  <span class="comment">//</span></div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;  <span class="comment">// For example, if the sorter contains two clients &quot;a&quot; and &quot;a/b&quot;,</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  <span class="comment">// the tree will contain four nodes: the root node, &quot;a&quot;, &quot;a/.&quot;</span></div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  <span class="comment">// (virtual leaf), and &quot;a/b&quot;. The `clientPath()` of &quot;a/.&quot; is &quot;a&quot;,</span></div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  <span class="comment">// because that is th
 e name of the client associated with that</span></div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;  <span class="comment">// virtual leaf node.</span></div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a697f4b8146c6fe151c5f3190863c69d0">  261</a></span>&#160;  std::string <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a697f4b8146c6fe151c5f3190863c69d0">clientPath</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keywordflow">if</span> (name == <span class="stringliteral">&quot;.&quot;</span>) {</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;      CHEC
 K(kind == ACTIVE_LEAF || kind == INACTIVE_LEAF);</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;      <span class="keywordflow">return</span> CHECK_NOTNULL(parent)-&gt;path;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    <span class="keywordflow">return</span> path;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  }</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#af470de059a7ebbf88fb712f4c0f65d18">  271</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="structmesos_1_1internal_1_1m
 aster_1_1allocator_1_1RandomSorter_1_1Node.html#af470de059a7ebbf88fb712f4c0f65d18">isLeaf</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <span class="keywordflow">if</span> (kind == ACTIVE_LEAF || kind == INACTIVE_LEAF) {</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;      CHECK(children.empty());</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;      <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    }</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    <span class="keywordflow">return</span> 
 <span class="keyword">false</span>;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  }</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3ec3ef396244e79dd5cb3d5ad6125a2d">  281</a></span>&#160;  <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3ec3ef396244e79dd5cb3d5ad6125a2d">removeChild</a>(<span class="keyword">const</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* child)</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  {</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    <span class="comment">// Sanity check: ensure we are rem
 oving an extant node.</span></div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    <span class="keyword">auto</span> it = <a class="code" href="namespaceos.html#a965c9c19022c17c26fc5720f718e6c1a">std::find</a>(children.begin(), children.end(), child);</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    CHECK(it != children.end());</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    children.erase(it);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  }</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#ad5d021c97e4c87fdc3785c7b66605b00">  290</a></span>&#160;  <span class=
 "keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#ad5d021c97e4c87fdc3785c7b66605b00">addChild</a>(<a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html">Node</a>* child)</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  {</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;    <span class="comment">// Sanity check: don&#39;t allow duplicates to be inserted.</span></div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    <span class="keyword">auto</span> it = <a class="code" href="namespaceos.html#a965c9c19022c17c26fc5720f718e6c1a">std::find</a>(children.begin(), children.end(), child);</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;    CHECK(it == children.end());</div><div class="line"><a name="l00295"></a><span class="lineno">  295</sp
 an>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;    <span class="comment">// If we&#39;re inserting an inactive leaf, place it at the end of the</span></div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    <span class="comment">// `children` vector; otherwise, place it at the beginning. This</span></div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    <span class="comment">// maintains ordering invariant above.</span></div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    <span class="keywordflow">if</span> (child-&gt;<a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#abc5626caa825ddd965d4e64ae0763b35">kind</a> == INACTIVE_LEAF) {</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;      children.push_back(child);</div><div class="line"><a name="l00301"></a><span cl
 ass="lineno">  301</span>&#160;    } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;      children.insert(children.begin(), child);</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    }</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  }</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  <span class="comment">// Allocation for a node.</span></div><div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html">  307</a></span>&#160;  <span class="keyword">struct </span><a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html">Allocation</a></div><div class="line">
 <a name="l00308"></a><span class="lineno">  308</span>&#160;  {</div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#ada904eed39a0e4585c219c4d12572435">  309</a></span>&#160;    <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#ada904eed39a0e4585c219c4d12572435">Allocation</a>() {}</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#a37fc0ede65385eeb9122c1a3ccf16639">  311</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#a37fc0ede65385eeb9122c1a3ccf16639">add</a>(<span class="
 keyword">const</span> SlaveID&amp; slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; toAdd)</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    {</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;      <span class="comment">// Add shared resources to the allocated quantities when the same</span></div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;      <span class="comment">// resources don&#39;t already exist in the allocation.</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a> sharedToAdd = toAdd.<a class="code" href="classmesos_1_1Resources.html#a1bf71a3804f142e92e0dd28884ea8f99">shared</a>()</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160; 
        .<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>([<span class="keyword">this</span>, slaveId](<span class="keyword">const</span> Resource&amp; resource) {</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;            <span class="keywordflow">return</span> !resources[slaveId].contains(resource);</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        });</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a> quantitiesToAdd =</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        (toAdd.<a class="code" href="classmesos_1_1Resources.html#a7422a6ffb5e5988b507d587de1aa3e66">nonShared</a>() + sharedToAdd).createStr
 ippedScalarQuantity();</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;      resources[slaveId] += toAdd;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;      scalarQuantities += quantitiesToAdd;</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;      <span class="keywordflow">foreach</span> (<span class="keyword">const</span> Resource&amp; resource, quantitiesToAdd) {</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        totals[resource.name()] += resource.scalar();</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;      }</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    }</div><div class="line"><a name="l003
 30"></a><span class="lineno">  330</span>&#160;</div><div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#ac5cb4bbe1c1fbbf62dc389a5ec403a75">  331</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#ac5cb4bbe1c1fbbf62dc389a5ec403a75">subtract</a>(<span class="keyword">const</span> SlaveID&amp; slaveId, <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; toRemove)</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    {</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;      CHECK(resources.contains(slaveId));</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;      CHECK(resources.at(slaveId).contains(
 toRemove))</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        &lt;&lt; <span class="stringliteral">&quot;Resources &quot;</span> &lt;&lt; resources.at(slaveId) &lt;&lt; <span class="stringliteral">&quot; at agent &quot;</span> &lt;&lt; slaveId</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;        &lt;&lt; <span class="stringliteral">&quot; does not contain &quot;</span> &lt;&lt; toRemove;</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;      resources[slaveId] -= toRemove;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;      <span class="comment">// Remove shared resources from the allocated quantities when there</span></div><div class="line"><a name="l00341"></a><span cla
 ss="lineno">  341</span>&#160;      <span class="comment">// are no instances of same resources left in the allocation.</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a> sharedToRemove = toRemove.<a class="code" href="classmesos_1_1Resources.html#a1bf71a3804f142e92e0dd28884ea8f99">shared</a>()</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;        .<a class="code" href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">filter</a>([<span class="keyword">this</span>, slaveId](<span class="keyword">const</span> Resource&amp; resource) {</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;            <span class="keywordflow">return</span> !resources[slaveId].contains(resource);</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;  
       });</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a> quantitiesToRemove =</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;        (toRemove.nonShared() + sharedToRemove).createStrippedScalarQuantity();</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;      <span class="keywordflow">foreach</span> (<span class="keyword">const</span> Resource&amp; resource, quantitiesToRemove) {</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;        totals[resource.name()] -= resource.scalar();</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;      }</div>
 <div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;      CHECK(scalarQuantities.contains(quantitiesToRemove))</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;        &lt;&lt; scalarQuantities &lt;&lt; <span class="stringliteral">&quot; does not contain &quot;</span> &lt;&lt; quantitiesToRemove;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;      scalarQuantities -= quantitiesToRemove;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;      <span class="keywordflow">if</span> (resources[slaveId].empty()) {</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;        resources.e
 rase(slaveId);</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;      }</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    }</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#af3cd7485edad6d91386a8421a0580bd3">  364</a></span>&#160;    <span class="keywordtype">void</span> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#af3cd7485edad6d91386a8421a0580bd3">update</a>(</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;        <span class="keyword">const</span> SlaveID&amp; slaveId,</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;        <span class="keyword">const</span> <a class=
 "code" href="classmesos_1_1Resources.html">Resources</a>&amp; oldAllocation,</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;        <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a>&amp; newAllocation)</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    {</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Resources</a> oldAllocationQuantity =</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        oldAllocation.<a class="code" href="classmesos_1_1Resources.html#a350c2c74774111e8b961127b7311fecc">createStrippedScalarQuantity</a>();</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;      <span class="keyword">const</span> <a class="code" href="classmesos_1_1Resources.html">Re
 sources</a> newAllocationQuantity =</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        newAllocation.<a class="code" href="classmesos_1_1Resources.html#a350c2c74774111e8b961127b7311fecc">createStrippedScalarQuantity</a>();</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;      CHECK(resources.contains(slaveId));</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;      CHECK(resources[slaveId].<a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a7d200b2c37563695d823cb654b1387f9">contains</a>(oldAllocation))</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        &lt;&lt; <span class="stringliteral">&quot;Resources &quot;</span> &lt;&lt; resources[slaveId] &lt;&lt; <span class="stringliteral">&quot; at agent &quot;</span> &lt;&
 lt; slaveId</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;        &lt;&lt; <span class="stringliteral">&quot; does not contain &quot;</span> &lt;&lt; oldAllocation;</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;      CHECK(scalarQuantities.contains(oldAllocationQuantity))</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        &lt;&lt; scalarQuantities &lt;&lt; <span class="stringliteral">&quot; does not contain &quot;</span> &lt;&lt; oldAllocationQuantity;</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;      resources[slaveId] -= oldAllocation;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;      resources[slaveId] += newAllocation;</div><
 div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;      scalarQuantities -= oldAllocationQuantity;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;      scalarQuantities += newAllocationQuantity;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;      <span class="keywordflow">foreach</span> (<span class="keyword">const</span> Resource&amp; resource, oldAllocationQuantity) {</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;        totals[resource.name()] -= resource.scalar();</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;      }</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;</div><div class="line"><a name="l00392"></a>
 <span class="lineno">  392</span>&#160;      <span class="keywordflow">foreach</span> (<span class="keyword">const</span> Resource&amp; resource, newAllocationQuantity) {</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        totals[resource.name()] += resource.scalar();</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;      }</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    }</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <span class="comment">// We maintain multiple copies of each shared resource allocated</span></div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;    <span class="comment">// to a client, where the number of copies represents the number</span></div><div class="line"><a name="l00399"></a><span class="lineno
 ">  399</span>&#160;    <span class="comment">// of times this shared resource has been allocated to (and has</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <span class="comment">// not been recovered from) a specific client.</span></div><div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#aab9b4e1ff70cd04640975dc19f9eb991">  401</a></span>&#160;    <a class="code" href="classhashmap.html">hashmap&lt;SlaveID, Resources&gt;</a> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#aab9b4e1ff70cd04640975dc19f9eb991">resources</a>;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    <span class="comment">// Similarly, we aggregate scalars across sla
 ves and omit information</span></div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    <span class="comment">// about dynamic reservations, persistent volumes and sharedness of</span></div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    <span class="comment">// the corresponding resource. See notes above.</span></div><div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#a108d5e685dafd31ecf73933257e1252b">  406</a></span>&#160;    <a class="code" href="classmesos_1_1Resources.html">Resources</a> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#a108d5e685dafd31ecf73933257e1252b">scalarQuantities</a>;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;</div><div class="line"><a name="l00408"></a><span class="lin
 eno">  408</span>&#160;    <span class="comment">// We also store a map version of `scalarQuantities`, mapping</span></div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="comment">// the `Resource::name` to aggregated scalar. This improves the</span></div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    <span class="comment">// performance of calculating shares. See MESOS-4694.</span></div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <span class="comment">//</span></div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    <span class="comment">// TODO(bmahler): Ideally we do not store `scalarQuantities`</span></div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    <span class="comment">// redundantly here, investigate performance improvements to</span></div><div class="line"><a name="l00414"></a><span class=
 "lineno">  414</span>&#160;    <span class="comment">// `Resources` to make this unnecessary.</span></div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#aa8efc8dc71443bbea068f5f83afebb02">  415</a></span>&#160;    <a class="code" href="classhashmap.html">hashmap&lt;std::string, Value::Scalar&gt;</a> <a class="code" href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#aa8efc8dc71443bbea068f5f83afebb02">totals</a>;</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;  } <a class="code" href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ac86428b55a605cbe33419d54706d883a">allocation</a>;</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;};</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;</div><div class
 ="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;} <span class="comment">// namespace allocator {</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;} <span class="comment">// namespace master {</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;} <span class="comment">// namespace internal {</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;} <span class="comment">// namespace mesos {</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="preprocessor">#endif // __MASTER_ALLOCATOR_SORTER_RANDOM_SORTER_HPP__</span></div><div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html
 ">mesos::internal::master::allocator::RandomSorter::Node</a></div><div class="ttdef"><b>Definition:</b> sorter.hpp:190</div></div>
+<div class="ttc" id="namespacepath_html"><div class="ttname"><a href="namespacepath.html">path</a></div><div class="ttdef"><b>Definition:</b> path.hpp:26</div></div>
+<div class="ttc" id="resources_8hpp_html"><div class="ttname"><a href="resources_8hpp.html">resources.hpp</a></div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_adc15d359fa7ce7550186bbbae4666634"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#adc15d359fa7ce7550186bbbae4666634">mesos::internal::master::allocator::RandomSorter::Node::parent</a></div><div class="ttdeci">Node * parent</div><div class="ttdef"><b>Definition:</b> sorter.hpp:240</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_a3fdf652114f250eae8f6efff6989b2e3a9892b22953d63bc5359351d48e5b6f77"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3a9892b22953d63bc5359351d48e5b6f77">mesos::internal::master::allocator::RandomSorter::Node::ACTIVE_LEAF</a></div><div class="ttdef"><b>Definition:</b> sorter.hpp:198</div></div>
+<div class="ttc" id="classOption_html"><div class="ttname"><a href="classOption.html">Option</a></div><div class="ttdef"><b>Definition:</b> option.hpp:28</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation_html_aa8efc8dc71443bbea068f5f83afebb02"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#aa8efc8dc71443bbea068f5f83afebb02">mesos::internal::master::allocator::RandomSorter::Node::Allocation::totals</a></div><div class="ttdeci">hashmap&lt; std::string, Value::Scalar &gt; totals</div><div class="ttdef"><b>Definition:</b> sorter.hpp:415</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_html_a2ebff336f83910e32cb26c3a860a0abe"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a2ebff336f83910e32cb26c3a860a0abe">mesos::internal::master::allocator::RandomSorter::allocated</a></div><div class="ttdeci">virtual void allocated(const std::string &amp;clientPath, const SlaveID &amp;slaveId, const Resources &amp;resources)</div></div>
+<div class="ttc" id="namespacemesos_1_1v1_1_1master_html"><div class="ttname"><a href="namespacemesos_1_1v1_1_1master.html">mesos::v1::master</a></div><div class="ttdef"><b>Definition:</b> master.hpp:27</div></div>
+<div class="ttc" id="sorter_8hpp_html"><div class="ttname"><a href="sorter_8hpp.html">sorter.hpp</a></div></div>
+<div class="ttc" id="namespacestrings_html_ac315a6174f56cba0d8295f84da265416"><div class="ttname"><a href="namespacestrings.html#ac315a6174f56cba0d8295f84da265416">strings::join</a></div><div class="ttdeci">std::stringstream &amp; join(std::stringstream &amp;stream, const std::string &amp;separator, T &amp;&amp;...args)</div><div class="ttdef"><b>Definition:</b> strings.hpp:307</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_a697f4b8146c6fe151c5f3190863c69d0"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a697f4b8146c6fe151c5f3190863c69d0">mesos::internal::master::allocator::RandomSorter::Node::clientPath</a></div><div class="ttdeci">std::string clientPath() const </div><div class="ttdef"><b>Definition:</b> sorter.hpp:261</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_af470de059a7ebbf88fb712f4c0f65d18"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#af470de059a7ebbf88fb712f4c0f65d18">mesos::internal::master::allocator::RandomSorter::Node::isLeaf</a></div><div class="ttdeci">bool isLeaf() const </div><div class="ttdef"><b>Definition:</b> sorter.hpp:271</div></div>
+<div class="ttc" id="include_2mesos_2mesos_8hpp_html"><div class="ttname"><a href="include_2mesos_2mesos_8hpp.html">mesos.hpp</a></div></div>
+<div class="ttc" id="classmesos_1_1Resources_html_a62ae547c0d24fdfb139549e9b8126fdf"><div class="ttname"><a href="classmesos_1_1Resources.html#a62ae547c0d24fdfb139549e9b8126fdf">mesos::Resources::filter</a></div><div class="ttdeci">Resources filter(const lambda::function&lt; bool(const Resource &amp;)&gt; &amp;predicate) const </div></div>
+<div class="ttc" id="include_2mesos_2values_8hpp_html"><div class="ttname"><a href="include_2mesos_2values_8hpp.html">values.hpp</a></div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_a3fdf652114f250eae8f6efff6989b2e3a6c8ce8ebea023706f04344f88b201b7d"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3fdf652114f250eae8f6efff6989b2e3a6c8ce8ebea023706f04344f88b201b7d">mesos::internal::master::allocator::RandomSorter::Node::INACTIVE_LEAF</a></div><div class="ttdef"><b>Definition:</b> sorter.hpp:199</div></div>
+<div class="ttc" id="classmesos_1_1Resources_html"><div class="ttname"><a href="classmesos_1_1Resources.html">mesos::Resources</a></div><div class="ttdef"><b>Definition:</b> resources.hpp:79</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_html_a7469d4840caa9ccd226e6340d973f09b"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a7469d4840caa9ccd226e6340d973f09b">mesos::internal::master::allocator::RandomSorter::sort</a></div><div class="ttdeci">virtual std::vector&lt; std::string &gt; sort()</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_html"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html">mesos::internal::master::allocator::RandomSorter</a></div><div class="ttdef"><b>Definition:</b> sorter.hpp:42</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_html_a862a133c453addb48033a7306a15add1"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a862a133c453addb48033a7306a15add1">mesos::internal::master::allocator::RandomSorter::count</a></div><div class="ttdeci">virtual size_t count() const </div></div>
+<div class="ttc" id="stout_2include_2stout_2check_8hpp_html"><div class="ttname"><a href="stout_2include_2stout_2check_8hpp.html">check.hpp</a></div></div>
+<div class="ttc" id="classhashmap_html"><div class="ttname"><a href="classhashmap.html">hashmap</a></div><div class="ttdef"><b>Definition:</b> hashmap.hpp:38</div></div>
+<div class="ttc" id="namespacemesos_1_1modules_html_a70163bdea2fe39ef5b798a7d7ee0c220"><div class="ttname"><a href="namespacemesos_1_1modules.html#a70163bdea2fe39ef5b798a7d7ee0c220">mesos::modules::kind</a></div><div class="ttdeci">const char * kind()</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation_html"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html">mesos::internal::master::allocator::RandomSorter::Node::Allocation</a></div><div class="ttdef"><b>Definition:</b> sorter.hpp:307</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_a65232b224b7dccfc14e1dd6e3b4f65d4"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a65232b224b7dccfc14e1dd6e3b4f65d4">mesos::internal::master::allocator::RandomSorter::Node::~Node</a></div><div class="ttdeci">~Node()</div><div class="ttdef"><b>Definition:</b> sorter.hpp:220</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_html_a1786c10ddb878707caa1afa0724c9feb"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a1786c10ddb878707caa1afa0724c9feb">mesos::internal::master::allocator::RandomSorter::RandomSorter</a></div><div class="ttdeci">RandomSorter()</div></div>
+<div class="ttc" id="structprocess_1_1UPID_html"><div class="ttname"><a href="structprocess_1_1UPID.html">process::UPID</a></div><div class="ttdoc">An &quot;untyped&quot; PID, used to encapsulate the process ID for lower-layer abstractions (eg...</div><div class="ttdef"><b>Definition:</b> pid.hpp:39</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_a3ec3ef396244e79dd5cb3d5ad6125a2d"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a3ec3ef396244e79dd5cb3d5ad6125a2d">mesos::internal::master::allocator::RandomSorter::Node::removeChild</a></div><div class="ttdeci">void removeChild(const Node *child)</div><div class="ttdef"><b>Definition:</b> sorter.hpp:281</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_html_ac86428b55a605cbe33419d54706d883a"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#ac86428b55a605cbe33419d54706d883a">mesos::internal::master::allocator::RandomSorter::allocation</a></div><div class="ttdeci">virtual const hashmap&lt; SlaveID, Resources &gt; &amp; allocation(const std::string &amp;clientPath) const </div></div>
+<div class="ttc" id="classmesos_1_1Resources_html_a350c2c74774111e8b961127b7311fecc"><div class="ttname"><a href="classmesos_1_1Resources.html#a350c2c74774111e8b961127b7311fecc">mesos::Resources::createStrippedScalarQuantity</a></div><div class="ttdeci">Resources createStrippedScalarQuantity() const </div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_ad5d021c97e4c87fdc3785c7b66605b00"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#ad5d021c97e4c87fdc3785c7b66605b00">mesos::internal::master::allocator::RandomSorter::Node::addChild</a></div><div class="ttdeci">void addChild(Node *child)</div><div class="ttdef"><b>Definition:</b> sorter.hpp:290</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation_html_af3cd7485edad6d91386a8421a0580bd3"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_1_1Allocation.html#af3cd7485edad6d91386a8421a0580bd3">mesos::internal::master::allocator::RandomSorter::Node::Allocation::update</a></div><div class="ttdeci">void update(const SlaveID &amp;slaveId, const Resources &amp;oldAllocation, const Resources &amp;newAllocation)</div><div class="ttdef"><b>Definition:</b> sorter.hpp:364</div></div>
+<div class="ttc" id="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node_html_a7a4cb30426bbd47794a4fda65b15eead"><div class="ttname"><a href="structmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_1_1Node.html#a7a4cb30426bbd47794a4fda65b15eead">mesos::internal::master::allocator::RandomSorter::Node::children</a></div><div class="ttdeci">std::vector&lt; Node * &gt; children</div><div class="ttdef"><b>Definition:</b> sorter.hpp:250</div></div>
+<div class="ttc" id="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter_html_a43a8efed7d28fe094d1c547cbf0032b1"><div class="ttname"><a href="classmesos_1_1internal_1_1master_1_1allocator_1_1RandomSorter.html#a43a8efed7d28fe094d1c547cbf0032b1">mesos::internal::mast

<TRUNCATED>

Mime
View raw message