[Gluster-devel] Rolling upgrades from glusterfs 3.4 to 3.5

Anand Avati avati at gluster.org
Thu Jun 12 17:43:09 UTC 2014


On Thu, Jun 12, 2014 at 10:33 AM, Vijay Bellur <vbellur at redhat.com> wrote:

> On 06/12/2014 06:52 PM, Ravishankar N wrote:
>
>> Hi Vijay,
>>
>> Since glusterfs 3.5, posix_lookup() sends ESTALE instead of ENOENT [1]
>> when when a parent gfid (entry) is not present on the brick . In a
>> replicate set up, this causes a problem because AFR gives more priority
>> to ESTALE than ENOENT, causing IO to fail [2]. The fix is in progress at
>> [3] and is client-side specific , and would make it to 3.5.2
>>
>> But we will still hit the problem when rolling upgrade is performed from
>> 3.4 to 3.5,  unless the clients are also upgraded to 3.5: To elaborate
>> an example:
>>
>> 0) Create a 1x2 volume using 2 nodes and mount it from client. All
>> machines are glusterfs 3.4
>> 1) Perform for i in {1..30}; do mkdir $i; tar xf glusterfs-3.5git.tar.gz
>> -C $i& done
>> 2) While this is going on, kill one of the node in the replica pair and
>> upgrade it to glusterfs 3.5 (simulating rolling upgrade)
>> 3) After a while, kill all tar processes
>> 4) Create a backup directory and move all 1..30 dirs inside 'backup'
>> 5) Start the untar processes in 1) again
>> 6) Bring up the upgraded node. Tar fails with estale errors.
>>
>> Essentially the errors occur because [3] is a client side fix. But
>> rolling upgrades are targeted at servers while the older clients still
>> need to access them without issues.
>>
>> A solution is to have a fix in the posix translator wherein the newer
>> client passes it's version (3.5) to posix_lookup() which then sends
>> ESTALE if version is 3.5 or newer but sends ENOENT instead if it is an
>> older client. Does this seem okay?
>>
>>
> Cannot think of a better solution to this. Seamless rolling upgrades are
> necessary for us and the proposed fix does seem okay for that reason.
>
> Thanks,
> Vijay
>
>
I also like Justin's proposal, of having fixes in 3.4.X and requiring
clients to be at least 3.4.X in order to have rolling upgrade to 3.5.Y.
This way we can add the "special fix" in 3.4.X client (just like the 3.5.2
client). Ravi's proposal "works", but all LOOKUPs will have an extra xattr,
and we will be carrying forward the compat code burden for a very long
time. Whereas a 3.4.X client fix will remain in 3.4 branch.

Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://supercolony.gluster.org/pipermail/gluster-devel/attachments/20140612/094e6494/attachment.html>


More information about the Gluster-devel mailing list