diff options
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 20 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-geo-rep.c | 9 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 159 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rebalance.c | 9 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-replace-brick.c | 1323 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 235 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 138 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.h | 10 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 18 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 3 | 
10 files changed, 94 insertions, 1830 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c index 5326e25a787..f80b5a8078b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c @@ -1419,16 +1419,6 @@ glusterd_op_stage_add_brick (dict_t *dict, char **op_errstr, dict_t *rsp_dict)          if (ret)                  goto out; -        if (glusterd_is_rb_ongoing (volinfo)) { -                snprintf (msg, sizeof (msg), "Replace brick is in progress on " -                          "volume %s. Please retry after replace-brick " -                          "operation is committed or aborted", volname); -                gf_log (THIS->name, GF_LOG_ERROR, "%s", msg); -                *op_errstr = gf_strdup (msg); -                ret = -1; -                goto out; -        } -          if (glusterd_is_defrag_on(volinfo)) {                  snprintf (msg, sizeof(msg), "Volume name %s rebalance is in "                            "progress. Please retry after completion", volname); @@ -1611,16 +1601,6 @@ glusterd_op_stage_remove_brick (dict_t *dict, char **op_errstr)          if (ret)                  goto out; -        if (glusterd_is_rb_ongoing (volinfo)) { -                snprintf (msg, sizeof (msg), "Replace brick is in progress on " -                          "volume %s. Please retry after replace-brick " -                          "operation is committed or aborted", volname); -                gf_log (this->name, GF_LOG_ERROR, "%s", msg); -                *op_errstr = gf_strdup (msg); -                ret = -1; -                goto out; -        } -          ret = dict_get_int32 (dict, "command", &flag);          if (ret) {                  gf_log (this->name, GF_LOG_ERROR, diff --git a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c index 24768e38231..6b95beed490 100644 --- a/xlators/mgmt/glusterd/src/glusterd-geo-rep.c +++ b/xlators/mgmt/glusterd/src/glusterd-geo-rep.c @@ -2758,15 +2758,6 @@ glusterd_op_stage_gsync_set (dict_t *dict, char **op_errstr)                          goto out;                  } -                /* don't attempt to start gsync if replace-brick is -                 * in progress */ -                if (glusterd_is_rb_ongoing (volinfo)) { -                        snprintf (errmsg, sizeof(errmsg), "replace-brick is in" -                                   " progress, not starting geo-replication"); -                        ret = -1; -                        goto out; -                } -                  ret = glusterd_op_verify_gsync_start_options (volinfo, slave,                                                                conf_path,                                                                statefile, diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 04cc75f545d..bd5d012e3ed 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -2496,41 +2496,6 @@ out:  }  static int -_add_brick_name_to_dict (dict_t *dict, char *key, glusterd_brickinfo_t *brick) -{ -        int     ret = -1; -        char    tmp[1024] = {0,}; -        char    *brickname = NULL; -        xlator_t *this = NULL; - -        GF_ASSERT (dict); -        GF_ASSERT (key); -        GF_ASSERT (brick); - -        this = THIS; -        GF_ASSERT (this); - -        snprintf (tmp, sizeof (tmp), "%s:%s", brick->hostname, brick->path); -        brickname = gf_strdup (tmp); -        if (!brickname) { -                gf_log (this->name, GF_LOG_ERROR, "Failed to dup brick name"); -                goto out; -        } - -        ret = dict_set_dynstr (dict, key, brickname); -        if (ret) { -                gf_log (this->name, GF_LOG_ERROR, -                        "Failed to add brick name to dict"); -                goto out; -        } -        brickname = NULL; -out: -        if (brickname) -                GF_FREE (brickname); -        return ret; -} - -static int  _add_remove_bricks_to_dict (dict_t *dict, glusterd_volinfo_t *volinfo,                              char *prefix)  { @@ -2624,25 +2589,6 @@ _add_task_to_dict (dict_t *dict, glusterd_volinfo_t *volinfo, int op, int index)                  status = volinfo->rebal.defrag_status;                  break; -        case GD_OP_REPLACE_BRICK: -                snprintf (key, sizeof (key), "task%d.src-brick", index); -                ret = _add_brick_name_to_dict (dict, key, -                                               volinfo->rep_brick.src_brick); -                if (ret) -                        goto out; -                memset (key, 0, sizeof (key)); - -                snprintf (key, sizeof (key), "task%d.dst-brick", index); -                ret = _add_brick_name_to_dict (dict, key, -                                               volinfo->rep_brick.dst_brick); -                if (ret) -                        goto out; -                memset (key, 0, sizeof (key)); - -                uuid_str = gf_strdup (uuid_utoa (volinfo->rep_brick.rb_id)); -                status = volinfo->rep_brick.rb_status; -                break; -          default:                  ret = -1;                  gf_log (this->name, GF_LOG_ERROR, "%s operation doesn't have a" @@ -2707,17 +2653,6 @@ glusterd_aggregate_task_status (dict_t *rsp_dict, glusterd_volinfo_t *volinfo)                  tasks++;          } -        if (!gf_uuid_is_null (volinfo->rep_brick.rb_id)) { -                ret = _add_task_to_dict (rsp_dict, volinfo, GD_OP_REPLACE_BRICK, -                                         tasks); -                if (ret) { -                        gf_log (this->name, GF_LOG_ERROR, -                                "Failed to add task details to dict"); -                        goto out; -                } -                tasks++; -        } -          ret = dict_set_int32 (rsp_dict, "tasks", tasks);          if (ret) {                  gf_log (this->name, GF_LOG_ERROR, @@ -3791,67 +3726,6 @@ out:  } -static int32_t -glusterd_op_start_rb_timer (dict_t *dict, uuid_t *txn_id) -{ -        int32_t         op = 0; -        struct timespec timeout = {0, }; -        glusterd_conf_t *priv = NULL; -        int32_t         ret = -1; -        dict_t          *rb_ctx = NULL; -        uuid_t          *rb_txn_id = NULL; - -        GF_ASSERT (dict); -        priv = THIS->private; - -        ret = dict_get_int32 (dict, "operation", &op); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, -                        "dict_get on operation failed"); -                goto out; -        } - -        if (op != GF_REPLACE_OP_START) { -                ret = glusterd_op_sm_inject_all_acc (txn_id); -                goto out; -        } - -        rb_txn_id = GF_CALLOC (1, sizeof(uuid_t), gf_common_mt_uuid_t); -        if (!rb_txn_id) -                goto out; - -        gf_uuid_copy (*rb_txn_id, *txn_id); -        timeout.tv_sec  = 5; -        timeout.tv_nsec = 0; - -        rb_ctx = dict_copy (dict, rb_ctx); -        if (!rb_ctx) { -                gf_log (THIS->name, GF_LOG_ERROR, "Couldn't copy " -                        "replace brick context. Can't start replace brick"); -                ret = -1; -                goto out; -        } - -        ret = dict_set_bin (rb_ctx, "transaction_id", -                            rb_txn_id, sizeof (*rb_txn_id)); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, -                       "Failed to set transaction id."); -                goto out; -        } else -               gf_log ("", GF_LOG_DEBUG, -                        "transaction_id = %s", uuid_utoa (*rb_txn_id)); - -        priv->timer = gf_timer_call_after (THIS->ctx, timeout, -                                           glusterd_do_replace_brick, -                                           (void *) rb_ctx); - -        ret = 0; - -out: -        return ret; -} -  /* This function takes a dict and converts the uuid values of key specified   * into hostnames   */ @@ -4342,15 +4216,14 @@ glusterd_op_commit_hook (glusterd_op_t op, dict_t *op_ctx,  static int  glusterd_op_ac_send_commit_op (glusterd_op_sm_event_t *event, void *ctx)  { -        int                     ret = 0; -        rpc_clnt_procedure_t    *proc = NULL; -        glusterd_conf_t         *priv = NULL; -        xlator_t                *this = NULL; -        dict_t                  *dict = NULL; -        dict_t                  *op_dict = NULL; -        glusterd_peerinfo_t     *peerinfo = NULL; -        char                    *op_errstr  = NULL; -        glusterd_op_t           op = GD_OP_NONE; +        int                     ret           = 0; +        rpc_clnt_procedure_t    *proc         = NULL; +        glusterd_conf_t         *priv         = NULL; +        xlator_t                *this         = NULL; +        dict_t                  *dict         = NULL; +        glusterd_peerinfo_t     *peerinfo     = NULL; +        char                    *op_errstr    = NULL; +        glusterd_op_t           op            = GD_OP_NONE;          uint32_t                pending_count = 0;          this = THIS; @@ -4359,7 +4232,6 @@ glusterd_op_ac_send_commit_op (glusterd_op_sm_event_t *event, void *ctx)          GF_ASSERT (priv);          op      = glusterd_op_get_op (); -        op_dict = glusterd_op_get_ctx ();          ret = glusterd_op_build_payload (&dict, &op_errstr, NULL);          if (ret) { @@ -4434,9 +4306,7 @@ out:          if (!opinfo.pending_count) {                  if (op == GD_OP_REPLACE_BRICK) { -                        ret = glusterd_op_start_rb_timer (op_dict, -                                                          &event->txn_id); - +                        ret = glusterd_op_sm_inject_all_acc (&event->txn_id);                  } else {                          glusterd_op_modify_op_ctx (op, NULL);                          ret = glusterd_op_sm_inject_all_acc (&event->txn_id); @@ -4569,7 +4439,6 @@ out:  static int  glusterd_op_ac_rcvd_commit_op_acc (glusterd_op_sm_event_t *event, void *ctx)  { -        dict_t                 *op_ctx            = NULL;          int                     ret               = 0;          gf_boolean_t            commit_ack_inject = _gf_true;          glusterd_op_t           op                = GD_OP_NONE; @@ -4587,15 +4456,7 @@ glusterd_op_ac_rcvd_commit_op_acc (glusterd_op_sm_event_t *event, void *ctx)                  goto out;          if (op == GD_OP_REPLACE_BRICK) { -                op_ctx = glusterd_op_get_ctx (); -                if (!op_ctx) { -                        gf_log (this->name, GF_LOG_CRITICAL, "Operation " -                                "context is not present."); -                        ret = -1; -                        goto out; -                } - -                ret = glusterd_op_start_rb_timer (op_ctx, &event->txn_id); +                ret = glusterd_op_sm_inject_all_acc (&event->txn_id);                  if (ret) {                          gf_log (this->name, GF_LOG_ERROR, "Couldn't start "                                  "replace-brick operation."); diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c index 840438df29a..84d9210a105 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c +++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c @@ -72,15 +72,6 @@ glusterd_defrag_start_validate (glusterd_volinfo_t *volinfo, char *op_errstr,                  goto out;          } -        if (glusterd_is_rb_started (volinfo) || -            glusterd_is_rb_paused (volinfo)) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "Rebalance failed as replace brick is in progress on volume %s", -                        volinfo->volname); -                snprintf (op_errstr, len, "Rebalance failed as replace brick is in progress on " -                          "volume %s", volinfo->volname); -                goto out; -        }          ret = 0;  out:          gf_log (this->name, GF_LOG_DEBUG, "Returning %d", ret); diff --git a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c index 92cfcd2fa95..818b58a724f 100644 --- a/xlators/mgmt/glusterd/src/glusterd-replace-brick.c +++ b/xlators/mgmt/glusterd/src/glusterd-replace-brick.c @@ -38,43 +38,6 @@  extern uuid_t global_txn_id;  int -glusterd_get_replace_op_str (gf1_cli_replace_op op, char *op_str) -{ -        int     ret = -1; - -        if (!op_str) -                goto out; - -        switch (op) { -                case GF_REPLACE_OP_START: -                        strcpy (op_str, "start"); -                        break; -                case GF_REPLACE_OP_COMMIT: -                        strcpy (op_str, "commit"); -                        break; -                case GF_REPLACE_OP_PAUSE: -                        strcpy (op_str, "pause"); -                        break; -                case GF_REPLACE_OP_ABORT: -                        strcpy (op_str, "abort"); -                        break; -                case GF_REPLACE_OP_STATUS: -                        strcpy (op_str, "status"); -                        break; -                case GF_REPLACE_OP_COMMIT_FORCE: -                        strcpy (op_str, "commit-force"); -                        break; -                default: -                        strcpy (op_str, "unknown"); -                        break; -        } - -        ret = 0; -out: -        return ret; -} - -int  __glusterd_handle_replace_brick (rpcsvc_request_t *req)  {          int32_t                         ret = -1; @@ -83,7 +46,6 @@ __glusterd_handle_replace_brick (rpcsvc_request_t *req)          char                            *src_brick = NULL;          char                            *dst_brick = NULL;          int32_t                         op = 0; -        char                            operation[256];          glusterd_op_t                   cli_op = GD_OP_REPLACE_BRICK;          char                            *volname = NULL;          char                            msg[2048] = {0,}; @@ -152,10 +114,9 @@ __glusterd_handle_replace_brick (rpcsvc_request_t *req)                  goto out;          } -        (void) glusterd_get_replace_op_str (op, operation);          gf_log (this->name, GF_LOG_DEBUG, "dst brick=%s", dst_brick); -        gf_log (this->name, GF_LOG_INFO, "Received replace brick %s request", -                operation); +        gf_log (this->name, GF_LOG_INFO, "Received replace brick commit-force " +                "request operation");          ret = glusterd_op_begin (req, GD_OP_REPLACE_BRICK, dict,                                   msg, sizeof (msg)); @@ -209,7 +170,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          char                                    *src_brick          = NULL;          char                                    *dst_brick          = NULL;          char                                    *volname            = NULL; -        int                                      replace_op         = 0; +        char                                    *replace_op         = NULL;          glusterd_volinfo_t                      *volinfo            = NULL;          glusterd_brickinfo_t                    *src_brickinfo      = NULL;          char                                    *host               = NULL; @@ -259,7 +220,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  goto out;          } -        ret = dict_get_int32 (dict, "operation", (int32_t *)&replace_op); +        ret = dict_get_str (dict, "operation", &replace_op);          if (ret) {                  gf_log (this->name, GF_LOG_DEBUG,                          "dict get on replace-brick operation failed"); @@ -312,99 +273,9 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,          ctx = glusterd_op_get_ctx(); -        switch (replace_op) { -        case GF_REPLACE_OP_START: -                if (glusterd_is_rb_started (volinfo)) { -                        snprintf (msg, sizeof (msg), "Replace brick is already " -                                  "started for volume"); -                        gf_log (this->name, GF_LOG_ERROR, "%s", msg); -                        *op_errstr = gf_strdup (msg); -                        ret = -1; -                        goto out; -                } -                if (is_origin_glusterd (dict)) { -                        if (!ctx) { -                                ret = -1; -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Failed to get op_ctx"); -                                goto out; -                        } - -                        ret = glusterd_generate_and_set_task_id -                                (ctx, GF_REPLACE_BRICK_TID_KEY); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Failed to generate task-id"); -                                goto out; -                        } - -                } else { -                        ret = dict_get_str (dict, GF_REPLACE_BRICK_TID_KEY, -                                            &task_id_str); -                        if (ret) { -                                gf_log (this->name, GF_LOG_WARNING, -                                        "Missing replace-brick-id"); -                                ret = 0; -                        } -                } -                is_force = dict_get_str_boolean (dict, "force", _gf_false); - -                break; - -        case GF_REPLACE_OP_PAUSE: -                if (glusterd_is_rb_paused (volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is " -                                "already paused for volume "); -                        ret = -1; -                        goto out; -                } else if (!glusterd_is_rb_started(volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is not" -                                " started for volume "); -                        ret = -1; -                        goto out; -                } -                break; - -        case GF_REPLACE_OP_ABORT: -                if (!glusterd_is_rb_ongoing (volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is not" -                                " started or paused for volume "); -                        ret = -1; -                        goto out; -                } -                break; - -        case GF_REPLACE_OP_COMMIT: -                if (!glusterd_is_rb_ongoing (volinfo)) { -                        gf_log (this->name, GF_LOG_ERROR, "Replace brick is not " -                                "started for volume "); -                        ret = -1; -                        goto out; -                } -                break; - -        case GF_REPLACE_OP_COMMIT_FORCE: +        if (!strcmp(replace_op, "GF_REPLACE_OP_COMMIT_FORCE")) {                  is_force = _gf_true; -                break; - -        case GF_REPLACE_OP_STATUS: - -                if (glusterd_is_rb_ongoing (volinfo) == _gf_false) { -                        ret = gf_asprintf (op_errstr, "replace-brick not" -                                           " started on volume %s", -                                           volinfo->volname); -                        if (ret < 0) { -                                *op_errstr = NULL; -                                goto out; -                        } - -                        gf_log (this->name, GF_LOG_ERROR, "%s", *op_errstr); -                        ret = -1; -                        goto out; -                } -                break; - -        default: +        } else {                  ret = -1;                  goto out;          } @@ -446,16 +317,6 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  GLUSTERD_GET_BRICK_PIDFILE (pidfile, volinfo, src_brickinfo,                                              priv); -                if ((replace_op != GF_REPLACE_OP_COMMIT_FORCE) && -                    !gf_is_service_running (pidfile, NULL)) { -                        snprintf(msg, sizeof(msg), "Source brick %s:%s " -                                 "is not online.", src_brickinfo->hostname, -                                 src_brickinfo->path); -                        *op_errstr = gf_strdup (msg); -                        ret = -1; -                        goto out; -                } -          } @@ -489,9 +350,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  goto out;          } -       if (!glusterd_is_rb_ongoing (volinfo) && -            (replace_op == GF_REPLACE_OP_START || -             replace_op == GF_REPLACE_OP_COMMIT_FORCE)) { +        if (!strcmp(replace_op, "GF_REPLACE_OP_COMMIT_FORCE")) {                  volinfo->rep_brick.src_brick = src_brickinfo;                  volinfo->rep_brick.dst_brick = dst_brickinfo; @@ -507,8 +366,7 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  goto out;         } -        if (!glusterd_is_rb_ongoing (volinfo) && -            gf_is_local_addr (host)) { +        if (gf_is_local_addr (host)) {                  ret = glusterd_validate_and_create_brickpath (dst_brickinfo,                                                    volinfo->volume_id,                                                    op_errstr, is_force); @@ -573,27 +431,6 @@ glusterd_op_stage_replace_brick (dict_t *dict, char **op_errstr,                  }          } -        if (replace_op == GF_REPLACE_OP_START && -            gf_is_local_addr (volinfo->rep_brick.dst_brick->hostname)) { -                port = pmap_registry_alloc (THIS); -                if (!port) { -                        gf_log (THIS->name, GF_LOG_CRITICAL, -                                "No free ports available"); -                        ret = -1; -                        goto out; -                } - -                ctx = glusterd_op_get_ctx(); -                ret = dict_set_int32 ((ctx)?ctx:rsp_dict, "dst-brick-port", -                                      port); -                if (ret) { -                        gf_log (THIS->name, GF_LOG_ERROR, "Failed to set dst " -                                "brick port"); -                        goto out; -                } -                volinfo->rep_brick.dst_brick->port = port; -        } -          ret = 0;  out: @@ -604,555 +441,6 @@ out:  }  static int -rb_set_mntfd (int mntfd) -{ -        int     ret = -1; -        dict_t *ctx = NULL; - -        ctx = glusterd_op_get_ctx (); -        if (!ctx) { -                gf_log (THIS->name, GF_LOG_CRITICAL, "Failed to get op ctx"); -                goto out; -        } -        ret = dict_set_int32 (ctx, "mntfd", mntfd); -        if (ret) -                gf_log (THIS->name, GF_LOG_DEBUG, "Failed to set mnt fd " -                        "in op ctx"); -out: -        return ret; -} - -static int -rb_get_mntfd (int *mntfd) -{ -        int     ret = -1; -        dict_t *ctx = NULL; - -        ctx = glusterd_op_get_ctx (); -        if (!ctx) { -                gf_log (THIS->name, GF_LOG_CRITICAL, "Failed to get op ctx"); -                goto out; -        } -        ret = dict_get_int32 (ctx, "mntfd", mntfd); -        if (ret) -                gf_log (THIS->name, GF_LOG_DEBUG, "Failed to get mnt fd " -                        "from op ctx"); -out: -        return ret; -} - -static int -rb_regenerate_volfiles (glusterd_volinfo_t *volinfo, -                        glusterd_brickinfo_t *brickinfo, -                        int32_t pump_needed) -{ -        dict_t *dict = NULL; -        int ret = 0; - -        dict = volinfo->dict; - -        gf_log ("", GF_LOG_DEBUG, -                "attempting to set pump value=%d", pump_needed); - -        ret = dict_set_int32 (dict, "enable-pump", pump_needed); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, -                        "could not dict_set enable-pump"); -                goto out; -        } - -        ret = glusterd_create_rb_volfiles (volinfo, brickinfo); - -        dict_del (dict, "enable-pump"); - -out: -        return ret; -} - -static int -rb_src_brick_restart (glusterd_volinfo_t *volinfo, -                      glusterd_brickinfo_t *src_brickinfo, -                      int activate_pump) -{ -        int              ret  = 0; -        xlator_t        *this = NULL; -        glusterd_conf_t *priv = NULL; - -        this = THIS; -        GF_ASSERT (this); - -        priv = this->private; -        GF_ASSERT (priv); - -        gf_log ("", GF_LOG_DEBUG, -                "Attempting to kill src"); - -        ret = priv->nfs_svc.stop (&(priv->nfs_svc), SIGKILL); - -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to stop nfs, ret: %d", -                        ret); -        } - -        ret = glusterd_volume_stop_glusterfs (volinfo, src_brickinfo, -                                              _gf_false); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to stop " -                        "glusterfs, ret: %d", ret); -                goto out; -        } - -        glusterd_delete_volfile (volinfo, src_brickinfo); - -        if (activate_pump) { -                ret = rb_regenerate_volfiles (volinfo, src_brickinfo, 1); -                if (ret) { -                        gf_log ("", GF_LOG_DEBUG, -                                "Could not regenerate volfiles with pump"); -                        goto out; -                } -        } else { -                ret = rb_regenerate_volfiles (volinfo, src_brickinfo, 0); -                if (ret) { -                        gf_log ("", GF_LOG_DEBUG, -                                "Could not regenerate volfiles without pump"); -                        goto out; -                } - -        } - -        sleep (2); -        ret = glusterd_volume_start_glusterfs (volinfo, src_brickinfo, -                                               _gf_false); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to start " -                        "glusterfs, ret: %d", ret); -                goto out; -        } - -out: -        ret = priv->nfs_svc.start (&(priv->nfs_svc), PROC_START_NO_WAIT); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to start nfs, ret: %d", -                        ret); -        } -        return ret; -} - -static int -rb_send_xattr_command (glusterd_volinfo_t *volinfo, -                       glusterd_brickinfo_t *src_brickinfo, -                       glusterd_brickinfo_t *dst_brickinfo, -                       const char *xattr_key, const char *value) -{ -        int             ret   = -1; -        int             mntfd = -1; - -        ret = rb_get_mntfd (&mntfd); -        if (ret) -                goto out; - -        ret = sys_fsetxattr (mntfd, xattr_key, value, strlen (value) + 1, 0); -        if (ret) -                gf_log (THIS->name, GF_LOG_DEBUG, "setxattr on key: " -                        "%s, reason: %s", xattr_key, strerror (errno)); - -out: -        return ret; -} - -static int -rb_spawn_dst_brick (glusterd_volinfo_t *volinfo, -                    glusterd_brickinfo_t *brickinfo) -{ -        glusterd_conf_t    *priv           = NULL; -        runner_t            runner         = {0,}; -        int                 ret            = -1; -        int32_t             port           = 0; - -        priv = THIS->private; - -        port = brickinfo->port; -        GF_ASSERT (port); - -        runinit (&runner); -        runner_add_arg (&runner, SBIN_DIR"/glusterfs"); -        runner_argprintf (&runner, "-f" "%s/vols/%s/"RB_DSTBRICKVOL_FILENAME, -                          priv->workdir, volinfo->volname); -        runner_argprintf (&runner, "-p" "%s/vols/%s/"RB_DSTBRICK_PIDFILE, -                          priv->workdir, volinfo->volname); -        runner_add_arg (&runner, "--xlator-option"); -        runner_argprintf (&runner, "src-server.listen-port=%d", port); -        if (volinfo->memory_accounting) -                runner_add_arg (&runner, "--mem-accounting"); - -        ret = runner_run_nowait (&runner); -        if (ret) { -                pmap_registry_remove (THIS, 0, brickinfo->path, -                                      GF_PMAP_PORT_BRICKSERVER, NULL); -                gf_log ("", GF_LOG_DEBUG, -                        "Could not start glusterfs"); -                goto out; -        } - -        gf_log ("", GF_LOG_DEBUG, -                "Successfully started glusterfs: brick=%s:%s", -                brickinfo->hostname, brickinfo->path); - -        ret = 0; - -out: -        return ret; -} - -static int -rb_spawn_glusterfs_client (glusterd_volinfo_t *volinfo, -                           glusterd_brickinfo_t *brickinfo) -{ -        xlator_t           *this            = NULL; -        glusterd_conf_t    *priv            = NULL; -        runner_t            runner          = {0,}; -        struct stat         buf             = {0,}; -        char                mntpt[PATH_MAX] = {0,}; -        int                 mntfd           = -1; -        int                 ret             = -1; - -        this = THIS; -        priv = this->private; - -        GLUSTERD_GET_RB_MNTPT (mntpt, sizeof (mntpt), volinfo); -        runinit (&runner); -        runner_add_arg (&runner, SBIN_DIR"/glusterfs"); -        runner_argprintf (&runner, "-f" "%s/vols/%s/"RB_CLIENTVOL_FILENAME, -                          priv->workdir, volinfo->volname); -        runner_add_arg (&runner, mntpt); -        if (volinfo->memory_accounting) -                runner_add_arg (&runner, "--mem-accounting"); - -        ret = runner_run_reuse (&runner); -        if (ret) { -                runner_log (&runner, this->name, GF_LOG_DEBUG, -                            "Could not start glusterfs"); -                runner_end (&runner); -                goto out; -        } else { -                runner_log (&runner, this->name, GF_LOG_DEBUG, -                            "Successfully started  glusterfs"); -                runner_end (&runner); -        } - -        ret = stat (mntpt, &buf); -        if (ret) { -                 gf_log (this->name, GF_LOG_DEBUG, "stat on mount point %s " -                         "failed", mntpt); -                 goto out; -        } - -        mntfd = open (mntpt, O_DIRECTORY); -        if (mntfd == -1) -                goto out; - -        ret = rb_set_mntfd (mntfd); -        if (ret) -                goto out; - - -out: - -        return ret; -} - -static const char *client_volfile_str =  "volume mnt-client\n" -        " type protocol/client\n" -        " option remote-host %s\n" -        " option remote-subvolume %s\n" -        " option remote-port %d\n" -        " option transport-type %s\n" -        " option username %s\n" -        " option password %s\n" -        "end-volume\n" -        "volume mnt-wb\n" -        " type performance/write-behind\n" -        " subvolumes mnt-client\n" -        "end-volume\n"; - -static int -rb_generate_client_volfile (glusterd_volinfo_t *volinfo, -                            glusterd_brickinfo_t *src_brickinfo) -{ -        glusterd_conf_t  *priv                  = NULL; -        xlator_t         *this                  = NULL; -        FILE             *file                  = NULL; -        char              filename[PATH_MAX]    = {0, }; -        int               ret                   = -1; -        int               fd                    = -1; -        char             *ttype                 = NULL; - -        this = THIS; -        priv = this->private; - -        gf_log (this->name, GF_LOG_DEBUG, "Creating volfile"); - -        snprintf (filename, PATH_MAX, "%s/vols/%s/%s", -                  priv->workdir, volinfo->volname, -                  RB_CLIENTVOL_FILENAME); - -        fd = open (filename, O_CREAT | O_RDONLY, S_IRUSR | S_IWUSR); -        if (fd < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "%s", strerror (errno)); -                goto out; -        } -        sys_close (fd); - -        file = fopen (filename, "w+"); -        if (!file) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "Open of volfile failed"); -                ret = -1; -                goto out; -        } - -        GF_ASSERT (src_brickinfo->port); - -	ttype = glusterd_get_trans_type_rb (volinfo->transport_type); -	if (NULL == ttype){ -		ret = -1; -		goto out; -	} - -        fprintf (file, client_volfile_str, src_brickinfo->hostname, -                 src_brickinfo->path, -                 src_brickinfo->port, ttype, -                 glusterd_auth_get_username (volinfo), -                 glusterd_auth_get_password (volinfo)); - -        GF_FREE (ttype); - -        ret = 0; - -out: -        if (file) -                fclose (file); - -        return ret; -} - -static const char *dst_brick_volfile_str = "volume src-posix\n" -        " type storage/posix\n" -        " option directory %s\n" -        " option volume-id %s\n" -        "end-volume\n" -        "volume %s\n" -        " type features/locks\n" -        " subvolumes src-posix\n" -        "end-volume\n" -        "volume src-server\n" -        " type protocol/server\n" -        " option auth.login.%s.allow %s\n" -        " option auth.login.%s.password %s\n" -        " option auth.addr.%s.allow *\n" -        " option transport-type %s\n" -        " subvolumes %s\n" -        "end-volume\n"; - -static int -rb_generate_dst_brick_volfile (glusterd_volinfo_t *volinfo, -                               glusterd_brickinfo_t *dst_brickinfo) -{ -        glusterd_conf_t    *priv                = NULL; -        xlator_t           *this                = NULL; -        FILE               *file                = NULL; -        char                filename[PATH_MAX]  = {0, }; -        int                 ret                 = -1; -        int                 fd                  = -1; -        char               *trans_type          = NULL; - -        this = THIS; -        priv = this->private; - -        gf_log (this->name, GF_LOG_DEBUG, -                "Creating volfile"); - -        snprintf (filename, PATH_MAX, "%s/vols/%s/%s", -                  priv->workdir, volinfo->volname, -                  RB_DSTBRICKVOL_FILENAME); - -        fd = sys_creat (filename, S_IRUSR | S_IWUSR); -        if (fd < 0) { -                gf_log (this->name, GF_LOG_ERROR, -                        "%s", strerror (errno)); -                goto out; -        } -        sys_close (fd); - -        file = fopen (filename, "w+"); -        if (!file) { -                gf_log (this->name, GF_LOG_DEBUG, -                        "Open of volfile failed"); -                ret = -1; -                goto out; -        } - -	trans_type = glusterd_get_trans_type_rb (volinfo->transport_type); -	if (NULL == trans_type){ -		ret = -1; -		goto out; -	} - -        fprintf (file, dst_brick_volfile_str, -                 dst_brickinfo->path, -                 uuid_utoa (volinfo->volume_id), -                 dst_brickinfo->path, -                 dst_brickinfo->path, -                 glusterd_auth_get_username (volinfo), -                 glusterd_auth_get_username (volinfo), -                 glusterd_auth_get_password (volinfo), -                 dst_brickinfo->path, -                 trans_type, -                 dst_brickinfo->path); - -	GF_FREE (trans_type); - -        ret = 0; - -out: -        if (file) -                fclose (file); - -        return ret; -} - - -static int -rb_mountpoint_mkdir (glusterd_volinfo_t *volinfo, -                     glusterd_brickinfo_t *src_brickinfo) -{ -        char             mntpt[PATH_MAX]        = {0,}; -        int              ret                    = -1; - -        GLUSTERD_GET_RB_MNTPT (mntpt, sizeof (mntpt), volinfo); -        ret = mkdir (mntpt, 0777); -        if (ret && (errno != EEXIST)) { -                gf_log ("", GF_LOG_DEBUG, "mkdir failed, due to %s", -                        strerror (errno)); -                goto out; -        } - -        ret = 0; - -out: -        return ret; -} - -static int -rb_destroy_maintenance_client (glusterd_volinfo_t *volinfo, -                               glusterd_brickinfo_t *src_brickinfo) -{ -        xlator_t         *this                        = NULL; -        glusterd_conf_t  *priv                        = NULL; -        char              volfile[PATH_MAX]           = {0,}; -        int               ret                         = -1; -        int               mntfd                       = -1; -        char              mntpt[PATH_MAX]             = {0,}; - -        this = THIS; -        priv = this->private; - -        ret = rb_get_mntfd (&mntfd); -        if (ret) -                goto out; - -        ret = close (mntfd); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, "Failed to close mount " -                        "point directory"); -                goto out; -        } - -        GLUSTERD_GET_RB_MNTPT (mntpt, sizeof (mntpt), volinfo); -        ret = gf_umount_lazy (this->name, mntpt, 1); -        if (ret) { -                gf_log (this->name, GF_LOG_WARNING, -                        "Lazy unmount failed on maintenance client"); -        } else { -                gf_log (this->name, GF_LOG_DEBUG, -                        "Successfully unmounted  maintenance client"); -        } - -        snprintf (volfile, PATH_MAX, "%s/vols/%s/%s", priv->workdir, -                  volinfo->volname, RB_CLIENTVOL_FILENAME); - -        ret = unlink (volfile); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, "unlink of %s failed, reason: %s", -                        volfile, strerror (errno)); -                goto out; -        } - -        ret = 0; - -out: -        return ret; -} - -static int -rb_spawn_maintenance_client (glusterd_volinfo_t *volinfo, -                             glusterd_brickinfo_t *src_brickinfo) -{ -        int ret = -1; - -        ret = rb_generate_client_volfile (volinfo, src_brickinfo); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, "Unable to generate client " -                        "volfile"); -                goto out; -        } - -        ret = rb_mountpoint_mkdir (volinfo, src_brickinfo); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, "Unable to mkdir " -                        "mountpoint"); -                goto out; -        } - -        ret = rb_spawn_glusterfs_client (volinfo, src_brickinfo); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, "Unable to start glusterfs"); -                goto out; -        } - -        ret = 0; -out: -        return ret; -} - -static int -rb_spawn_destination_brick (glusterd_volinfo_t *volinfo, -                            glusterd_brickinfo_t *dst_brickinfo) - -{ -        int ret = -1; - -        ret = rb_generate_dst_brick_volfile (volinfo, dst_brickinfo); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, "Unable to generate client " -                        "volfile"); -                goto out; -        } - -        ret = rb_spawn_dst_brick (volinfo, dst_brickinfo); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, "Unable to start glusterfs"); -                goto out; -        } - -        ret = 0; -out: -        return ret; -} - -static int  rb_kill_destination_brick (glusterd_volinfo_t *volinfo,                             glusterd_brickinfo_t *dst_brickinfo)  { @@ -1168,241 +456,13 @@ rb_kill_destination_brick (glusterd_volinfo_t *volinfo,          return glusterd_service_stop ("brick", pidfile, SIGTERM, _gf_true);  } -static int -rb_get_xattr_command (glusterd_volinfo_t *volinfo, -                      glusterd_brickinfo_t *src_brickinfo, -                      glusterd_brickinfo_t *dst_brickinfo, -                      const char *xattr_key, -                      char *value) -{ -        int             ret    = -1; -        int             mntfd  = -1; - -        ret = rb_get_mntfd (&mntfd); -        if (ret) -                goto out; - -        ret = sys_fgetxattr (mntfd, xattr_key, value, 8192); - -        if (ret < 0) { -                gf_log (THIS->name, GF_LOG_DEBUG, "getxattr on key: %s " -                        "failed, reason: %s", xattr_key, strerror (errno)); -                goto out; -        } - -        ret = 0; -out: -        return ret; -} - -static int -rb_send_cmd (glusterd_volinfo_t *volinfo, -             glusterd_brickinfo_t *src, -             glusterd_brickinfo_t *dst, -             gf1_cli_replace_op op) -{ -        char         start_value[8192]          = {0,}; -        char         status_str[8192]           = {0,}; -        char        *status_reply               = NULL; -        char        *tmp                        = NULL; -        char        *save_ptr                   = NULL; -        char         filename[PATH_MAX]         = {0,}; -        char        *current_file               = NULL; -        uint64_t     files                      = 0; -        int          status                     = 0; -        dict_t      *ctx                        = NULL; -        int          ret                        = 0; - -        GF_ASSERT (volinfo); -        GF_ASSERT (src); -        GF_ASSERT (dst); -        GF_ASSERT ((op > GF_REPLACE_OP_NONE) -                   && (op <= GF_REPLACE_OP_COMMIT_FORCE)); - -        switch (op) { -                case GF_REPLACE_OP_START: -                { -                        snprintf (start_value, sizeof (start_value), -                                  "%s:%s:%d", dst->hostname, dst->path, -                                  dst->port); -                        ret = rb_send_xattr_command (volinfo, src, dst, -                                                     RB_PUMP_CMD_START, -                                                     start_value); -                } -                break; -                case GF_REPLACE_OP_PAUSE: -                { -                        ret = rb_send_xattr_command (volinfo, src, dst, -                                                     RB_PUMP_CMD_PAUSE, -                                                     RB_PUMP_DEF_ARG); -                } -                break; -                case GF_REPLACE_OP_ABORT: -                { -                        ret = rb_send_xattr_command (volinfo, src, dst, -                                                     RB_PUMP_CMD_ABORT, -                                                     RB_PUMP_DEF_ARG); -                } -                break; -                case GF_REPLACE_OP_COMMIT: -                { -                        ret = rb_send_xattr_command (volinfo, src, dst, -                                                     RB_PUMP_CMD_COMMIT, -                                                     RB_PUMP_DEF_ARG); -                } -                break; -                case GF_REPLACE_OP_STATUS: -                { -                        ret = rb_get_xattr_command (volinfo, src, dst, -                                                    RB_PUMP_CMD_STATUS, -                                                    status_str); -                        if (ret) -                                goto out; - -                        ctx = glusterd_op_get_ctx (); -                        GF_ASSERT (ctx); -                        if (!ctx) { -                                ret = -1; -                                gf_log (THIS->name, GF_LOG_CRITICAL, -                                        "ctx is not present."); -                                goto out; -                        } - -                        /* Split status reply into different parts */ -                        tmp = strtok_r (status_str, ":", &save_ptr); -                        if (!tmp) { -                                ret = -1; -                                gf_log (THIS->name, GF_LOG_ERROR, -                                        "Couldn't tokenize status string"); -                                goto out; -                        } -                        sscanf (tmp, "status=%d", &status); -                        ret = dict_set_int32 (ctx, "status", status); -                        if (ret) { -                                gf_log (THIS->name, GF_LOG_ERROR, "Couldn't " -                                        "set rb status in context"); -                                goto out; -                        } - -                        tmp = NULL; -                        tmp = strtok_r (NULL, ":", &save_ptr); -                        if (!tmp) { -                                ret = -1; -                                gf_log (THIS->name, GF_LOG_ERROR, -                                        "Couldn't tokenize status string"); -                                goto out; -                        } -                        sscanf (tmp, "no_of_files=%"SCNu64, &files); -                        ret = dict_set_uint64 (ctx, "files", files); -                        if (ret) { -                                gf_log (THIS->name, GF_LOG_ERROR, "Couldn't " -                                        "set rb files in context"); -                                goto out; -                        } - -                        if (status == 0) { -                                tmp = NULL; -                                tmp = strtok_r (NULL, ":", &save_ptr); -                                if (!tmp) { -                                        ret = -1; -                                        gf_log (THIS->name, GF_LOG_ERROR, -                                                "Couldn't tokenize status " -                                                "string"); -                                        goto out; -                                } -                                sscanf (tmp, "current_file=%s", filename); -                                current_file = gf_strdup (filename); -                                ret = dict_set_dynstr (ctx, "current_file", -                                                       current_file); -                                if (ret) { -                                        GF_FREE (current_file); -                                        gf_log (THIS->name, GF_LOG_ERROR, -                                                "Couldn't set rb current file " -                                                "in context"); -                                        goto out; -                                } -                        } -                        if (status) { -                                ret = gf_asprintf (&status_reply, -                                                  "Number of files migrated = %" -                                                  PRIu64"\tMigration complete", -                                                  files); -                        } else { -                                ret = gf_asprintf (&status_reply, -                                                  "Number of files migrated = %" -                                                  PRIu64"\tCurrent file = %s", -                                                  files, filename); -                        } -                        if (ret == -1) { -                                gf_log (THIS->name, GF_LOG_ERROR, -                                        "Failed to create status_reply string"); -                                goto out; -                        } -                        ret = dict_set_dynstr (ctx, "status-reply", -                                               status_reply); -                        if (ret) { -                                GF_FREE (status_reply); -                                gf_log (THIS->name, GF_LOG_ERROR, "Couldn't " -                                        "set rb status response in context."); -                                goto out; -                        } -                } -                break; -                default: -                { -                        GF_ASSERT (0); -                        ret = -1; -                        gf_log (THIS->name, GF_LOG_CRITICAL, "Invalid replace" -                                " brick subcommand."); -                } -                break; -        } -out: -        return ret; -} - -static int -rb_do_operation (glusterd_volinfo_t *volinfo, -                 glusterd_brickinfo_t *src_brickinfo, -                 glusterd_brickinfo_t *dst_brickinfo, -                 gf1_cli_replace_op op) -{ - -        int             ret             = -1; -        char            op_str[256]     = {0, }; -        xlator_t        *this           = NULL; - -        this = THIS; - -        ret = rb_spawn_maintenance_client (volinfo, src_brickinfo); -        if (ret) { -                gf_log (this->name, GF_LOG_DEBUG, "Could not spawn " -                        "maintenance client"); -                goto umount; -        } - -        ret = rb_send_cmd (volinfo, src_brickinfo, dst_brickinfo, op); -        if (ret) { -                (void) glusterd_get_replace_op_str (op, op_str); -                gf_log (this->name, GF_LOG_DEBUG, "Sending replace-brick " -                        "sub-command %s failed.", op_str); -        } - -umount: -        if (rb_destroy_maintenance_client (volinfo, src_brickinfo)) -                gf_log (this->name, GF_LOG_DEBUG, "Failed to destroy " -                        "maintenance client"); - -         return ret; -} -  /* 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, int32_t replace_op) +                         dict_t *rsp_dict, dict_t *req_dict, char *replace_op)  {          xlator_t *this                  = NULL;          dict_t   *ctx                   = NULL; @@ -1412,13 +472,14 @@ rb_update_srcbrick_port (glusterd_volinfo_t *volinfo,          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_log ("", GF_LOG_INFO, +                gf_log (this->name, GF_LOG_INFO,                          "adding src-brick port no");                  if (volinfo->transport_type == GF_TRANSPORT_RDMA) { @@ -1430,18 +491,18 @@ rb_update_srcbrick_port (glusterd_volinfo_t *volinfo,                  src_brickinfo->port = pmap_registry_search (this,                                        brickname, GF_PMAP_PORT_BRICKSERVER); -                if (!src_brickinfo->port && -                    replace_op != GF_REPLACE_OP_COMMIT_FORCE ) { -                        gf_log ("", GF_LOG_ERROR, +                if (!src_brickinfo->port) { +                        gf_log (this->name, GF_LOG_ERROR,                                  "Src brick port not available");                          ret = -1;                          goto out;                  }                  if (rsp_dict) { -                        ret = dict_set_int32 (rsp_dict, "src-brick-port", src_brickinfo->port); +                        ret = dict_set_int32 (rsp_dict, "src-brick-port", +                                              src_brickinfo->port);                          if (ret) { -                                gf_log ("", GF_LOG_DEBUG, +                                gf_log (this->name, GF_LOG_DEBUG,                                          "Could not set src-brick port no");                                  goto out;                          } @@ -1449,9 +510,10 @@ rb_update_srcbrick_port (glusterd_volinfo_t *volinfo,                  ctx = glusterd_op_get_ctx ();                  if (ctx) { -                        ret = dict_set_int32 (ctx, "src-brick-port", src_brickinfo->port); +                        ret = dict_set_int32 (ctx, "src-brick-port", +                                              src_brickinfo->port);                          if (ret) { -                                gf_log ("", GF_LOG_DEBUG, +                                gf_log (this->name, GF_LOG_DEBUG,                                          "Could not set src-brick port no");                                  goto out;                          } @@ -1466,7 +528,7 @@ out:  static int  rb_update_dstbrick_port (glusterd_brickinfo_t *dst_brickinfo, dict_t *rsp_dict, -                         dict_t *req_dict, int32_t replace_op) +                         dict_t *req_dict, char *replace_op)  {          dict_t *ctx           = NULL;          int     ret           = 0; @@ -1587,18 +649,18 @@ out:  int  glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)  { -        int                                      ret = 0; -        dict_t                                  *ctx  = NULL; -        int                                      replace_op = 0; -        glusterd_volinfo_t                      *volinfo = NULL; -        char                                    *volname = NULL; -        xlator_t                                *this = NULL; -        glusterd_conf_t                         *priv = NULL; -        char                                    *src_brick = NULL; -        char                                    *dst_brick = NULL; +        int                                      ret           = 0; +        dict_t                                  *ctx           = NULL; +        char                                    *replace_op    = NULL; +        glusterd_volinfo_t                      *volinfo       = NULL; +        char                                    *volname       = NULL; +        xlator_t                                *this          = NULL; +        glusterd_conf_t                         *priv          = NULL; +        char                                    *src_brick     = NULL; +        char                                    *dst_brick     = NULL;          glusterd_brickinfo_t                    *src_brickinfo = NULL;          glusterd_brickinfo_t                    *dst_brickinfo = NULL; -        char                                    *task_id_str = NULL; +        char                                    *task_id_str   = NULL;          this = THIS;          GF_ASSERT (this); @@ -1628,7 +690,7 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)                  goto out;          } -        ret = dict_get_int32 (dict, "operation", (int32_t *)&replace_op); +        ret = dict_get_str (dict, "operation", &replace_op);          if (ret) {                  gf_log (this->name, GF_LOG_DEBUG,                          "dict_get on operation failed"); @@ -1669,250 +731,66 @@ glusterd_op_replace_brick (dict_t *dict, dict_t *rsp_dict)          if (ret)                  goto out; -	if ((GF_REPLACE_OP_START != replace_op)) { - -                /* Set task-id, if available, in op_ctx dict for operations -                 * other than start -                 */ -                if  (is_origin_glusterd (dict)) { -                        ctx = glusterd_op_get_ctx(); -                        if (!ctx) { -                                gf_log (this->name, GF_LOG_ERROR, "Failed to " -                                        "get op_ctx"); -                                ret = -1; -                                goto out; -                        } -                        if (!gf_uuid_is_null (volinfo->rep_brick.rb_id)) { -                                ret = glusterd_copy_uuid_to_dict -                                        (volinfo->rep_brick.rb_id, ctx, -                                         GF_REPLACE_BRICK_TID_KEY); -                                if (ret) { -                                        gf_log (this->name, GF_LOG_ERROR, -                                                "Failed to set " -                                                "replace-brick-id"); -                                        goto out; -                                } -                        } +                /* Set task-id, if available, in op_ctx dict for*/ +        if (is_origin_glusterd (dict)) { +                ctx = glusterd_op_get_ctx(); +                if (!ctx) { +                        gf_log (this->name, GF_LOG_ERROR, "Failed to " +                                "get op_ctx"); +                        ret = -1; +                        goto out;                  } -	} +        }          ret = rb_update_dstbrick_port (dst_brickinfo, rsp_dict,                                         dict, replace_op);          if (ret)                  goto out; -        switch (replace_op) { -        case GF_REPLACE_OP_START: -        { -                ret = dict_get_str (dict, GF_REPLACE_BRICK_TID_KEY, &task_id_str); -                if (ret) { -                        gf_log (this->name, GF_LOG_ERROR, -                                "Missing replace-brick-id"); -                        ret = 0; -                } else { -                        gf_uuid_parse (task_id_str, volinfo->rep_brick.rb_id); -                } - -                if (gf_is_local_addr (dst_brickinfo->hostname)) { -                        gf_log (this->name, GF_LOG_INFO, -                                "I AM THE DESTINATION HOST"); -                        if (!glusterd_is_rb_paused (volinfo)) { -                                ret = rb_spawn_destination_brick -                                        (volinfo, dst_brickinfo); -                                if (ret) { -                                        gf_log (this->name, GF_LOG_DEBUG, -                                                "Failed to spawn destination " -                                                "brick"); -                                        goto out; -                                } -                        } else { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Replace brick is already started=> no " -                                        "need to restart dst brick "); -                        } -		} - - -		if (gf_is_local_addr (src_brickinfo->hostname)) { -		        ret = rb_src_brick_restart (volinfo, src_brickinfo, -				                    1); -		        if (ret) { -				gf_log (this->name, GF_LOG_DEBUG, -	                                "Could not restart src-brick"); -			        goto out; -			} -		} - -		if (gf_is_local_addr (dst_brickinfo->hostname)) { -			gf_log (this->name, GF_LOG_INFO, -				"adding dst-brick port no"); - -                        ret = rb_update_dstbrick_port (dst_brickinfo, rsp_dict, -                                                       dict, replace_op); -                        if (ret) -                                goto out; -                } - -                glusterd_set_rb_status (volinfo, GF_RB_STATUS_STARTED); -		break; -	} - -        case GF_REPLACE_OP_COMMIT: -        { -                ctx = glusterd_op_get_ctx (); -                if (ctx) { -                        ret = rb_do_operation (volinfo, src_brickinfo, -                                               dst_brickinfo, -                                               GF_REPLACE_OP_COMMIT); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Commit operation failed"); -                                goto out; -                        } -                } +        if (strcmp(replace_op, "GF_REPLACE_OP_COMMIT_FORCE")) { +                ret = -1; +                goto out;          } -                /* fall through */ -        case GF_REPLACE_OP_COMMIT_FORCE: -        { -                if (gf_is_local_addr (dst_brickinfo->hostname)) { -                        gf_log (this->name, GF_LOG_DEBUG, -                                "I AM THE DESTINATION HOST"); -                        ret = rb_kill_destination_brick (volinfo, -                                                         dst_brickinfo); -                        if (ret) { -                                gf_log (this->name, GF_LOG_CRITICAL, -                                        "Unable to cleanup dst brick"); -                                goto out; -                        } -                } -                ret = glusterd_svcs_stop (volinfo); +        if (gf_is_local_addr (dst_brickinfo->hostname)) { +                gf_log (this->name, GF_LOG_DEBUG, "I AM THE DESTINATION HOST"); +                ret = rb_kill_destination_brick (volinfo, dst_brickinfo);                  if (ret) { -                        gf_log (this->name, GF_LOG_ERROR, -                                "Unable to stop nfs server, ret: %d", ret); -                } - -		ret = glusterd_op_perform_replace_brick (volinfo, src_brick, -							 dst_brick, dict); -		if (ret) { -			gf_log (this->name, GF_LOG_CRITICAL, "Unable to add " -				"dst-brick: %s to volume: %s", dst_brick, -                                volinfo->volname); -		        (void) glusterd_svcs_manager (volinfo); -			goto out; -		} - -		volinfo->rebal.defrag_status = 0; - -		ret = glusterd_svcs_manager (volinfo); -		if (ret) {                          gf_log (this->name, GF_LOG_CRITICAL, -                                "Failed to generate nfs volume file"); -		} - - -		ret = glusterd_fetchspec_notify (THIS); -                glusterd_set_rb_status (volinfo, GF_RB_STATUS_NONE); -                glusterd_brickinfo_delete (volinfo->rep_brick.dst_brick); -                volinfo->rep_brick.src_brick = NULL; -                volinfo->rep_brick.dst_brick = NULL; -                gf_uuid_clear (volinfo->rep_brick.rb_id); -        } -        break; - -        case GF_REPLACE_OP_PAUSE: -        { -                gf_log (this->name, GF_LOG_DEBUG, -                        "Received pause - doing nothing"); -                ctx = glusterd_op_get_ctx (); -                if (ctx) { -                        ret = rb_do_operation (volinfo, src_brickinfo, -                                               dst_brickinfo, -                                               GF_REPLACE_OP_PAUSE); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Pause operation failed"); -                                goto out; -                        } +                                "Unable to cleanup dst brick"); +                        goto out;                  } +        } -                glusterd_set_rb_status (volinfo, GF_RB_STATUS_PAUSED); +        ret = glusterd_svcs_stop (volinfo); +        if (ret) { +                gf_log (this->name, GF_LOG_ERROR, +                        "Unable to stop nfs server, ret: %d", ret);          } -                break; -        case GF_REPLACE_OP_ABORT: -        { +        ret = glusterd_op_perform_replace_brick (volinfo, src_brick, +                                                 dst_brick, dict); +        if (ret) { +                gf_log (this->name, GF_LOG_CRITICAL, "Unable to add dst-brick: " +                        "%s to volume: %s", dst_brick, volinfo->volname); +		(void) glusterd_svcs_manager (volinfo); +                goto out; +        } -                ctx = glusterd_op_get_ctx (); -                if (ctx) { -                        ret = rb_do_operation (volinfo, src_brickinfo, -                                               dst_brickinfo, -                                               GF_REPLACE_OP_ABORT); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Abort operation failed"); -                                goto out; -                        } -                } +        volinfo->rebal.defrag_status = 0; -                if (gf_is_local_addr (src_brickinfo->hostname)) { -                        ret = rb_src_brick_restart (volinfo, src_brickinfo, -                                                    0); -                        if (ret) { -                                gf_log (this->name, GF_LOG_ERROR, -                                        "Couldn't restart src brick " -                                        "with pump xlator disabled."); -                                goto out; -                        } -                } - -                if (gf_is_local_addr (dst_brickinfo->hostname)) { -                        gf_log (this->name, GF_LOG_INFO, -                                "I AM THE DESTINATION HOST"); -                        ret = rb_kill_destination_brick (volinfo, dst_brickinfo); -                        if (ret) { -                                gf_log ("", GF_LOG_DEBUG, -                                        "Failed to kill destination brick"); -                                goto out; -                        } -                } -                glusterd_set_rb_status (volinfo, GF_RB_STATUS_NONE); -                glusterd_brickinfo_delete (volinfo->rep_brick.dst_brick); -                volinfo->rep_brick.src_brick = NULL; -                volinfo->rep_brick.dst_brick = NULL; +        ret = glusterd_svcs_manager (volinfo); +        if (ret) { +                gf_log (this->name, GF_LOG_CRITICAL, +                        "Failed to generate nfs volume file");          } -        break; - -        case GF_REPLACE_OP_STATUS: -        { -                gf_log (this->name, GF_LOG_DEBUG, -                        "received status - doing nothing"); -                ctx = glusterd_op_get_ctx (); -                if (ctx) { -                        if (glusterd_is_rb_paused (volinfo)) { -                                ret = dict_set_str (ctx, "status-reply", -                                                 "replace brick has been paused"); -                                if (ret) -                                        gf_log (this->name, GF_LOG_ERROR, -                                                "failed to set pump status" -                                                " in ctx"); -                                goto out; -                        } -                        ret = rb_do_operation (volinfo, src_brickinfo, -                                               dst_brickinfo, -                                               GF_REPLACE_OP_STATUS); -                        if (ret) -                                goto out; -                } -        } -                break; +        ret = glusterd_fetchspec_notify (THIS); +        glusterd_brickinfo_delete (volinfo->rep_brick.dst_brick); +        volinfo->rep_brick.src_brick = NULL; +        volinfo->rep_brick.dst_brick = NULL; -        default: -                ret = -1; -                goto out; -        } -        if (!ret && replace_op != GF_REPLACE_OP_STATUS) +        if (!ret)  		ret = glusterd_store_volinfo (volinfo,                                                GLUSTERD_VOLINFO_VER_AC_INCREMENT);          if (ret) @@ -1927,7 +805,6 @@ void  glusterd_do_replace_brick (void *data)  {          glusterd_volinfo_t     *volinfo = NULL; -        int32_t                 op      = 0;          int32_t                 src_port = 0;          int32_t                 dst_port = 0;          int32_t                 ret      = 0; @@ -1957,26 +834,20 @@ glusterd_do_replace_brick (void *data)                          "Cancelling timer thread");  	} -        gf_log ("", GF_LOG_DEBUG, +        gf_log (this->name, GF_LOG_DEBUG,                  "Replace brick operation detected");          ret = dict_get_bin (dict, "transaction_id", (void **)&txn_id);          gf_log (this->name, GF_LOG_DEBUG, "transaction ID = %s",                  uuid_utoa (*txn_id)); -        ret = dict_get_int32 (dict, "operation", &op); -        if (ret) { -                gf_log ("", GF_LOG_DEBUG, -                        "dict_get on operation failed"); -                goto out; -        }          ret = dict_get_str (dict, "src-brick", &src_brick);          if (ret) {                  gf_log ("", GF_LOG_ERROR, "Unable to get src brick");                  goto out;          } -        gf_log ("", GF_LOG_DEBUG, +        gf_log (this->name, GF_LOG_DEBUG,                  "src brick=%s", src_brick);          ret = dict_get_str (dict, "dst-brick", &dst_brick); @@ -1985,78 +856,52 @@ glusterd_do_replace_brick (void *data)                  goto out;          } -        gf_log ("", GF_LOG_DEBUG, +        gf_log (this->name, GF_LOG_DEBUG,                  "dst brick=%s", dst_brick); -        ret = dict_get_str (dict, "volname", &volname); - -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to get volume name"); -                goto out; -        } -          ret = glusterd_volinfo_find (volname, &volinfo);          if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to allocate memory"); +                gf_log (this->name, GF_LOG_ERROR, "Unable to find volinfo");                  goto out;          }          ret = glusterd_volume_brickinfo_get_by_brick (src_brick, volinfo,                                                        &src_brickinfo);          if (ret) { -                gf_log ("", GF_LOG_DEBUG, "Unable to get src-brickinfo"); +                gf_log (this->name, GF_LOG_DEBUG, "Unable to get " +                        "src-brickinfo");                  goto out;          }          ret = glusterd_get_rb_dst_brickinfo (volinfo, &dst_brickinfo);          if (!dst_brickinfo) { -                gf_log ("", GF_LOG_DEBUG, "Unable to get dst-brickinfo"); +                gf_log (this->name, GF_LOG_DEBUG, "Unable to get " +                        "dst-brickinfo");                  goto out;          }          ret = glusterd_resolve_brick (dst_brickinfo);          if (ret) { -                gf_log ("", GF_LOG_DEBUG, "Unable to resolve dst-brickinfo"); +                gf_log (this->name, GF_LOG_DEBUG, "Unable to resolve " +                        "dst-brickinfo");                  goto out;          }          ret = dict_get_int32 (dict, "src-brick-port", &src_port);          if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to get src-brick port"); +                gf_log (this->name, GF_LOG_ERROR, "Unable to get " +                        "src-brick port");                  goto out;          }          ret = dict_get_int32 (dict, "dst-brick-port", &dst_port);          if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to get dst-brick port"); +                gf_log (this->name, GF_LOG_ERROR, "Unable to get dst-brick port");          }          dst_brickinfo->port = dst_port;          src_brickinfo->port = src_port; -        switch (op) { -        case GF_REPLACE_OP_START: -                if (!dst_port) { -                        ret = -1; -                        goto out; -                } - -                ret = rb_do_operation (volinfo, src_brickinfo, dst_brickinfo, -                                       GF_REPLACE_OP_START); -                if (ret) -                        goto out; -                break; -        case GF_REPLACE_OP_PAUSE: -        case GF_REPLACE_OP_ABORT: -        case GF_REPLACE_OP_COMMIT: -        case GF_REPLACE_OP_COMMIT_FORCE: -        case GF_REPLACE_OP_STATUS: -                break; -        default: -                ret = -1; -                goto out; -        } -  out:          if (ret)                  ret = glusterd_op_sm_inject_event (GD_OP_EVENT_RCVD_RJT, diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index 0beae3e8bbf..f6e31b24943 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -1103,21 +1103,6 @@ out:  }  static void -glusterd_store_rbstatepath_set (glusterd_volinfo_t *volinfo, char *rbstatepath, -                                size_t len) -{ -        char    voldirpath[PATH_MAX] = {0,}; -        GF_ASSERT (volinfo); -        GF_ASSERT (rbstatepath); -        GF_ASSERT (len <= PATH_MAX); - -        glusterd_store_voldirpath_set (volinfo, voldirpath, -                                       sizeof (voldirpath)); -        snprintf (rbstatepath, len, "%s/%s", voldirpath, -                  GLUSTERD_VOLUME_RBSTATE_FILE); -} - -static void  glusterd_store_volfpath_set (glusterd_volinfo_t *volinfo, char *volfpath,                               size_t len)  { @@ -1192,20 +1177,6 @@ glusterd_store_snapfpath_set (glusterd_snap_t *snap, char *snap_fpath,  }  int32_t -glusterd_store_create_rbstate_shandle_on_absence (glusterd_volinfo_t *volinfo) -{ -        char            rbstatepath[PATH_MAX] = {0}; -        int32_t         ret                   = 0; - -        GF_ASSERT (volinfo); - -        glusterd_store_rbstatepath_set (volinfo, rbstatepath, sizeof (rbstatepath)); -        ret = gf_store_handle_create_on_absence (&volinfo->rb_shandle, -                                                 rbstatepath); -        return ret; -} - -int32_t  glusterd_store_create_vol_shandle_on_absence (glusterd_volinfo_t *volinfo)  {          char            volfpath[PATH_MAX] = {0}; @@ -1309,93 +1280,6 @@ out:          return ret;  } -int32_t -glusterd_store_rbstate_write (int fd, glusterd_volinfo_t *volinfo) -{ -        int     ret             = -1; -        int     port            = 0; -        char    buf[PATH_MAX]   = {0, }; - -        GF_ASSERT (fd > 0); -        GF_ASSERT (volinfo); - -        snprintf (buf, sizeof (buf), "%d", volinfo->rep_brick.rb_status); -        ret = gf_store_save_value (fd, GLUSTERD_STORE_KEY_RB_STATUS, buf); -        if (ret) -                goto out; - -        if (volinfo->rep_brick.rb_status > GF_RB_STATUS_NONE) { - -                snprintf (buf, sizeof (buf), "%s:%s", -                          volinfo->rep_brick.src_brick->hostname, -                          volinfo->rep_brick.src_brick->path); -                ret = gf_store_save_value (fd, GLUSTERD_STORE_KEY_RB_SRC_BRICK, -                                           buf); -                if (ret) -                        goto out; - -                snprintf (buf, sizeof (buf), "%s:%s", -                          volinfo->rep_brick.dst_brick->hostname, -                          volinfo->rep_brick.dst_brick->path); -                ret = gf_store_save_value (fd, GLUSTERD_STORE_KEY_RB_DST_BRICK, -                                           buf); -                if (ret) -                        goto out; - -                switch (volinfo->transport_type) { -                        case GF_TRANSPORT_RDMA: -                                port = volinfo->rep_brick.dst_brick->rdma_port; -                                break; - -                        case GF_TRANSPORT_TCP: -                        case GF_TRANSPORT_BOTH_TCP_RDMA: -                                port = volinfo->rep_brick.dst_brick->port; -                                break; -                } - -                snprintf (buf, sizeof (buf), "%d", port); -                ret = gf_store_save_value (fd, GLUSTERD_STORE_KEY_RB_DST_PORT, -                                           buf); -                if (ret) -                        goto out; -                gf_uuid_unparse (volinfo->rep_brick.rb_id, buf); -                ret = gf_store_save_value (fd, GF_REPLACE_BRICK_TID_KEY, buf); -        } - -        ret = 0; -out: -        gf_log (THIS->name, GF_LOG_DEBUG, "Returning %d", ret); -        return ret; -} - -int32_t -glusterd_store_perform_rbstate_store (glusterd_volinfo_t *volinfo) -{ -        int                         fd = -1; -        int32_t                     ret = -1; -        GF_ASSERT (volinfo); - -        fd = gf_store_mkstemp (volinfo->rb_shandle); -        if (fd <= 0) { -                ret = -1; -                goto out; -        } - -        ret = glusterd_store_rbstate_write (fd, volinfo); -        if (ret) -                goto out; - -        ret = gf_store_rename_tmppath (volinfo->rb_shandle); -        if (ret) -                goto out; - -out: -        if (ret && (fd > 0)) -                gf_store_unlink_tmppath (volinfo->rb_shandle); -        gf_log (THIS->name, GF_LOG_DEBUG, "Returning %d", ret); -        return ret; -} -  int  _gd_store_rebalance_dict (dict_t *dict, char *key, data_t *value, void *data)  { @@ -1549,8 +1433,6 @@ glusterd_store_volume_cleanup_tmp (glusterd_volinfo_t *volinfo)          gf_store_unlink_tmppath (volinfo->shandle); -        gf_store_unlink_tmppath (volinfo->rb_shandle); -          gf_store_unlink_tmppath (volinfo->node_state_shandle);          gf_store_unlink_tmppath (volinfo->snapd.handle); @@ -1676,10 +1558,6 @@ glusterd_store_volinfo (glusterd_volinfo_t *volinfo, glusterd_volinfo_ver_ac_t a          if (ret)                  goto out; -        ret = glusterd_store_create_rbstate_shandle_on_absence (volinfo); -        if (ret) -                goto out; -          ret = glusterd_store_create_nodestate_sh_on_absence (volinfo);          if (ret)                  goto out; @@ -1695,10 +1573,6 @@ glusterd_store_volinfo (glusterd_volinfo_t *volinfo, glusterd_volinfo_ver_ac_t a                  goto out;          } -        ret = glusterd_store_perform_rbstate_store (volinfo); -        if (ret) -                goto out; -          ret = glusterd_store_perform_node_state_store (volinfo);          if (ret)                  goto out; @@ -2445,106 +2319,6 @@ out:          return ret;  } - -int32_t -glusterd_store_retrieve_rbstate (glusterd_volinfo_t *volinfo) -{ -        int32_t                   ret                   = -1; -        gf_store_iter_t           *iter                 = NULL; -        char                      *key                  = NULL; -        char                      *value                = NULL; -        char                      volpath[PATH_MAX]     = {0,}; -        glusterd_conf_t           *priv                 = NULL; -        char                      path[PATH_MAX]        = {0,}; -        gf_store_op_errno_t       op_errno              = GD_STORE_SUCCESS; -        xlator_t                 *this                  = NULL; - -        this = THIS; -        GF_ASSERT (this); -        priv = this->private; -        GF_ASSERT (priv); -        GF_ASSERT (volinfo); - -        GLUSTERD_GET_VOLUME_DIR(volpath, volinfo, priv); -        snprintf (path, sizeof (path), "%s/%s", volpath, -                  GLUSTERD_VOLUME_RBSTATE_FILE); - -        ret = gf_store_handle_retrieve (path, &volinfo->rb_shandle); - -        if (ret) -                goto out; - -        ret = gf_store_iter_new (volinfo->rb_shandle, &iter); - -        if (ret) -                goto out; - -        ret = gf_store_iter_get_next (iter, &key, &value, &op_errno); -        if (ret) -                goto out; - -        while (!ret) { -                if (!strncmp (key, GLUSTERD_STORE_KEY_RB_STATUS, -                              strlen (GLUSTERD_STORE_KEY_RB_STATUS))) { -                        volinfo->rep_brick.rb_status = atoi (value); -                } - -                if (volinfo->rep_brick.rb_status > GF_RB_STATUS_NONE) { -                        if (!strncmp (key, GLUSTERD_STORE_KEY_RB_SRC_BRICK, -                                      strlen (GLUSTERD_STORE_KEY_RB_SRC_BRICK))) { -                                ret = glusterd_brickinfo_new_from_brick (value, -                                                &volinfo->rep_brick.src_brick); -                                if (ret) -                                        goto out; -                        } else if (!strncmp (key, GLUSTERD_STORE_KEY_RB_DST_BRICK, -                                             strlen (GLUSTERD_STORE_KEY_RB_DST_BRICK))) { -                                ret = glusterd_brickinfo_new_from_brick (value, -                                                &volinfo->rep_brick.dst_brick); -                                if (ret) -                                        goto out; -                        } else if (!strncmp (key, GLUSTERD_STORE_KEY_RB_DST_PORT, -                                             strlen (GLUSTERD_STORE_KEY_RB_DST_PORT))) { -                                switch (volinfo->transport_type) { -                                case GF_TRANSPORT_RDMA: -                                volinfo->rep_brick.dst_brick->rdma_port = -                                                 atoi (value); -                                        break; - -                                case GF_TRANSPORT_TCP: -                                case GF_TRANSPORT_BOTH_TCP_RDMA: -                                volinfo->rep_brick.dst_brick->port = -                                                atoi (value); -                                        break; -                                } -                        } else if (!strncmp (key, GF_REPLACE_BRICK_TID_KEY, -                                             strlen (GF_REPLACE_BRICK_TID_KEY))) { -                                        gf_uuid_parse (value, -                                                    volinfo->rep_brick.rb_id); -                        } -                } - -                GF_FREE (key); -                GF_FREE (value); -                key = NULL; -                value = NULL; - -                ret = gf_store_iter_get_next (iter, &key, &value, &op_errno); -        } - -        if (op_errno != GD_STORE_EOF) -                goto out; - -        ret = gf_store_iter_destroy (iter); - -        if (ret) -                goto out; - -out: -        gf_log (this->name, GF_LOG_TRACE, "Returning with %d", ret); - -        return ret; -} -  int32_t  glusterd_store_retrieve_node_state (glusterd_volinfo_t *volinfo)  { @@ -3161,15 +2935,6 @@ glusterd_store_retrieve_volumes (xlator_t  *this, glusterd_snap_t *snap)                          goto out;                  } -                ret = glusterd_store_retrieve_rbstate (volinfo); -                if (ret) { -                        /* Backward compatibility */ -                        gf_log ("", GF_LOG_INFO, "Creating a new rbstate " -                                "for volume: %s.", entry->d_name); -                        ret = glusterd_store_create_rbstate_shandle_on_absence (volinfo); -                        ret = glusterd_store_perform_rbstate_store (volinfo); -                } -                  ret = glusterd_store_retrieve_node_state (volinfo);                  if (ret) {                          /* Backward compatibility */ diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 40248d34614..8209e779c52 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -2249,48 +2249,6 @@ glusterd_add_volume_to_dict (glusterd_volinfo_t *volinfo,                          goto out;          } -        memset (key, 0, sizeof (key)); -        snprintf (key, 256, "%s%d."GLUSTERD_STORE_KEY_RB_STATUS, prefix, count); -        ret = dict_set_int32 (dict, key, volinfo->rep_brick.rb_status); -        if (ret) -                goto out; - -        if (volinfo->rep_brick.rb_status > GF_RB_STATUS_NONE) { - -                memset (key, 0, sizeof (key)); -                snprintf (key, 256, "%s%d."GLUSTERD_STORE_KEY_RB_SRC_BRICK, -                          prefix, count); -                gf_asprintf (&src_brick, "%s:%s", -                             volinfo->rep_brick.src_brick->hostname, -                             volinfo->rep_brick.src_brick->path); -                ret = dict_set_dynstr (dict, key, src_brick); -                if (ret) -                        goto out; - -                memset (key, 0, sizeof (key)); -                snprintf (key, 256, "%s%d."GLUSTERD_STORE_KEY_RB_DST_BRICK, -                          prefix, count); -                gf_asprintf (&dst_brick, "%s:%s", -                             volinfo->rep_brick.dst_brick->hostname, -                             volinfo->rep_brick.dst_brick->path); -                ret = dict_set_dynstr (dict, key, dst_brick); -                if (ret) -                        goto out; - -                rb_id_str = gf_strdup (uuid_utoa (volinfo->rep_brick.rb_id)); -                if (!rb_id_str) { -                        ret = -1; -                        goto out; -                } - -                memset (key, 0, sizeof (key)); -                snprintf (key, sizeof (key), "%s%d.rb_id", prefix, count); -                ret = dict_set_dynstr (dict, key, rb_id_str); -                if (ret) -                        goto out; -                rb_id_str = NULL; -        } -          snprintf (pfx, sizeof (pfx), "%s%d", prefix, count);          ctx.dict = dict;          ctx.prefix = pfx; @@ -3300,58 +3258,6 @@ glusterd_import_volinfo (dict_t *peer_data, int count,          }          memset (key, 0, sizeof (key)); -        snprintf (key, 256, "%s%d."GLUSTERD_STORE_KEY_RB_STATUS, prefix, count); -        ret = dict_get_int32 (peer_data, key, &rb_status); -        if (ret) -                goto out; -        new_volinfo->rep_brick.rb_status = rb_status; - -        if (new_volinfo->rep_brick.rb_status > GF_RB_STATUS_NONE) { - -                memset (key, 0, sizeof (key)); -                snprintf (key, 256, "%s%d."GLUSTERD_STORE_KEY_RB_SRC_BRICK, -                          prefix, count); -                ret = dict_get_str (peer_data, key, &src_brick); -                if (ret) -                        goto out; - -                ret = glusterd_brickinfo_new_from_brick (src_brick, -                                        &new_volinfo->rep_brick.src_brick); -                if (ret) { -                        gf_log ("", GF_LOG_ERROR, "Unable to create" -                                " src brickinfo"); -                        goto out; -                } - -                memset (key, 0, sizeof (key)); -                snprintf (key, 256, "%s%d."GLUSTERD_STORE_KEY_RB_DST_BRICK, -                          prefix, count); -                ret = dict_get_str (peer_data, key, &dst_brick); -                if (ret) -                        goto out; - -                ret = glusterd_brickinfo_new_from_brick (dst_brick, -                                     &new_volinfo->rep_brick.dst_brick); -                if (ret) { -                        gf_log ("", GF_LOG_ERROR, "Unable to create" -                                " dst brickinfo"); -                        goto out; -                } - -                memset (key, 0, sizeof (key)); -                snprintf (key, sizeof (key), "%s%d.rb_id", prefix, count); -                ret = dict_get_str (peer_data, key, &rb_id_str); -                if (ret) { -                        /* This is not present in older glusterfs versions, -                         * so don't error out -                         */ -                        ret = 0; -                } else { -                        gf_uuid_parse (rb_id_str, new_volinfo->rep_brick.rb_id); -                } -        } - -        memset (key, 0, sizeof (key));          snprintf (key, sizeof (key), "%s%d", prefix, count);          ret = gd_import_volume_snap_details (peer_data, new_volinfo, key,                                               volname); @@ -5256,20 +5162,6 @@ glusterd_is_defrag_on (glusterd_volinfo_t *volinfo)          return (volinfo->rebal.defrag != NULL);  } -gf_boolean_t -glusterd_is_rb_ongoing (glusterd_volinfo_t *volinfo) -{ -        gf_boolean_t     ret = _gf_false; - -        GF_ASSERT (volinfo); - -        if (glusterd_is_rb_started (volinfo) || -            glusterd_is_rb_paused (volinfo)) -                ret = _gf_true; - -        return ret; -} -  int  glusterd_new_brick_validate (char *brick, glusterd_brickinfo_t *brickinfo,                               char *op_errstr, size_t len) @@ -5352,36 +5244,6 @@ out:          return ret;  } -int -glusterd_is_rb_started(glusterd_volinfo_t *volinfo) -{ -        gf_log ("", GF_LOG_DEBUG, -                "is_rb_started:status=%d", volinfo->rep_brick.rb_status); -        return (volinfo->rep_brick.rb_status == GF_RB_STATUS_STARTED); - -} - -int -glusterd_is_rb_paused ( glusterd_volinfo_t *volinfo) -{ -        gf_log ("", GF_LOG_DEBUG, -                "is_rb_paused:status=%d", volinfo->rep_brick.rb_status); - -        return (volinfo->rep_brick.rb_status == GF_RB_STATUS_PAUSED); -} - -inline int -glusterd_set_rb_status (glusterd_volinfo_t *volinfo, gf_rb_status_t status) -{ -        gf_log ("", GF_LOG_DEBUG, -                "setting status from %d to %d", -                volinfo->rep_brick.rb_status, -                status); - -        volinfo->rep_brick.rb_status = status; -        return 0; -} -  inline int  glusterd_rb_check_bricks (glusterd_volinfo_t *volinfo,                            glusterd_brickinfo_t *src, glusterd_brickinfo_t *dst) diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h index 15bbf2268f7..fcfddd5bffa 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-utils.h @@ -242,17 +242,7 @@ glusterd_volume_brickinfo_get (uuid_t uuid, char *hostname, char *path,  int  glusterd_brickinfo_get (uuid_t uuid, char *hostname, char *path,                         glusterd_brickinfo_t **brickinfo); -int -glusterd_is_rb_started (glusterd_volinfo_t *volinfo); - -int -glusterd_is_rb_paused (glusterd_volinfo_t *volinfo); -int -glusterd_set_rb_status (glusterd_volinfo_t *volinfo, gf_rb_status_t status); - -gf_boolean_t -glusterd_is_rb_ongoing (glusterd_volinfo_t *volinfo);  int  glusterd_rb_check_bricks (glusterd_volinfo_t *volinfo, diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 3c3e6e01d8e..1d29d50e13e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -1516,16 +1516,6 @@ glusterd_op_stage_stop_volume (dict_t *dict, char **op_errstr)                  }          } -        if (glusterd_is_rb_ongoing (volinfo)) { -                snprintf (msg, sizeof (msg), "Replace brick is in progress on " -                          "volume %s. Please retry after replace-brick " -                          "operation is committed or aborted", volname); -                gf_log (this->name, GF_LOG_WARNING, "replace-brick in progress " -                        "on volume %s", volname); -                ret = -1; -                goto out; -        } -          if (glusterd_is_defrag_on (volinfo)) {                  snprintf (msg, sizeof(msg), "rebalance session is "                            "in progress for the volume '%s'", volname); @@ -1533,14 +1523,6 @@ glusterd_op_stage_stop_volume (dict_t *dict, char **op_errstr)                  ret = -1;                  goto out;          } -        if (volinfo->rep_brick.rb_status != GF_RB_STATUS_NONE) { -                snprintf (msg, sizeof(msg), "replace-brick session is " -                          "in progress for the volume '%s'", volname); -                gf_log (this->name, GF_LOG_WARNING, "%s", msg); -                ret = -1; -                goto out; -        } -  out:          if (msg[0] != 0)                  *op_errstr = gf_strdup (msg); diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 5ad92a47177..812a4434415 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -291,10 +291,8 @@ struct glusterd_rebalance_ {  typedef struct glusterd_rebalance_ glusterd_rebalance_t;  struct glusterd_replace_brick_ { -        gf_rb_status_t          rb_status;          glusterd_brickinfo_t   *src_brick;          glusterd_brickinfo_t   *dst_brick; -        uuid_t                  rb_id;  };  typedef struct glusterd_replace_brick_ glusterd_replace_brick_t; @@ -361,7 +359,6 @@ struct glusterd_volinfo_ {                                                      distribute subvolume */          int                       port;          gf_store_handle_t        *shandle; -        gf_store_handle_t        *rb_shandle;          gf_store_handle_t        *node_state_shandle;          gf_store_handle_t        *quota_conf_shandle;  | 
