Bug 1356804
Summary: | Healing of one of the file not happened during upgrade from 3.0.4 to 3.1.3 ( In-service ) | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | [Red Hat Storage] Red Hat Gluster Storage | Reporter: | Byreddy <bsrirama> | ||||||
Component: | replicate | Assignee: | Jiffin <jthottan> | ||||||
Status: | CLOSED ERRATA | QA Contact: | Nag Pavan Chilakam <nchilaka> | ||||||
Severity: | high | Docs Contact: | |||||||
Priority: | unspecified | ||||||||
Version: | rhgs-3.1 | CC: | amukherj, jthottan, ravishankar, rcyriac, rhinduja, rhs-bugs | ||||||
Target Milestone: | --- | ||||||||
Target Release: | RHGS 3.2.0 | ||||||||
Hardware: | x86_64 | ||||||||
OS: | Linux | ||||||||
Whiteboard: | |||||||||
Fixed In Version: | glusterfs-3.8.4-1 | Doc Type: | If docs needed, set a value | ||||||
Doc Text: | Story Points: | --- | |||||||
Clone Of: | |||||||||
: | 1357397 (view as bug list) | Environment: | |||||||
Last Closed: | 2017-03-23 05:39:37 UTC | Type: | Bug | ||||||
Regression: | --- | Mount Type: | --- | ||||||
Documentation: | --- | CRM: | |||||||
Verified Versions: | Category: | --- | |||||||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||||
Cloudforms Team: | --- | Target Upstream Version: | |||||||
Embargoed: | |||||||||
Bug Depends On: | |||||||||
Bug Blocks: | 1351522, 1357397, 1358262, 1358268 | ||||||||
Attachments: |
|
Description
Byreddy
2016-07-15 05:25:48 UTC
Created attachment 1180039 [details]
sos report from node-1
Created attachment 1180040 [details]
sos report from node-2
Pasting the observations I shared over email in examining the setup: ================================================= I looked at the setup, Node1 has .trashcan to be entry healed (verified from the getfattr on the bricks) to Node2. The entry in question is '.trashcan/internal_op' folder. Node1 was updated first, then Node2. I/O was happening from the client all the time. I have a theory (and the logs too) but there is only one observation by Byreddy that I'm not able to explain. 1. Node 1 is updated to 3.1.3 and the bricks have .trashcan and .trashcan/internal_op after upgrade. 2. Client is doing IO all this while, which triggered entry-selfheal and created .trashcan on Node2 (still running 3.0.4), with a new-entry mark for it on Node1 [root@dhcp37-92 glusterfs]# grep -rine completed mnt.log 334:[2016-07-13 14:23:13.732508] I [afr-self-heal-common.c:2874:afr_log_self_heal_completion_status] 2-Dis-Rep-replicate-1: entry self heal is successfully completed, on / 335:[2016-07-13 14:23:13.734510] I [afr-self-heal-common.c:2874:afr_log_self_heal_completion_status] 2-Dis-Rep-replicate-0: entry self heal is successfully completed, on / 3. Index heal completes metadataheal of .trashcan (having gfid 5) but not entry heal. [root@dhcp37-82 glusterfs]# grep -rine Completed /var/log/glusterfs/glustershd.log |grep 00000000 650:[2016-07-13 14:37:21.644343] I [MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-Dis-Rep-replicate-0: Completed metadata selfheal on 00000000-0000-0000-0000-000000000005. sources=[0] sinks=1 868:[2016-07-13 14:37:25.093057] I [MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-Dis-Rep-replicate-1: Completed metadata selfheal on 00000000-0000-0000-0000-000000000005. sources=[0] sinks=1 `heal info` output still should show .trashcan for pending entry-heal. 4. Node2 is also upgraded. Normally .trashcan and .trashcan/internal_op are created by trash xlator but if .trashcan is already present (due to heal from Node1), it does not create 'internal_op'. 5. Now when shd entry heal tries mkdir of .trashcan/internal_op, trash_mkdir() blocks it. The only thing I'm not able to explain is Byreddy says that at step-3, he waited for heal-info to be zero before going to step-4. But if that were the case, the shd logs should also contain information about entry heal of .trash, something like: [[MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-testvol-replicate-0: Completed entry selfheal on 00000000-0000-0000-0000-000000000005. sources=[0] sinks=1 [[MSGID: 108026] [afr-self-heal-metadata.c:56:__afr_selfheal_metadata_do] 0-testvol-replicate-0: performing metadata selfheal on 00000000-0000-0000-0000-000000000006 [[MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-testvol-replicate-0: Completed metadata selfheal on 00000000-0000-0000-0000-000000000006. sources=[0] sinks=1 [[MSGID: 108026] [afr-self-heal-entry.c:589:afr_selfheal_entry_do] 0-testvol-replicate-0: performing entry selfheal on 00000000-0000-0000-0000-000000000006 [[MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-testvol-replicate-0: Completed entry selfheal on 00000000-0000-0000-0000-000000000006. sources=[0] sinks=1 But I don't see any such message. Do you have any pointers on how heal-info could show zero entries when entry self-heal hasn't completed yet? I looked at the setup, Node1 has .trashcan to be entry healed (verified from the getfattr on the bricks) to Node2. The entry in question is '.trashcan/internal_op' folder. Node1 was updated first, then Node2. I/O was happening from the client all the time. I have a theory (and the logs too) but there is only one observation by Byreddy that I'm not able to explain. 1. Node 1 is updated to 3.1.3 and the bricks have .trashcan and .trashcan/internal_op after upgrade. 2. Client is doing IO all this while, which triggered entry-selfheal and created .trashcan on Node2 (still running 3.0.4), with a new-entry mark for it on Node1 [root@dhcp37-92 glusterfs]# grep -rine completed mnt.log 334:[2016-07-13 14:23:13.732508] I [afr-self-heal-common.c:2874:afr_log_self_heal_completion_status] 2-Dis-Rep-replicate-1: entry self heal is successfully completed, on / 335:[2016-07-13 14:23:13.734510] I [afr-self-heal-common.c:2874:afr_log_self_heal_completion_status] 2-Dis-Rep-replicate-0: entry self heal is successfully completed, on / 3. Index heal completes metadataheal of .trashcan (having gfid 5) but not entry heal. [root@dhcp37-82 glusterfs]# grep -rine Completed /var/log/glusterfs/glustershd.log |grep 00000000 650:[2016-07-13 14:37:21.644343] I [MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-Dis-Rep-replicate-0: Completed metadata selfheal on 00000000-0000-0000-0000-000000000005. sources=[0] sinks=1 868:[2016-07-13 14:37:25.093057] I [MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-Dis-Rep-replicate-1: Completed metadata selfheal on 00000000-0000-0000-0000-000000000005. sources=[0] sinks=1 `heal info` output still should show .trashcan for pending entry-heal. 4. Node2 is also upgraded. Normally .trashcan and .trashcan/internal_op are created by trash xlator but if .trashcan is already present (due to heal from Node1), it does not create 'internal_op'. 5. Now when shd entry heal tries mkdir of .trashcan/internal_op, trash_mkdir() blocks it. The only thing I'm not able to explain is Byreddy says that at step-3, he waited for heal-info to be zero before going to step-4. But if that were the case, the shd logs should also contain information about entry heal of .trash, something like: [[MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-testvol-replicate-0: Completed entry selfheal on 00000000-0000-0000-0000-000000000005. sources=[0] sinks=1 [[MSGID: 108026] [afr-self-heal-metadata.c:56:__afr_selfheal_metadata_do] 0-testvol-replicate-0: performing metadata selfheal on 00000000-0000-0000-0000-000000000006 [[MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-testvol-replicate-0: Completed metadata selfheal on 00000000-0000-0000-0000-000000000006. sources=[0] sinks=1 [[MSGID: 108026] [afr-self-heal-entry.c:589:afr_selfheal_entry_do] 0-testvol-replicate-0: performing entry selfheal on 00000000-0000-0000-0000-000000000006 [[MSGID: 108026] [afr-self-heal-common.c:770:afr_log_selfheal] 0-testvol-replicate-0: Completed entry selfheal on 00000000-0000-0000-0000-000000000006. sources=[0] sinks=1 But I don't see any such message. ================================================= After discussing with Jiffin and Pranith, it was decided that the trash xlator needs to unconditionally create the .trashcan/internal_op folder. Assigning the bug to Jiffin as there is already a patch upstream which aims to do this. Can this be targeted for 3.2? (In reply to Atin Mukherjee from comment #7) > Can this be targeted for 3.2? Yup, the patch posted upstream for review http://review.gluster.org/#/c/14938/ Upstream mainline patch http://review.gluster.org/14938 is merged Upstream mainline : http://review.gluster.org/14938 Upstream 3.8 : http://review.gluster.org/14965 And the fix is available in rhgs-3.2.0 as part of rebase to GlusterFS 3.8.4. have done a in service upgrade from 3.0.4 to 3.2.0(3.8.4-14) I see that all files are getting healed and no pending entries in heal info checked even 3.1.3 to 3.2.0 no issues seen hence moving to verified Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHSA-2017-0486.html |