diff options
-rwxr-xr-x | tests/bugs/bug-1070734.t | 69 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 10 |
2 files changed, 79 insertions, 0 deletions
diff --git a/tests/bugs/bug-1070734.t b/tests/bugs/bug-1070734.t new file mode 100755 index 00000000000..efe6c626f3a --- /dev/null +++ b/tests/bugs/bug-1070734.t @@ -0,0 +1,69 @@ +#!/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'; + +## Start volume and verify +TEST $CLI volume start $V0; +EXPECT 'Started' volinfo_field $V0 'Status'; + +TEST mount -t nfs -o vers=3 $H0:/$V0 $N0; + +############################################################################ +#TEST-PLAN: +#Create a directory DIR and a file inside DIR +#check the hash brick of the file +#delete the directory for recreating later after remove-brick +#remove the brick where the files hashed to +#After remove-brick status says complete go on creating the same directory \ +#DIR and file +#Check if the file now falls into the other brick +#Check if the other brick gets the full layout and the remove brick gets \ +#the zeroed layout +############################################################################ + +TEST mkdir $N0/DIR; + +TEST touch $N0/DIR/file; + +if [ -f $B0/${V0}1/DIR/file ] +then + HASHED=$B0/${V0}1; + OTHERBRICK=$B0/${V0}2; +else + HASHED=$B0/${V0}2; + OTHERBRICK=$B0/${V0}1; +fi + +TEST rm -f $N0/DIR/file; +TEST rmdir $N0/DIR; +TEST $CLI volume remove-brick $V0 $H0:${HASHED} start; +EXPECT_WITHIN 10 "completed" remove_brick_status_completed_field "$V0" \ +"$H0:${HASHED}"; + +TEST mkdir $N0/DIR; +TEST touch $N0/DIR/file; + +#Check now the file should fall in to OTHERBRICK +TEST [ -f ${OTHERBRICK}/DIR/file ] + +#Check the DIR on HASHED should have got zeroed layout and the \ +#OTHERBRICK should have got full layout +EXPECT "0x00000001000000000000000000000000" dht_get_layout $HASHED/DIR ; +EXPECT "0x000000010000000000000000ffffffff" dht_get_layout $OTHERBRICK/DIR; + +cleanup diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index ced916ea122..5ab23f2d9cd 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -1931,6 +1931,16 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr) goto out; } + if (GF_OP_CMD_START == cmd && + volinfo->status == GLUSTERD_STATUS_STARTED) { + ret = glusterd_nodesvcs_handle_reconfigure (volinfo); + if (ret) { + gf_log (this->name, GF_LOG_WARNING, + "Unable to reconfigure NFS-Server"); + goto out; + } + } + /* Need to reset the defrag/rebalance status accordingly */ switch (volinfo->rebal.defrag_status) { case GF_DEFRAG_STATUS_FAILED: |