diff options
-rw-r--r-- | tests/bugs/bug-1047955.t | 23 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 3 |
2 files changed, 25 insertions, 1 deletions
diff --git a/tests/bugs/bug-1047955.t b/tests/bugs/bug-1047955.t new file mode 100644 index 000000000..e15f3ceef --- /dev/null +++ b/tests/bugs/bug-1047955.t @@ -0,0 +1,23 @@ +#!/bin/bash + +. $(dirname $0)/../include.rc +. $(dirname $0)/../cluster.rc + +function check_peers { + $CLI_1 peer status | grep 'Peer in Cluster (Connected)' | wc -l +} + +cleanup; + +# Create a 2x2 dist-rep volume; peer probe a new node. +# Performing remove-brick from this new node must succeed +# without crashing it's glusterd + +TEST launch_cluster 2; +TEST $CLI_1 volume create $V0 replica 2 $H1:$B1/${V0}{1,2,3,4} +TEST $CLI_1 volume start $V0; +TEST $CLI_1 peer probe $H2; +EXPECT_WITHIN 20 1 check_peers; +TEST $CLI_2 volume remove-brick $V0 $H1:$B1/${V0}{3,4} start; +TEST $CLI_2 volume info +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 9ad4963be..a0c969124 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -3135,7 +3135,8 @@ glusterd_import_volinfo (dict_t *vols, int count, if (ret) gf_log (THIS->name, GF_LOG_INFO, "peer is possibly old version"); - + new_volinfo->subvol_count = new_volinfo->brick_count/ + glusterd_get_dist_leaf_count (new_volinfo); memset (key, 0, sizeof (key)); snprintf (key, sizeof (key), "volume%d.ckusm", count); ret = dict_get_uint32 (vols, key, &new_volinfo->cksum); |