diff options
| -rw-r--r-- | tests/bugs/glusterd/bug-1230121-replica_subvol_count_correct_cal.t | 52 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 4 | 
2 files changed, 54 insertions, 2 deletions
diff --git a/tests/bugs/glusterd/bug-1230121-replica_subvol_count_correct_cal.t b/tests/bugs/glusterd/bug-1230121-replica_subvol_count_correct_cal.t new file mode 100644 index 00000000000..71d98e18491 --- /dev/null +++ b/tests/bugs/glusterd/bug-1230121-replica_subvol_count_correct_cal.t @@ -0,0 +1,52 @@ +#!/bin/bash + +## Test case for BZ:1230121  glusterd crashed while trying to remove a bricks +## one selected from each replica set - after shrinking nX3 to nX2 to nX1 + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +. $(dirname $0)/../../cluster.rc + +cleanup; + +## Start a 2 node virtual cluster +TEST launch_cluster 2; +TEST pidof glusterd + +## Peer probe server 2 from server 1 cli +TEST $CLI_1 peer probe $H2; + +EXPECT_WITHIN $PROBE_TIMEOUT 1 peer_count + +## Creating a 2x3 replicate volume +TEST $CLI_1 volume create $V0 replica 3 $H1:$B1/brick1 $H2:$B2/brick2 \ +                                        $H1:$B1/brick3 $H2:$B2/brick4 \ +                                        $H1:$B1/brick5 $H2:$B2/brick6 + +## Start the volume +TEST $CLI_1 volume start $V0 + + +## Shrinking volume replica 2x3 to 2x2 by performing remove-brick operation. +TEST $CLI_1 volume remove-brick $V0 replica 2 $H1:$B1/brick1 $H2:$B2/brick6 force + +## Shrinking volume replica 2x2 to 1x2 by performing remove-brick operation +TEST $CLI_1 volume remove-brick $V0 replica 2 $H1:$B1/brick3 $H2:$B2/brick2 force + +## Shrinking volume replica from 1x2 to 1x1 by performing remove-brick operation +TEST $CLI_1 volume remove-brick $V0 replica 1 $H1:$B1/brick5 force + + + +### Expanding volume replica by performing add-brick operation. + +## Expend volume replica from 1x1 to 1x2 by performing add-brick operation +TEST $CLI_1 volume add-brick $V0 replica 2 $H1:$B1/brick5 force + +## Expend volume replica from 1x2 to 2x2 by performing add-brick operation +TEST $CLI_1 volume add-brick $V0 replica 2 $H1:$B1/brick3 $H2:$B2/brick2 force + +## Expend volume replica from 2x2 to 2x3 by performing add-brick operation +TEST $CLI_1 volume add-brick $V0 replica 3 $H1:$B1/brick1 $H2:$B2/brick6 force + +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 8fff9ab2cdf..06a735758d4 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -2246,8 +2246,6 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr)          if (start_remove)                  volinfo->rebal.dict = dict_ref (bricks_dict); -        volinfo->subvol_count = (volinfo->brick_count / -                                 volinfo->dist_leaf_count);          ret = dict_get_int32 (dict, "replica-count", &replica_count);          if (!ret) {                  gf_log (this->name, GF_LOG_INFO, @@ -2276,6 +2274,8 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr)                          }                  }          } +        volinfo->subvol_count = (volinfo->brick_count / +                                 volinfo->dist_leaf_count);          ret = glusterd_create_volfiles_and_notify_services (volinfo);          if (ret) {  | 
