Bug 1225452 - [remove-brick]: Creation of file from NFS writes to the decommissioned subvolume and subsequent lookup from fuse creates a link
Summary: [remove-brick]: Creation of file from NFS writes to the decommissioned subvo...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Gluster Storage
Classification: Red Hat
Component: distribute
Version: rhgs-3.1
Hardware: x86_64
OS: Linux
high
high
Target Milestone: ---
: RHGS 3.1.1
Assignee: Susant Kumar Palai
QA Contact: Rahul Hinduja
URL:
Whiteboard:
Depends On: 1007773
Blocks: 1223636 1227687 1232378 1251815 1256283
TreeView+ depends on / blocked
 
Reported: 2015-05-27 12:10 UTC by Rahul Hinduja
Modified: 2015-10-05 07:09 UTC (History)
9 users (show)

Fixed In Version: glusterfs-3.7.1-13
Doc Type: Bug Fix
Doc Text:
Clone Of:
: 1227687 1232378 (view as bug list)
Environment:
Last Closed: 2015-10-05 07:09:25 UTC
Target Upstream Version:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2015:1845 0 normal SHIPPED_LIVE Moderate: Red Hat Gluster Storage 3.1 update 2015-10-05 11:06:22 UTC

Description Rahul Hinduja 2015-05-27 12:10:21 UTC
Description of problem:
=======================

Removed one of the complete subvolume from (2x3) volume, which must have triggered the rebalance. Once rebalance status is shown as completed. Copied a file "/etc/hosts" to fuse mount and copied another file "/etc/hosts.allow" to nfs mount. 

file hosts is written on the available subvolume (which was not removed) but file hosts.allow is written on the subvolume which was removed. After this did a ls from fuse mount and observed a link file created on the available subvolume. 

Performed a commit after this, the removed subvolume is no longer part of the volume but it contains the actual file hosts.allow which is lost. And the available subvolume has a T file which errors in "Structure needs cleaning" 

[root@georep1 b1]# cd /rhs/brick1/b1/
[root@georep1 b1]# ls -lrt hosts.allow 
---------T. 2 root root 0 May 27 20:43 hosts.allow
[root@georep1 b1]# cd /rhs/brick2/b2/
[root@georep1 b2]# ls -lrt hosts.allow 
-rw-r--r--. 2 root root 370 May 27 20:43 hosts.allow
[root@georep1 b2]# gluster v info master
 
Volume Name: master
Type: Replicate
Volume ID: 7b933011-28da-48d7-90a0-40ac33102aae
Status: Started
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
Bricks:
Brick1: 10.70.46.96:/rhs/brick1/b1
Brick2: 10.70.46.97:/rhs/brick1/b1
Brick3: 10.70.46.93:/rhs/brick1/b1
Options Reconfigured:
changelog.changelog: on
geo-replication.ignore-pid-check: on
geo-replication.indexing: on
performance.readdir-ahead: on
[root@georep1 b2]# 

[root@georep1 b2]# getfattr -n trusted.gfid -e hex -m . /rhs/brick1/b1/hosts.allow 
getfattr: Removing leading '/' from absolute path names
# file: rhs/brick1/b1/hosts.allow
trusted.gfid=0x70ad500ee72645a39fc3b54d88aa2cc7

[root@georep1 b2]# getfattr -n trusted.gfid -e hex -m . /rhs/brick2/b2/hosts.allow 
getfattr: Removing leading '/' from absolute path names
# file: rhs/brick2/b2/hosts.allow
trusted.gfid=0x70ad500ee72645a39fc3b54d88aa2cc7

[root@georep1 b2]# 


Version-Release number of selected component (if applicable):
==============================================================

glusterfs-3.7.0-2.el6rhs.x86_64


How reproducible:
=================

Tried only once


Steps Carried:
==============
1. Created Master and Slave Cluster
2. Created Master and Slave Volume (2x3)
3. Created shared meta volume and mounted on all the master nodes
4. Created and Started geo-rep session between master and slave volume
5. Mount the master and slave volumes (Fuse & NFS)
6. From Fuse and NFS mount of master volume, create set of dirs and files
7. Once data creation is completed, wait for it to sync to slave
8. Verify using arequal that the data at master and slave matches
9. Remove a complete subvolume using "remove start" 
10. Wait for it to complete (Monitor using remove status"
11. Once completed, touch a file "rahul" from fuse and cp a file hosts from /etc/hosts to fuse mount of master
12. Copy a file /etc/hosts.allow to nfs mount of master
13. do a ls from fuse mount , it should list all the rahul,hosts,hosts.allow file
14. do a remove commit to remove the complete subvolume
15. geo-rep session goes to faulty with traceback "OSError: [Errno 117] Structure needs cleaning: '.gfid/70ad500e-e726-45a3-9fc3-b54d88aa2cc7'"

Checked in backend, the original file which is written from NFS is present in the decommissioned bricks and its T link file in the present available volume

Comment 3 Susant Kumar Palai 2015-06-03 10:21:34 UTC
RCA: Was able to reproduce the issue. The issue is with lack of lookups on the parent directory post remove-brick start. Hence, the decommissioned brick will still be part of the layout. And the file creation may end up on decommissioned bricks. 

One of the proposed solution for fixing nfs part of this is to restart the nfs server post remove-brick start.


Note:We still have problem with the fuse here.

Comment 9 RajeshReddy 2015-09-01 08:57:07 UTC
Tested with build "glusterfs-libs-3.7.1-13" and ran fallowing tests and all are passed so marking this as verified 

1. After triggering the remove-brick, create files from both FUSE and NFS mount 
and do ls on the directory 
2.While file creation is going on trigger remove-brick

Comment 11 errata-xmlrpc 2015-10-05 07:09:25 UTC
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-2015-1845.html


Note You need to log in before you can comment on or make changes to this bug.