Blob Blame History Raw
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