From 3eccc2118df5add1ff319b3c0568c114f8e0172d Mon Sep 17 00:00:00 2001 From: Anuradha Talur Date: Mon, 13 Jul 2015 23:34:17 +0530 Subject: [PATCH 238/244] glusterd: Fix failure in replace-brick when src-brick is offline Backport of: http://review.gluster.org/#/c/11656/ Change-Id: I0fdb58e15da15c40c3fc9767f2fe4df0ea9d2350 BUG: 1242543 Reviewed-on: http://review.gluster.org/11651 Tested-by: NetBSD Build System Tested-by: Gluster Build System Reviewed-by: Krishnan Parthasarathi Signed-off-by: Anuradha Talur Reviewed-on: https://code.engineering.redhat.com/gerrit/52938 Tested-by: Krishnan Parthasarathi --- tests/bugs/glusterd/bug-1242543-replace-brick.t | 25 +++++++ xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 75 -------------------- 2 files changed, 25 insertions(+), 75 deletions(-) create mode 100644 tests/bugs/glusterd/bug-1242543-replace-brick.t 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 0000000..0b1087f --- /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 a6120c8..8325508 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -550,76 +550,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) @@ -834,11 +764,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) -- 1.7.1