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

Ravishankar N ravishankar at redhat.com
Wed Jun 18 11:57:56 UTC 2014


On 06/12/2014 11:13 PM, Anand Avati wrote:
> On Thu, Jun 12, 2014 at 10:33 AM, Vijay Bellur <vbellur at redhat.com 
> <mailto: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
>

I have sent a fix for review (http://review.gluster.org/#/c/8080/) . The 
change is in the server side only. I reckon if we are asking users to 
upgrade clients to a 3.4.x  which anyway involves app downtime, we might 
as well ask them to upgrade to 3.5.

The fix is only sent on 3.5 - it does not need to go to master as I 
understand from Pranith that we only support compatibility between the 
current two releases. (meaning 3.6 servers require clients to be at at 
least 3.5 and not lower).

Regards,
Ravi

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://supercolony.gluster.org/pipermail/gluster-devel/attachments/20140618/be9f2503/attachment.html>


More information about the Gluster-devel mailing list