From d25d912835e01c40cb00a0ae93d49f68f9b3542b Mon Sep 17 00:00:00 2001 From: Ravishankar N Date: Thu, 2 Jan 2014 23:06:39 +0530 Subject: glusterd: update volinfo->subvol_count in newly added peers Update the subvol_count when a peer imports information about the friend volumes. Change-Id: Id3884bd5727ff22be7ed87f43a1ec1b5fe34813c BUG: 1047955 Signed-off-by: Ravishankar N Reviewed-on: http://review.gluster.org/6629 Reviewed-by: Krishnan Parthasarathi Tested-by: Gluster Build System --- tests/bugs/bug-1047955.t | 23 +++++++++++++++++++++++ xlators/mgmt/glusterd/src/glusterd-utils.c | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/bugs/bug-1047955.t 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); -- cgit