afr: customize client-pid=-1 xtime aggregation to tolerate a replica down
Using the new 'pluggable policies' API of libxlator. Change-Id: Ie7528182dff8fb42c6e8287a106d3057944df775 BUG: 847839 Original Author: Csaba Henk <csaba@redhat.com> Signed-off-by: Avra Sengupta <asengupt@redhat.com> Reviewed-on: http://review.gluster.org/4904 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
parent
2af3e8bd6d
commit
3f6a570264
41
tests/bugs/bug-877293.t
Executable file
41
tests/bugs/bug-877293.t
Executable file
@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
|
||||
. $(dirname $0)/../include.rc
|
||||
. $(dirname $0)/../volume.rc
|
||||
|
||||
TEST glusterd
|
||||
TEST pidof glusterd
|
||||
|
||||
## Start and create a replicated volume
|
||||
mkdir -p ${B0}/${V0}-0
|
||||
mkdir -p ${B0}/${V0}-1
|
||||
TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}-{0,1}
|
||||
|
||||
TEST $CLI volume set $V0 indexing on
|
||||
|
||||
TEST $CLI volume start $V0;
|
||||
|
||||
## Mount native
|
||||
TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0
|
||||
|
||||
## Mount client-pid=-1
|
||||
TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 --client-pid=-1 $M1
|
||||
|
||||
TEST touch $M0
|
||||
|
||||
vol_uuid=`getfattr -n trusted.glusterfs.volume-mark -ehex $M1 | sed -n 's/^trusted.glusterfs.volume-mark=0x//p' | cut -b5-36 | sed 's/\([a-f0-9]\{8\}\)\([a-f0-9]\{4\}\)\([a-f0-9]\{4\}\)\([a-f0-9]\{4\}\)/\1-\2-\3-\4-/'`
|
||||
xtime=trusted.glusterfs.$vol_uuid.xtime
|
||||
|
||||
TEST "getfattr -n $xtime $M1 | grep -q ${xtime}="
|
||||
|
||||
TEST kill_brick $V0 $H0 $B0/${V0}-0
|
||||
|
||||
TEST "getfattr -n $xtime $M1 | grep -q ${xtime}="
|
||||
|
||||
TEST umount $M0
|
||||
TEST umount $M1
|
||||
|
||||
TEST $CLI volume stop $V0;
|
||||
TEST $CLI volume delete $V0;
|
||||
|
||||
cleanup
|
@ -1461,7 +1461,7 @@ afr_getxattr (call_frame_t *frame, xlator_t *this,
|
||||
int32_t read_child = -1;
|
||||
int ret = -1;
|
||||
fop_getxattr_cbk_t cbk = NULL;
|
||||
|
||||
int afr_xtime_gauge[MCNT_MAX] = {0,};
|
||||
|
||||
VALIDATE_OR_GOTO (frame, out);
|
||||
VALIDATE_OR_GOTO (this, out);
|
||||
@ -1557,13 +1557,20 @@ afr_getxattr (call_frame_t *frame, xlator_t *this,
|
||||
|
||||
}
|
||||
|
||||
/* don't err out on getting ENOTCONN (brick down)
|
||||
* from a subset of the bricks
|
||||
*/
|
||||
memcpy (afr_xtime_gauge, marker_xtime_default_gauge,
|
||||
sizeof (afr_xtime_gauge));
|
||||
afr_xtime_gauge[MCNT_NOTFOUND] = 0;
|
||||
afr_xtime_gauge[MCNT_ENOTCONN] = 0;
|
||||
if (cluster_getmarkerattr (frame, this, loc,
|
||||
name, local,
|
||||
afr_getxattr_unwind,
|
||||
sub_volumes,
|
||||
priv->child_count,
|
||||
MARKER_XTIME_TYPE,
|
||||
marker_xtime_default_gauge,
|
||||
afr_xtime_gauge,
|
||||
priv->vol_uuid)) {
|
||||
gf_log (this->name, GF_LOG_INFO,
|
||||
"%s: failed to get marker attr (%s)",
|
||||
|
Loading…
x
Reference in New Issue
Block a user