<div dir="ltr">Hi swift developer,<div><br></div><div style>I'm confused about implementation of ring structure.</div><div style><br></div><div style>in the RingBuilder, line 671 ~ 681</div><div style><br></div><div style>
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><div class="" id="LC671" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
<span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">        for</span> <span class="" style="margin:0px;padding:0px;border:0px">part</span><span class="" style="margin:0px;padding:0px;border:0px">,</span> <span class="" style="margin:0px;padding:0px;border:0px">replace_replicas</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">in</span> <span class="" style="margin:0px;padding:0px;border:0px">reassign_parts</span><span class="" style="margin:0px;padding:0px;border:0px">:</span></div>
<div class="" id="LC672" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
            <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(153,153,136);font-style:italic"># Gather up what other tiers (zones, ip_ports, and devices) the</span></div><div class="" id="LC673" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
            <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(153,153,136);font-style:italic"># replicas not-to-be-moved are in for this part.</span></div><div class="" id="LC674" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
            <span class="" style="margin:0px;padding:0px;border:0px">other_replicas</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px">defaultdict</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">int</span><span class="" style="margin:0px;padding:0px;border:0px">)</span></div>
<div class="" id="LC675" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
            <span class="" style="margin:0px;padding:0px;border:0px">unique_tiers_by_tier_len</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px">defaultdict</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">set</span><span class="" style="margin:0px;padding:0px;border:0px">)</span></div>
<div class="" id="LC676" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
            <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">for</span> <span class="" style="margin:0px;padding:0px;border:0px">replica</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">in</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">xrange</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(153,153,153)">self</span><span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">.</span><span class="" style="margin:0px;padding:0px;border:0px">replicas</span><span class="" style="margin:0px;padding:0px;border:0px">):</span></div>
<div class="" id="LC677" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
                <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">if</span> <span class="" style="margin:0px;padding:0px;border:0px">replica</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">not</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">in</span> <span class="" style="margin:0px;padding:0px;border:0px">replace_replicas</span><span class="" style="margin:0px;padding:0px;border:0px">:</span></div>
<div class="" id="LC678" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
                    <span class="" style="margin:0px;padding:0px;border:0px">dev</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(153,153,153)">self</span><span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">.</span><span class="" style="margin:0px;padding:0px;border:0px">devs</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(153,153,153)">self</span><span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">.</span><span class="" style="margin:0px;padding:0px;border:0px">_replica2part2dev</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px">replica</span><span class="" style="margin:0px;padding:0px;border:0px">][</span><span class="" style="margin:0px;padding:0px;border:0px">part</span><span class="" style="margin:0px;padding:0px;border:0px">]]</span></div>
<div class="" id="LC679" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
                    <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">for</span> <span class="" style="margin:0px;padding:0px;border:0px">tier</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">in</span> <span class="" style="margin:0px;padding:0px;border:0px">tiers_for_dev</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">dev</span><span class="" style="margin:0px;padding:0px;border:0px">):</span></div>
<div class="" id="LC680" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
                        <span class="" style="margin:0px;padding:0px;border:0px">other_replicas</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px">tier</span><span class="" style="margin:0px;padding:0px;border:0px">]</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">+=</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1</span></div>
<div class="" id="LC681" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
                        <span class="" style="margin:0px;padding:0px;border:0px">unique_tiers_by_tier_len</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">len</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">tier</span><span class="" style="margin:0px;padding:0px;border:0px">)]</span><span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">.</span><span class="" style="margin:0px;padding:0px;border:0px">add</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">tier</span><span class="" style="margin:0px;padding:0px;border:0px">)</span></div>
