From 3eccc2118df5add1ff319b3c0568c114f8e0172d Mon Sep 17 00:00:00 2001
From: Anuradha Talur <atalur@redhat.com>
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 <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com>
Signed-off-by: Anuradha Talur <atalur@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/52938
Tested-by: Krishnan Parthasarathi <kparthas@redhat.com>
---
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