<div dir="ltr">Awesome.  I&#39;ll definitely review tomorrow.<div><br></div><div>- Luis</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 8, 2017 at 7:59 PM, Raghavendra Talur <span dir="ltr">&lt;<a href="mailto:rtalur@redhat.com" target="_blank">rtalur@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Luis,<br>
<br>
Please have a look at PR 710 which has changes that you requested.<br>
<br>
I have followed the revert of revert model for merge commits as<br>
suggested by Linus in<br>
<a href="https://raw.githubusercontent.com/git/git/master/Documentation/howto/revert-a-faulty-merge.txt" rel="noreferrer" target="_blank">https://raw.githubusercontent.<wbr>com/git/git/master/<wbr>Documentation/howto/revert-a-<wbr>faulty-merge.txt</a><br>
for create a new PR.<br>
<br>
If you prefer it to be in any other way, please let us know.<br>
<br>
Also, these changes don&#39;t have API+Async changes and Refactored code<br>
from allocator.<br>
I will send them in a few hours. Meanwhile I wanted to put the simpler<br>
stuff out for review.<br>
<br>
Thanks,<br>
Raghavendra Talur<br>
<br>
On Wed, Feb 22, 2017 at 2:01 PM, Mohamed Ashiq Liyazudeen<br>
<div class="HOEnZb"><div class="h5">&lt;<a href="mailto:mliyazud@redhat.com">mliyazud@redhat.com</a>&gt; wrote:<br>
&gt; Hi,<br>
&gt;<br>
&gt; New commit addresses all the comments. Please Review and comment on the PR.<br>
&gt;<br>
&gt; Prerequisites, Done:<br>
&gt; We now added VolumeId in BrickEntry and VolumeInfo Executor call which will<br>
&gt; return Whole information of volume from gluster Itself(instead of saving the<br>
&gt; brick peer(brickset), we generate the brick peers from this information).<br>
&gt;<br>
&gt;<br>
&gt; How does this work:<br>
&gt;<br>
&gt; For a Device to be remove.<br>
&gt; First If the Device is Empty then Return ok to remove.<br>
&gt; Else<br>
&gt; Get the bricklist for bricks in device to be removed and its appropriate<br>
&gt; volumeEntrylist for bricks.<br>
&gt; Call Replace brick for a volume with the brickId.<br>
&gt;<br>
&gt;<br>
&gt; In Replace Brick Logic:<br>
&gt; 1)First we Find the BrickSet(a set in which brick belongs, For Example in<br>
&gt; Distribute-Replicate 2x3 [A(A1,A2,A3), B(B1,B2,B3)], B2 is on set B) in<br>
&gt; which the brick to be replaced is present.<br>
&gt; Reason to find this is we should not place the brick with another brick of<br>
&gt; same set(which will cause Quorum to be met if one node is down and also not<br>
&gt; a good design).<br>
&gt; 2) Call the allocator to give out devices for the same cluster.<br>
&gt; 3)Ignore the Device IF:<br>
&gt; a)Same Device to be removed<br>
&gt; b)Device belongs to same Node where one of the other bricks in Set is<br>
&gt; present<br>
&gt; 4) With above logic We can still use the logic of simpleAllocator ring to<br>
&gt; decide the brick placement with single Zone and Multiple zones.<br>
&gt; 5) On Failure returns Err and In case of NoSpaceError, We Respond<br>
&gt; Replacementnotfound.<br>
&gt;<br>
&gt;<br>
&gt; Note:<br>
&gt; Few basic tests added for New VolumeId for BrickEntry and all the failure<br>
&gt; based on executor.SimpleVolumeInfo change from executor.VolumeInfo has been<br>
&gt; fixed.<br>
&gt; Kept Device Remove modular so that can be used for Node Remove.<br>
&gt;<br>
&gt;<br>
&gt; To Be Done:<br>
&gt; Tests to be Added.<br>
&gt;<br>
&gt;<br>
&gt; [1] <a href="https://github.com/heketi/heketi/pull/676" rel="noreferrer" target="_blank">https://github.com/heketi/<wbr>heketi/pull/676</a><br>
&gt;<br>
&gt; -- Ashiq,Talur<br>
&gt; ______________________________<wbr>__<br>
&gt; From: &quot;Luis Pabon&quot; &lt;<a href="mailto:lpabon@chrysalix.org">lpabon@chrysalix.org</a>&gt;<br>
&gt; To: &quot;Mohamed Ashiq Liyazudeen&quot; &lt;<a href="mailto:mliyazud@redhat.com">mliyazud@redhat.com</a>&gt;<br>
&gt; Cc: <a href="mailto:heketi-devel@gluster.org">heketi-devel@gluster.org</a><br>
&gt; Sent: Friday, February 17, 2017 1:49:32 AM<br>
&gt;<br>
&gt; Subject: Re: [heketi-devel] Remove Device: Used to distribute all the bricks<br>
&gt; from device to other devices<br>
&gt;<br>
&gt; FYI, unless by some miracle there is no way this feature will be in by<br>
&gt; Sunday.  This feature is one of the hardest part of Heketi which is why<br>
&gt; <a href="https://github.com/heketi/heketi/issues/161" rel="noreferrer" target="_blank">https://github.com/heketi/<wbr>heketi/issues/161</a> has taken so long.<br>
&gt;<br>
&gt; The brick set is the heart of this change.  A brick set is how Heketi sets<br>
&gt; up the replicas in a ring.  For example: in a distributed replicated 2x3,<br>
&gt; brick A would need A1 and A2 as replicas.  Therefore, A,A1,A2 are a set.<br>
&gt; Same applies for B,B1,B2.<br>
&gt;<br>
&gt; Replacing a device which contains B1 (for example), would need a replacement<br>
&gt; brick which satisfies B and B2 for the set to be complete.  Same thing<br>
&gt; applies for EC where it is A,A1...A(n).<br>
&gt;<br>
&gt; This is a big change, which requires a good algorithm, execution, and<br>
&gt; testing.<br>
&gt;<br>
&gt; - Luis<br>
&gt;<br>
&gt; On Thu, Feb 16, 2017 at 2:25 PM, Mohamed Ashiq Liyazudeen<br>
&gt; &lt;<a href="mailto:mliyazud@redhat.com">mliyazud@redhat.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi Luis,<br>
&gt;&gt;<br>
&gt;&gt; I agree on adding the VolumeId part to db for bricks. I didn&#39;t get what<br>
&gt;&gt; you mean by brick peers?<br>
&gt;&gt;<br>
&gt;&gt; I wanted to know better about the allocator behaviors based on number of<br>
&gt;&gt; zones. If you see our example topology file, It has 4 nodes with multiple<br>
&gt;&gt; devices but 2 nodes are associated to a zone. There are only two zones now<br>
&gt;&gt; and while creating replica three volume how is the allocator creates ring of<br>
&gt;&gt; devices? Mainly in this case we can not ignore both zones.<br>
&gt;&gt;<br>
&gt;&gt; Also wanted to know in case of volume expand how are we approaching. I<br>
&gt;&gt; thought it will be using something similar to give the state(where the<br>
&gt;&gt; present brick are) of existing volume  to allocator and allocator will give<br>
&gt;&gt; back ring without those zones or nodes. But I think (correct me if I am<br>
&gt;&gt; wrong) Volume is changed by adding appropriate bricks, In the sense replica<br>
&gt;&gt; 3(3x1) is added bricks and made distribute replica 3(3x2). I agree this is<br>
&gt;&gt; the way to go, just trying to understand allocator better.<br>
&gt;&gt;<br>
&gt;&gt; We need this feature to be in by Sunday. I will be working on it mostly,<br>
&gt;&gt; Will definitely mail but is there any place to chat with you in case of<br>
&gt;&gt; doubts and quick answers?<br>
&gt;&gt;<br>
&gt;&gt; Tomorrow as first thing will add the VolumeId and brick peers(not sure<br>
&gt;&gt; what is it exactly).<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Ashiq<br>
&gt;&gt;<br>
&gt;&gt; ----- Original Message -----<br>
&gt;&gt; From: &quot;Luis Pabon&quot; &lt;<a href="mailto:lpabon@chrysalix.org">lpabon@chrysalix.org</a>&gt;<br>
&gt;&gt; To: &quot;Mohamed Ashiq Liyazudeen&quot; &lt;<a href="mailto:mliyazud@redhat.com">mliyazud@redhat.com</a>&gt;<br>
&gt;&gt; Cc: <a href="mailto:heketi-devel@gluster.org">heketi-devel@gluster.org</a><br>
&gt;&gt; Sent: Thursday, February 16, 2017 11:32:55 PM<br>
&gt;&gt; Subject: Re: [heketi-devel] Remove Device: Used to distribute all the<br>
&gt;&gt; bricks from device to other devices<br>
&gt;&gt;<br>
&gt;&gt; After we agree on the algorithm, the first PR would be to add the<br>
&gt;&gt; necessary<br>
&gt;&gt; framework to the DB to support #676.<br>
&gt;&gt;<br>
&gt;&gt; - Luis<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Feb 16, 2017 at 1:00 PM, Luis Pabon &lt;<a href="mailto:lpabon@chrysalix.org">lpabon@chrysalix.org</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; &gt; Great summary.  Yes, the next step should be to figure out how to<br>
&gt;&gt; &gt; enhance<br>
&gt;&gt; &gt; the ring to return a brick for another zone.  It could be as simple as:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If current bricks in set are in different zones:<br>
&gt;&gt; &gt;     Get a ring<br>
&gt;&gt; &gt;     Remove disks from the ring in zones already used<br>
&gt;&gt; &gt;     Return devices until one is found with the appropriate size<br>
&gt;&gt; &gt; else:<br>
&gt;&gt; &gt;    Get a ring<br>
&gt;&gt; &gt;    Return devices until one is found with the appropriate size<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Also, order of the disks may matter.  This part I am not sure of, but,<br>
&gt;&gt; &gt; we<br>
&gt;&gt; &gt; may need to make sure of the order of the bricks were added to the<br>
&gt;&gt; &gt; volume<br>
&gt;&gt; &gt; during &#39;create&#39;.  This may be necessary to determine which of the bricks<br>
&gt;&gt; &gt; in<br>
&gt;&gt; &gt; the brick set are in different zones.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; We may have to add a new DB entry in the Brick Entry.  For example:<br>
&gt;&gt; &gt; Brick<br>
&gt;&gt; &gt; peers, and Volume ID<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; - Luis<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Wed, Feb 15, 2017 at 2:17 PM, Mohamed Ashiq Liyazudeen &lt;<br>
&gt;&gt; &gt; <a href="mailto:mliyazud@redhat.com">mliyazud@redhat.com</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; Hi,<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; This mail talks about the PR[1]<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Let me start off with what is planned to do in this.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; We only support this feature for Replicate and Distribute Replicate<br>
&gt;&gt; &gt;&gt; Volume.<br>
&gt;&gt; &gt;&gt; Refer: <a href="https://gluster.readthedocs.io/en/latest/Administrator%20Gui" rel="noreferrer" target="_blank">https://gluster.readthedocs.<wbr>io/en/latest/Administrator%<wbr>20Gui</a><br>
&gt;&gt; &gt;&gt; de/Managing%20Volumes/#<wbr>replace-brick<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Removes all the brick from the device and start these bricks on other<br>
&gt;&gt; &gt;&gt; devices based on allocator. Heal is triggered automatically for<br>
&gt;&gt; &gt;&gt; replicate<br>
&gt;&gt; &gt;&gt; volumes on replace brick. Allocate and create new brick to replace. It<br>
&gt;&gt; &gt;&gt; stops the brick to be replaced, If it is not already down(kill the<br>
&gt;&gt; &gt;&gt; brick<br>
&gt;&gt; &gt;&gt; process). Then gluster replace brick which will replace the brick with<br>
&gt;&gt; &gt;&gt; new<br>
&gt;&gt; &gt;&gt; one and also starts the heals.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; If other nodes does not have sufficient storage then this command<br>
&gt;&gt; &gt;&gt; should<br>
&gt;&gt; &gt;&gt; fail.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; 1) If there are no bricks then tell user, It is clean to remove the<br>
&gt;&gt; &gt;&gt; device.<br>
&gt;&gt; &gt;&gt; 2) If there are bricks in the device, then find the volume they are<br>
&gt;&gt; &gt;&gt; related to from the list of volumes. Brickentry does not have the<br>
&gt;&gt; &gt;&gt; volume<br>
&gt;&gt; &gt;&gt; name it is associated to.<br>
&gt;&gt; &gt;&gt; 3) move the bricks to other devices by calling the allocator for the<br>
&gt;&gt; &gt;&gt; devices.<br>
&gt;&gt; &gt;&gt; 4) eliminate the device to be removed and all the nodes which are<br>
&gt;&gt; &gt;&gt; associated the volume already.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; We missed on the zone handling part. If there is a way to give the<br>
&gt;&gt; &gt;&gt; already used zone and node for the volume to allocator. Then allocator<br>
&gt;&gt; &gt;&gt; can<br>
&gt;&gt; &gt;&gt; return the devices which will be from different zone&#39;s node. I think<br>
&gt;&gt; &gt;&gt; 2,3,4<br>
&gt;&gt; &gt;&gt; will handle if there is only one zone. Let us know if there are any<br>
&gt;&gt; &gt;&gt; other<br>
&gt;&gt; &gt;&gt; risks or better ways to use allocator.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; [1] <a href="https://github.com/heketi/heketi/pull/676" rel="noreferrer" target="_blank">https://github.com/heketi/<wbr>heketi/pull/676</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt; Regards,<br>
&gt;&gt; &gt;&gt; Mohamed Ashiq.L<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt; &gt;&gt; heketi-devel mailing list<br>
&gt;&gt; &gt;&gt; <a href="mailto:heketi-devel@gluster.org">heketi-devel@gluster.org</a><br>
&gt;&gt; &gt;&gt; <a href="http://lists.gluster.org/mailman/listinfo/heketi-devel" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/heketi-devel</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Regards,<br>
&gt;&gt; Mohamed Ashiq.L<br>
&gt;&gt;<br>
&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt; heketi-devel mailing list<br>
&gt;&gt; <a href="mailto:heketi-devel@gluster.org">heketi-devel@gluster.org</a><br>
&gt;&gt; <a href="http://lists.gluster.org/mailman/listinfo/heketi-devel" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/heketi-devel</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Regards,<br>
&gt; Mohamed Ashiq.L<br>
&gt;<br>
&gt;<br>
&gt; ______________________________<wbr>_________________<br>
&gt; heketi-devel mailing list<br>
&gt; <a href="mailto:heketi-devel@gluster.org">heketi-devel@gluster.org</a><br>
&gt; <a href="http://lists.gluster.org/mailman/listinfo/heketi-devel" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/heketi-devel</a><br>
&gt;<br>
______________________________<wbr>_________________<br>
heketi-devel mailing list<br>
<a href="mailto:heketi-devel@gluster.org">heketi-devel@gluster.org</a><br>
<a href="http://lists.gluster.org/mailman/listinfo/heketi-devel" rel="noreferrer" target="_blank">http://lists.gluster.org/<wbr>mailman/listinfo/heketi-devel</a><br>
</div></div></blockquote></div><br></div>