<div class="" id="LC681" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px 0px 0px 10px;border:0px">
<span class="" style="font-size:12.222222328186035px;line-height:17.77777862548828px;margin:0px;padding:0px;border:0px"><br></span></div><br>this while loop results<font color="#000000"> in</font><font color="#0000ff"> other_replicas</font> and <font color="#0000ff">unique_tiers_by_tier_len, </font>but I don't have a confirmed understanding about these two data.<br>
<div class="" id="LC681" style="margin:0px;padding:0px 0px 0px 10px;border:0px"><span style="background-color:rgb(255,255,255)"><font color="#0000ff"><br></font></span></div>and in line 684 to 725: (I removed comments)</pre>
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><br></pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><div class="" id="LC684" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
<span class="" style="margin:0px;padding:0px;border:0px">                tier</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px">()</span></div>
<div class="" id="LC685" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                <span class="" style="margin:0px;padding:0px;border:0px">depth</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1</span></div>
<div class="" id="LC686" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">while</span> <span class="" style="margin:0px;padding:0px;border:0px">depth</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold"><=</span> <span class="" style="margin:0px;padding:0px;border:0px">max_tier_depth</span><span class="" style="margin:0px;padding:0px;border:0px">:</span></div>
<div class="" id="LC706" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                    <span class="" style="margin:0px;padding:0px;border:0px">candidate_tiers</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px">tier2children</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px">tier</span><span class="" style="margin:0px;padding:0px;border:0px">]</span></div>
<div class="" id="LC707" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                    <span class="" style="margin:0px;padding:0px;border:0px">candidates_with_replicas</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> \</div><div class="" id="LC708" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                        <span class="" style="margin:0px;padding:0px;border:0px">unique_tiers_by_tier_len</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">len</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">tier</span><span class="" style="margin:0px;padding:0px;border:0px">)</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">+</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1</span><span class="" style="margin:0px;padding:0px;border:0px">]</span></div>
<div class="" id="LC709" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                    <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">if</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">len</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">candidate_tiers</span><span class="" style="margin:0px;padding:0px;border:0px">)</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">></span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">len</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">candidates_with_replicas</span><span class="" style="margin:0px;padding:0px;border:0px">):</span></div>
<div class="" id="LC717" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                        <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">for</span> <span class="" style="margin:0px;padding:0px;border:0px">t</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">in</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">reversed</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">candidate_tiers</span><span class="" style="margin:0px;padding:0px;border:0px">):</span></div>
<div class="" id="LC718" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                            <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">if</span> <span class="" style="margin:0px;padding:0px;border:0px">other_replicas</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px">t</span><span class="" style="margin:0px;padding:0px;border:0px">]</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">==</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">0</span><span class="" style="margin:0px;padding:0px;border:0px">:</span></div>
<div class="" id="LC719" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                                <span class="" style="margin:0px;padding:0px;border:0px">tier</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px">t</span></div>
<div class="" id="LC720" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                                <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">break</span></div><div class="" id="LC721" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                    <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">else</span><span class="" style="margin:0px;padding:0px;border:0px">:</span></div><div class="" id="LC722" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                        <span class="" style="margin:0px;padding:0px;border:0px">min_count</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">min</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">other_replicas</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px">t</span><span class="" style="margin:0px;padding:0px;border:0px">]</span></div>
<div class="" id="LC723" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                                        <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">for</span> <span class="" style="margin:0px;padding:0px;border:0px">t</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">in</span> <span class="" style="margin:0px;padding:0px;border:0px">candidate_tiers</span><span class="" style="margin:0px;padding:0px;border:0px">)</span></div>
<div class="" id="LC724" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                        <span class="" style="margin:0px;padding:0px;border:0px">tier</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">=</span> <span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">t</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">for</span> <span class="" style="margin:0px;padding:0px;border:0px">t</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">in</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,134,179)">reversed</span><span class="" style="margin:0px;padding:0px;border:0px">(</span><span class="" style="margin:0px;padding:0px;border:0px">candidate_tiers</span><span class="" style="margin:0px;padding:0px;border:0px">)</span></div>
<div class="" id="LC725" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                                <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">if</span> <span class="" style="margin:0px;padding:0px;border:0px">other_replicas</span><span class="" style="margin:0px;padding:0px;border:0px">[</span><span class="" style="margin:0px;padding:0px;border:0px">t</span><span class="" style="margin:0px;padding:0px;border:0px">]</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">==</span> <span class="" style="margin:0px;padding:0px;border:0px">min_count</span><span class="" style="margin:0px;padding:0px;border:0px">)</span><span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">.</span><span class="" style="margin:0px;padding:0px;border:0px">next</span><span class="" style="margin:0px;padding:0px;border:0px">()</span></div>
<div class="" id="LC726" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
                    <span class="" style="margin:0px;padding:0px;border:0px">depth</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">+=</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1</span></div>
<div class="" id="LC726" style="font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12.222222328186035px;line-height:17.77777862548828px;color:rgb(51,51,51);margin:0px;padding:0px 0px 0px 10px;border:0px">
<span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)"><br></span></div>this loop search the tier tree, from () to (zone, ip, device), for finding a tier, and choosing a dev by that tier, and storing dev id in part key(line 762, that's a kind of final ring structure?). And the propose of tree structure is:</pre>
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px">"""</pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><span style="font-family:arial,sans-serif;font-size:13px;white-space:normal">This is already supported in Swift with the concept of availability zones. Swift will place each replica in different availability zones, if possible. If you only have one zone, Swift will place the replicas on different machines. If you only have one machine, Swift will place the replicas on different drives.</span><br>
</pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><span style="font-family:arial">-- John</span><br></pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px">""", right?</pre>
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><br></pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px">And the last loop line 732 to line 760 only works on sorting for next big loop? (line 683)</pre>
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><br></pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px">The propose of rebalance is to put every replica on correct partition, and put every partition on correct device? </pre>
<pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><br></pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><br></pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px">
Gareth</pre><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px"><br></pre></pre></div></div>