DHT/permissoin: Let setattr consume stat built from lookup in heal path
setattr call post mkdir(selfheal) ends up using the mode bits returned by mkdir,which miss the required suid, sgid and sticky bit. Hence, the fix is to use the mode bits from local->stbuf which was used to create the missing directories. Change-Id: I478708c80e28edc6509b784b0ad83952fc074a5b BUG: 1110262 Signed-off-by: Susant Palai <spalai@redhat.com> Reviewed-on: http://review.gluster.org/8208 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com> Reviewed-by: Raghavendra G <rgowdapp@redhat.com> Tested-by: Raghavendra G <rgowdapp@redhat.com>
This commit is contained in:
parent
f3a340694f
commit
010da8e41e
64
tests/bugs/bug-1110262.t
Normal file
64
tests/bugs/bug-1110262.t
Normal file
@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
|
||||
. $(dirname $0)/../include.rc
|
||||
. $(dirname $0)/../volume.rc
|
||||
|
||||
cleanup;
|
||||
|
||||
## Start glusterd
|
||||
TEST glusterd;
|
||||
TEST pidof glusterd;
|
||||
TEST $CLI volume info;
|
||||
|
||||
## Lets create volume
|
||||
TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2};
|
||||
|
||||
## Verify volume is created
|
||||
EXPECT "$V0" volinfo_field $V0 'Volume Name';
|
||||
EXPECT 'Created' volinfo_field $V0 'Status';
|
||||
TEST $CLI volume set $V0 client-log-level TRACE
|
||||
TEST $CLI volume set $V0 brick-log-level TRACE
|
||||
## Start volume and verify
|
||||
TEST $CLI volume start $V0;
|
||||
EXPECT 'Started' volinfo_field $V0 'Status';
|
||||
TEST glusterfs -s $H0 --volfile-id=$V0 $M0
|
||||
|
||||
#kill one of the brick process
|
||||
TEST kill -9 `ps aux | grep glusterfsd | grep $B0/${V0}2 | awk '{print $2}'`;
|
||||
|
||||
#create a user and group
|
||||
TEST useradd dev
|
||||
TEST groupadd QA
|
||||
|
||||
#create a new directory now with special user, group and mode bits
|
||||
mkdir -m 7777 $M0/dironedown
|
||||
TEST chown dev $M0/dironedown
|
||||
TEST chgrp QA $M0/dironedown
|
||||
|
||||
#store the permissions for comparision
|
||||
permission_onedown=`ls -l $M0 | grep dironedown | awk '{print $1}'`
|
||||
|
||||
#Now bring up the brick process
|
||||
TEST $CLI volume start $V0 force
|
||||
|
||||
#The updation of directory attrs happens on the revalidate path. Hence, atmax on
|
||||
#2 lookups the update will happen.
|
||||
sleep 5
|
||||
TEST ls $M0/dironedown;
|
||||
|
||||
#check directory that was created post brick going down
|
||||
TEST brick_perm=`ls -l $B0/${V0}2 | grep dironedown | awk '{print $1}'`
|
||||
TEST echo $brick_perm;
|
||||
TEST [ ${brick_perm} = ${permission_onedown} ]
|
||||
uid=`ls -l $B0/${V0}2 | grep dironedown | awk '{print $3}'`
|
||||
TEST echo $uid
|
||||
TEST [ $uid = dev ]
|
||||
gid=`ls -l $B0/${V0}2 | grep dironedown | awk '{print $4}'`
|
||||
TEST echo $gid
|
||||
TEST [ $gid = QA ]
|
||||
|
||||
#cleanup
|
||||
TEST userdel --force dev
|
||||
TEST groupdel QA
|
||||
|
||||
cleanup
|
@ -1106,8 +1106,6 @@ dht_selfheal_dir_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
||||
local->loc.path, gfid );
|
||||
goto out;
|
||||
}
|
||||
|
||||
dht_iatt_merge (this, &local->stbuf, stbuf, prev->this);
|
||||
dht_iatt_merge (this, &local->preparent, preparent, prev->this);
|
||||
dht_iatt_merge (this, &local->postparent, postparent, prev->this);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user