<div dir="ltr"><div>Hi All,</div><div><br></div><div> I have used below approach to heal custom xattr(user,acl,quota) in patch(<a href="https://review.gluster.org/#/c/15468/">https://review.gluster.org/#/c/15468/</a>) to know about hashed_subvol that is required to first wind a fop(setxattr) on hashed_subvol then try to update the same on other subvols. </div><div><br></div><div> In dht_revalidate/lookup_cbk i do save hashed_subvolume on inode_ctx and at the time of set xattr(dht_setxattr) call function dht_inode_ctx_hashvol_get to know about the saved hashed_subvol.</div><div><br></div><div>1) First it will check stored hashed_subvol(after call the function dht_inode_ctx_hashvol_get) on a inode and </div><div>    save status in ret variable.</div><div><br></div><div>2) If ret is 0 (means hashed_subvol exists in inode) then it will check the status of hashed_subvol </div><div>       if it is up then set the index into fop_wind(variable) and break out from the loop</div><div>       If it(status) is down in that case it will set ret value to 1 and check next up  subvol and set index into fop_wind.</div><div> </div><div>    If hash_subvol index exist in last of array in that case it will set index in fop_wind of previous up subvolume. </div><div><br></div><div>3) if ret is not 0 (means hashed_subvol does not exist in the inode) then it will set index to last up subvol and break out from the  loop.</div><div><br></div><div>Below is the code to take decision about hashed_subvolume in dht_setxattr</div><div><br></div><div>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</div><div><br></div><div>ret = dht_inode_ctx_hashvol_get (loc-&gt;inode, this,</div><div>                                                 &amp;hashed_subvol);  </div><div>for (i = 0; i &lt; call_cnt; i++) {</div><div>                        if (!ret &amp;&amp; conf-&gt;subvolumes[i] == hashed_subvol) {</div><div>                                if (!conf-&gt;subvolume_status[i]) {</div><div>                                        gf_msg(this-&gt;name, GF_LOG_WARNING, 0,</div><div>                                               DHT_MSG_HASHED_SUBVOL_DOWN,</div><div>                                               &quot;hash subvolume %s is down &quot;</div><div>                                               &quot;for path %s&quot;,</div><div>                                               hashed_subvol-&gt;name, loc-&gt;path);</div><div>                                        ret = 1;</div><div>                                } else {</div><div>                                        fop_wind = i;</div><div>                                        break;</div><div>                                }</div><div>                         } else {</div><div>                                if (conf-&gt;subvolume_status[i])</div><div>                                        fop_wind = i;</div><div>                          } </div><div> }</div><div><br></div><div><br></div><div>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</div><div><br></div><div><br></div><div>Please share your input if any issue in this approach to decide about hashed_subvolume.</div><div>Appreciate your inputs.</div><div><br></div><div>Regards</div><div>Mohit Agrawal</div><div><br></div></div>