diff options
author | Anuradha Talur <atalur@redhat.com> | 2015-07-13 23:34:17 +0530 |
---|---|---|
committer | Krishnan Parthasarathi <kparthas@redhat.com> | 2015-07-13 18:01:19 -0700 |
commit | 28d218d7ed00be0e15de29ee3083f184c6c3d1c6 (patch) | |
tree | b0846268fc6706088cebc588e79707b0df89a285 | |
parent | f7b9379a0a03fb1d2df56bbfc8dca06f5f3b8437 (diff) |
glusterd: Fix failure in replace-brick when src-brick is offline
Change-Id: I0fdb58e15da15c40c3fc9767f2fe4df0ea9d2350
BUG: 1242609
Signed-off-by: Anuradha Talur <atalur@redhat.com>
Reviewed-on: http://review.gluster.org/11651
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
-rw-r--r-- | tests/bugs/glusterd/bug-1242543-replace-brick.t | 25 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 75 |
2 files changed, 25 insertions, 75 deletions
diff --git a/tests/bugs/glusterd/bug-1242543-replace-brick.t b/tests/bugs/glusterd/bug-1242543-replace-brick.t new file mode 100644 index 00000000000..0b1087f1d51 --- /dev/null +++ b/tests/bugs/glusterd/bug-1242543-replace-brick.t @@ -0,0 +1,25 @@ +#!/bin/bash +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc +cleanup; + +TEST glusterd +TEST pidof glusterd +TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}{0,1} +TEST $CLI volume start $V0 + +TEST glusterfs --volfile-id=$V0 --volfile-server=$H0 $M0; + +# Replace brick1 without killing the brick +TEST $CLI volume replace-brick $V0 $H0:$B0/${V0}1 $H0:$B0/${V0}1_new commit force + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" afr_child_up_status $V0 1 + +TEST kill_brick $V0 $H0 $B0/${V0}1_new + +# Replace brick1 after killing the brick +TEST $CLI volume replace-brick $V0 $H0:$B0/${V0}1_new $H0:$B0/${V0}1_newer commit force + +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" afr_child_up_status $V0 1 + +cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index c4533a13946..9c8b2946fc7 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -545,76 +545,6 @@ rb_kill_destination_brick (glusterd_volinfo_t *volinfo, return glusterd_service_stop ("brick", pidfile, SIGTERM, _gf_true); } -/* Set src-brick's port number to be used in the maintenance mount - * after all commit acks are received. - */ -static int -rb_update_srcbrick_port (glusterd_volinfo_t *volinfo, - glusterd_brickinfo_t *src_brickinfo, - dict_t *rsp_dict, dict_t *req_dict, char *replace_op) -{ - xlator_t *this = NULL; - int ret = 0; - int dict_ret = 0; - int src_port = 0; - char brickname[PATH_MAX] = {0,}; - - this = THIS; - GF_ASSERT (this); - - dict_ret = dict_get_int32 (req_dict, "src-brick-port", &src_port); - if (src_port) - src_brickinfo->port = src_port; - - if (gf_is_local_addr (src_brickinfo->hostname)) { - gf_msg (this->name, GF_LOG_INFO, 0, - GD_MSG_BRK_PORT_NO_ADD_INDO, - "adding src-brick port no"); - - if (volinfo->transport_type == GF_TRANSPORT_RDMA) { - snprintf (brickname, sizeof(brickname), "%s.rdma", - src_brickinfo->path); - } else - snprintf (brickname, sizeof(brickname), "%s", - src_brickinfo->path); - - src_brickinfo->port = pmap_registry_search (this, - brickname, GF_PMAP_PORT_BRICKSERVER); - if (!src_brickinfo->port) { - gf_msg (this->name, GF_LOG_ERROR, 0, - GD_MSG_SRC_BRICK_PORT_UNAVAIL, - "Src brick port not available"); - ret = -1; - goto out; - } - - if (rsp_dict) { - ret = dict_set_int32 (rsp_dict, "src-brick-port", - src_brickinfo->port); - if (ret) { - gf_msg_debug (this->name, 0, - "Could not set src-brick port no"); - goto out; - } - } - - if (req_dict) { - ret = dict_set_int32 (req_dict, "src-brick-port", - src_brickinfo->port); - if (ret) { - gf_msg_debug (this->name, 0, - "Could not set src-brick port no"); - goto out; - } - } - - } - -out: - return ret; - -} - static int rb_update_dstbrick_port (glusterd_brickinfo_t *dst_brickinfo, dict_t *rsp_dict, dict_t *req_dict, char *replace_op) @@ -829,11 +759,6 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict) goto out; } - ret = rb_update_srcbrick_port (volinfo, src_brickinfo, rsp_dict, - dict, replace_op); - if (ret) - goto out; - ret = rb_update_dstbrick_port (dst_brickinfo, rsp_dict, dict, replace_op); if (ret) |