diff options
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 61 | ||||
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 61 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/protocol-common.h | 1 | ||||
| -rw-r--r--[-rwxr-xr-x] | tests/bugs/bug-860297.t | 88 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-handler.c | 66 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-hooks.c | 1 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 16 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-rpc-ops.c | 1 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 116 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.h | 6 | 
10 files changed, 7 insertions, 410 deletions
diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index f1526abaeb5..4dcb99ce26e 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1790,62 +1790,6 @@ out:          return ret;  } -int -cli_cmd_volume_label_cbk (struct cli_state *state, struct cli_cmd_word *word, -                          const char **words, int wordcount) -{ -        int                             ret = -1; -        rpc_clnt_procedure_t            *proc = NULL; -        call_frame_t                    *frame = NULL; -        dict_t                          *options = NULL; -        int                             sent = 0; -        int                             parse_error = 0; -        cli_local_t                     *local = NULL; - -        frame = create_frame (THIS, THIS->ctx->pool); -        if (!frame) -                goto out; - -        if (wordcount != 4) { -                cli_usage_out (word->pattern); -                parse_error = 1; -                goto out; -        } - -        options = dict_new(); -        if (!options) { -                cli_out ("Could not allocate dict for label_volume"); -                goto out; -        } - -        ret = dict_set_str (options, "volname", (char *)words[2]); -        if (ret) -                goto out; - -        ret = dict_set_str (options, "brick", (char *)words[3]); -        if (ret) -                goto out; - -        proc = &cli_rpc_prog->proctable[GLUSTER_CLI_LABEL_VOLUME]; - -        CLI_LOCAL_INIT (local, words, frame, options); - -        if (proc->fn) { -                ret = proc->fn (frame, THIS, options); -        } - -out: -        if (ret) { -                cli_cmd_sent_status_get (&sent); -                if ((sent == 0) && (parse_error = 0)) -                        cli_out ("Volume label failed"); -        } - -        CLI_STACK_DESTROY (frame); - -        return ret; -} -  struct cli_cmd volume_cmds[] = {          { "volume info [all|<VOLNAME>]",            cli_cmd_volume_info_cbk, @@ -1956,11 +1900,6 @@ struct cli_cmd volume_cmds[] = {            "Clear locks held on path"          }, -        {"volume label <VOLNAME> <BRICK>", -         cli_cmd_volume_label_cbk, -         "Add a volume label to an empty replacement brick" -        }, -          { NULL, NULL, NULL }  }; diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index e772137ed3e..da239b51ec3 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -6253,66 +6253,6 @@ out:          return ret;  } -int32_t -gf_cli_label_volume_cbk (struct rpc_req *req, struct iovec *iov, int count, -                         void *myframe) -{ -        gf_cli_rsp                      rsp = {0,}; -        int                             ret = -1; -        dict_t                          *dict = NULL; - -        if (-1 == req->rpc_status) -                goto out; -        ret = xdr_to_generic (*iov, &rsp, -                              (xdrproc_t)xdr_gf_cli_rsp); -        if (ret < 0) { - -                gf_log ("cli", GF_LOG_ERROR, "XDR decoding failed"); -                goto out; -        } -        gf_log ("cli", GF_LOG_DEBUG, "Received response to label"); - -        if (rsp.op_ret) { -                cli_err ("Volume label unsuccessful"); -                cli_err ("%s", rsp.op_errstr); - -        } else { -                cli_out ("Volume label successful"); - -        } - -        ret = rsp.op_ret; - -out: -        if (dict) -                dict_unref (dict); -        cli_cmd_broadcast_response (ret); -        return ret; -} - -int32_t -gf_cli_label_volume (call_frame_t *frame, xlator_t *this, void *data) -{ -        gf_cli_req                      req = {{0,}}; -        dict_t                          *options = NULL; -        int                             ret = -1; - -        if (!frame || !this || !data) -                goto out; - -        options = data; - -        ret = cli_to_glusterd (&req, frame, gf_cli_label_volume_cbk, -                               (xdrproc_t) xdr_gf_cli_req, options, -                               GLUSTER_CLI_LABEL_VOLUME, this, cli_rpc_prog, -                               NULL); -out: -        gf_log ("cli", GF_LOG_DEBUG, "Returning %d", ret); - -        GF_FREE (req.dict.dict_val); -        return ret; -} -  int  cli_to_glusterd (gf_cli_req *req, call_frame_t *frame,                   fop_cbk_fn_t cbkfn, xdrproc_t xdrproc, dict_t *dict, @@ -6424,7 +6364,6 @@ struct rpc_clnt_procedure gluster_cli_actors[GLUSTER_CLI_MAXVALUE] = {  #ifdef HAVE_BD_XLATOR          [GLUSTER_CLI_BD_OP]            = {"BD_OP", gf_cli_bd_op},  #endif -        [GLUSTER_CLI_LABEL_VOLUME]     = {"LABEL_VOLUME", gf_cli_label_volume},  };  struct rpc_clnt_program cli_prog = { diff --git a/rpc/rpc-lib/src/protocol-common.h b/rpc/rpc-lib/src/protocol-common.h index 1f30d432259..97017e5fe3c 100644 --- a/rpc/rpc-lib/src/protocol-common.h +++ b/rpc/rpc-lib/src/protocol-common.h @@ -155,7 +155,6 @@ enum gluster_cli_procnum {          GLUSTER_CLI_CLRLOCKS_VOLUME,          GLUSTER_CLI_UUID_RESET,          GLUSTER_CLI_BD_OP, -        GLUSTER_CLI_LABEL_VOLUME,          GLUSTER_CLI_MAXVALUE,  }; diff --git a/tests/bugs/bug-860297.t b/tests/bugs/bug-860297.t index fa1b1ff285a..2a3ca7a7a6c 100755..100644 --- a/tests/bugs/bug-860297.t +++ b/tests/bugs/bug-860297.t @@ -1,87 +1,13 @@  #!/bin/bash -  . $(dirname $0)/../include.rc -cleanup - -function recreate { -	# The rm is necessary so we don't get fooled by leftovers from old runs. -	rm -rf $1 && mkdir -p $1 -} - -function count_bricks { -	local count -	local pid -	count=0 -	for pid in /var/lib/glusterd/vols/${1}/run/*pid; do -		if kill -0 $(cat $pid); then -			count=$((count+1)) -		fi -	done -	echo $count -} +cleanup;  TEST glusterd  TEST pidof glusterd -TEST $CLI volume info; - -## Start and create a volume -TEST recreate ${B0}/${V0}-0 -TEST recreate ${B0}/${V0}-1 -TEST $CLI volume create $V0 replica 2 $H0:$B0/${V0}-{0,1} - -function volinfo_field() -{ -    local vol=$1; -    local field=$2; - -    $CLI volume info $vol | grep "^$field: " | sed 's/.*: //'; -} - - -## Verify volume is created -EXPECT "$V0" volinfo_field $V0 'Volume Name'; -EXPECT 'Created' volinfo_field $V0 'Status'; - -## Start volume and verify that all bricks start. -TEST $CLI volume start $V0; -EXPECT 'Started' volinfo_field $V0 'Status'; -EXPECT 2 count_bricks $V0 -TEST $CLI volume stop $V0 - -# Nuke one of the bricks and make sure it *doesn't* start. -TEST recreate ${B0}/${V0}-1 -# We can't do the usual TEST/startup thing here because of another bug.  If -# a server fails to start a brick, it won't start any others either.  Since -# all of our bricks in testing are on one server, that means no bricks start -# and so the volume doesn't start either.  Changing the order etc. doesn't -# help, because the attempted startup order is non-deterministic.  Instead, -# we just don't rely on whether or not the volume starts; the brick count is -# sufficient for our purposes. -$CLI volume start $V0; -EXPECT 1 count_bricks $V0 -# If we can't depend on the volume starting, we can't depend on it stopping -# either. -$CLI volume stop $V0 - -# Label the recreated brick and make sure it starts now. -TEST $CLI volume label $V0 ${H0}:${B0}/${V0}-1 -TEST $CLI volume start $V0; -EXPECT 'Started' volinfo_field $V0 'Status'; -EXPECT 2 count_bricks $V0 - -# Make sure we can mount and use the volume. -TEST glusterfs --volfile-server=$H0 --volfile-id=$V0 $M0 -TEST dd if=/dev/zero of=$M0/block bs=4k count=1 - -if [ "$EXIT_EARLY" = "1" ]; then -	exit 0; -fi - -## Finish up -TEST umount $M0 -TEST $CLI volume stop $V0; -EXPECT 'Stopped' volinfo_field $V0 'Status'; -TEST $CLI volume delete $V0; -TEST ! $CLI volume info $V0; - +TEST $CLI volume info +TEST $CLI volume create $V0 $H0:$B0/brick1 +setfattr -x trusted.glusterfs.volume-id $B0/brick1 +## If Extended attribute trusted.glusterfs.volume-id is not present +## then volume should not be able to start +TEST ! $CLI volume start $V0;  cleanup; diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c index 9bbfdba8bd1..673bfaeb70f 100644 --- a/xlators/mgmt/glusterd/src/glusterd-handler.c +++ b/xlators/mgmt/glusterd/src/glusterd-handler.c @@ -2935,69 +2935,6 @@ out:  }  int -glusterd_handle_cli_label_volume (rpcsvc_request_t *req) -{ -        int32_t                         ret = -1; -        gf_cli_req                      cli_req = {{0,}}; -        glusterd_op_t                   cli_op = GD_OP_LABEL_VOLUME; -        char                            *volname = NULL; -        dict_t                          *dict = NULL; - -        GF_ASSERT (req); - -        ret = -1; -        if (!xdr_to_generic (req->msg[0], &cli_req, -                             (xdrproc_t)xdr_gf_cli_req)) { -                req->rpc_err = GARBAGE_ARGS; -                goto out; -        } - -        if (cli_req.dict.dict_len) { -                dict  = dict_new (); - -                ret = dict_unserialize (cli_req.dict.dict_val, -                                        cli_req.dict.dict_len, -                                        &dict); -                if (ret < 0) { -                        gf_log (THIS->name, GF_LOG_ERROR, -                                "failed to unserialize req-buffer to" -                                " dictionary"); -                        goto out; -                } - -        } else { -                ret = -1; -                gf_log (THIS->name, GF_LOG_ERROR, "Empty cli request."); -                goto out; -        } - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) { -                gf_log (THIS->name, GF_LOG_ERROR, "failed to get volname"); -                goto out; -        } - -        gf_log (THIS->name, GF_LOG_INFO, "Received label volume req " -                "for volume %s", volname); - -        ret = glusterd_op_begin (req, cli_op, dict); - -out: -        glusterd_friend_sm (); -        glusterd_op_sm (); - -        if (ret) { -                ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, -                                                     dict, "operation failed"); -                if (dict) -                        dict_unref (dict); -        } -        free (cli_req.dict.dict_val); - -        return ret; -} - -int  glusterd_brick_rpc_notify (struct rpc_clnt *rpc, void *mydata,                            rpc_clnt_event_t event,                            void *data) @@ -3302,9 +3239,6 @@ rpcsvc_actor_t gd_svc_cli_actors[] = {  #ifdef HAVE_BD_XLATOR          [GLUSTER_CLI_BD_OP]       = {"BD_OP", GLUSTER_CLI_BD_OP, glusterd_handle_cli_bd_op, NULL, 0},  #endif -        [GLUSTER_CLI_LABEL_VOLUME] = {"LABEL_VOLUME", GLUSTER_CLI_LABEL_VOLUME, -                                      glusterd_handle_cli_label_volume, NULL, -                                      0},  };  struct rpcsvc_program gd_svc_cli_prog = { diff --git a/xlators/mgmt/glusterd/src/glusterd-hooks.c b/xlators/mgmt/glusterd/src/glusterd-hooks.c index 543fdc1e66f..a61e1e85f2d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-hooks.c +++ b/xlators/mgmt/glusterd/src/glusterd-hooks.c @@ -59,7 +59,6 @@ char glusterd_hook_dirnames[GD_OP_MAX][256] =          [GD_OP_LIST_VOLUME]             = EMPTY,          [GD_OP_CLEARLOCKS_VOLUME]       = EMPTY,          [GD_OP_DEFRAG_BRICK_VOLUME]     = EMPTY, -        [GD_OP_LABEL_VOLUME]            = EMPTY,  };  #undef EMPTY diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 66b58eca49c..48ae5b660db 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -2373,7 +2373,6 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)  #ifdef HAVE_BD_XLATOR                  case GD_OP_BD_OP:  #endif -                case GD_OP_LABEL_VOLUME:                          {                                  ret = dict_get_str (dict, "volname", &volname);                                  if (ret) { @@ -3503,23 +3502,15 @@ glusterd_op_stage_validate (glusterd_op_t op, dict_t *dict, char **op_errstr,                          ret = glusterd_op_stage_statedump_volume (dict,                                                                    op_errstr);                          break; -                  case GD_OP_CLEARLOCKS_VOLUME:                          ret = glusterd_op_stage_clearlocks_volume (dict,                                                                     op_errstr);                          break; -  #ifdef HAVE_BD_XLATOR                  case GD_OP_BD_OP:                          ret = glusterd_op_stage_bd (dict, op_errstr);                          break; -  #endif - -                case GD_OP_LABEL_VOLUME: -                        ret = glusterd_op_stage_label_volume (dict, op_errstr); -                        break; -                  default:                          gf_log ("", GF_LOG_ERROR, "Unknown op %d",                                  op); @@ -3615,17 +3606,11 @@ glusterd_op_commit_perform (glusterd_op_t op, dict_t *dict, char **op_errstr,                  case GD_OP_CLEARLOCKS_VOLUME:                          ret = glusterd_op_clearlocks_volume (dict, op_errstr);                          break; -  #ifdef HAVE_BD_XLATOR                  case GD_OP_BD_OP:                          ret = 0;                          break;  #endif - -                case GD_OP_LABEL_VOLUME: -                        ret = glusterd_op_label_volume (dict, op_errstr); -                        break; -                  default:                          gf_log ("", GF_LOG_ERROR, "Unknown op %d",                                  op); @@ -5401,7 +5386,6 @@ glusterd_op_free_ctx (glusterd_op_t op, void *ctx)  #ifdef HAVE_BD_XLATOR                  case GD_OP_BD_OP:  #endif -                case GD_OP_LABEL_VOLUME:                          dict_unref (ctx);                          break;                  default: diff --git a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c index 2b3e7b8e771..21fad7e93a2 100644 --- a/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-rpc-ops.c @@ -140,7 +140,6 @@ glusterd_op_send_cli_response (glusterd_op_t op, int32_t op_ret,          case GD_OP_CLEARLOCKS_VOLUME:          case GD_OP_HEAL_VOLUME:          case GD_OP_BD_OP: -        case GD_OP_LABEL_VOLUME:          {                  /*nothing specific to be done*/                  break; diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c index 9ddeedb1027..263c8bf013b 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c @@ -1241,52 +1241,6 @@ out:          return ret;  } -int -glusterd_op_stage_label_volume (dict_t *dict, char **op_errstr) -{ -        int                                     ret = -1; -        char                                    *volname = NULL; -        glusterd_volinfo_t                      *volinfo = NULL; -        gf_boolean_t                            exists = _gf_false; -        char                                    msg[2048] = {0}; -        char                                    *brick = NULL; - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "Unable to get volume name"); -                goto out; -        } - -        exists = glusterd_check_volume_exists (volname); -        ret = glusterd_volinfo_find (volname, &volinfo); -        if (!exists) { -                snprintf (msg, sizeof (msg), "Volume %s does not exist", -                          volname); -                gf_log ("", GF_LOG_ERROR, "%s", msg); -                *op_errstr = gf_strdup (msg); -                ret = -1; -                goto out; -        } - -        ret = dict_get_str (dict, "brick", &brick); -        if (ret) { -                goto out; -        } - -        ret = glusterd_volume_brickinfo_get_by_brick (brick, volinfo, NULL); -        if (ret) { -                snprintf (msg, sizeof (msg), "Incorrect brick %s " -                          "for volume %s", brick, volname); -                gf_log ("", GF_LOG_ERROR, "%s", msg); -                *op_errstr = gf_strdup (msg); -                goto out; -        } -out: -        gf_log ("", GF_LOG_DEBUG, "Returning %d", ret); - -        return ret; -} -  #ifdef HAVE_BD_XLATOR  int  glusterd_op_stage_bd (dict_t *dict, char **op_errstr) @@ -2099,73 +2053,3 @@ out:          return ret;  } - -int -glusterd_op_label_volume (dict_t *dict, char **op_errstr) -{ -        int                   ret                = -1; -        glusterd_conf_t      *priv               = NULL; -        glusterd_volinfo_t   *volinfo            = NULL; -        glusterd_brickinfo_t *brickinfo          = NULL; -        xlator_t             *this               = NULL; -        char                 *volname            = NULL; -        char                 *brick              = NULL; -        glusterd_brickinfo_t *tmpbrkinfo         = NULL; - -        this = THIS; -        GF_ASSERT (this); -        priv = this->private; -        GF_ASSERT (priv); - -        ret = dict_get_str (dict, "volname", &volname); -        if (ret) { -                gf_log ("", GF_LOG_ERROR, "volname not found"); -                goto out; -        } - -        ret = dict_get_str (dict, "brick", &brick); -        /* If no brick is specified, do log-rotate for -           all the bricks in the volume */ -        if (ret) { -                gf_log ("glusterd", GF_LOG_ERROR, "no brick specified"); -                goto out; -        } - -        ret = glusterd_brickinfo_new_from_brick (brick, &tmpbrkinfo); -        if (ret) { -                gf_log ("glusterd", GF_LOG_ERROR, -                        "cannot get brickinfo from brick"); -                goto out; -        } - -        ret = glusterd_volinfo_find (volname, &volinfo); -        if (ret) -                goto out; - -        ret = -1; -        list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) { -                if (uuid_compare (brickinfo->uuid, MY_UUID)) -                        continue; - -                if ((strcmp (tmpbrkinfo->hostname, brickinfo->hostname) || -                     strcmp (tmpbrkinfo->path,brickinfo->path))) -                        continue; - -                ret = sys_lsetxattr (brickinfo->path, GF_XATTR_VOL_ID_KEY, -                                     volinfo->volume_id, -                                     sizeof(volinfo->volume_id), XATTR_CREATE); -                if (ret) { -                        gf_log ("glusterd", GF_LOG_ERROR, -                                "failed to set %s on %s: %s", -                                GF_XATTR_VOL_ID_KEY, brickinfo->path, -                                strerror(errno)); -                } -                break; -        } - -out: -        if (tmpbrkinfo) -                glusterd_brickinfo_delete (tmpbrkinfo); - -        return ret; -} diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 7152bd6a26a..66adff741bf 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -79,7 +79,6 @@ typedef enum glusterd_op_ {          GD_OP_CLEARLOCKS_VOLUME,          GD_OP_DEFRAG_BRICK_VOLUME,          GD_OP_BD_OP, -        GD_OP_LABEL_VOLUME,          GD_OP_MAX,  } glusterd_op_t; @@ -641,7 +640,6 @@ int32_t glusterd_op_begin (rpcsvc_request_t *req, glusterd_op_t op, void *ctx);  int glusterd_handle_cli_statedump_volume (rpcsvc_request_t *req);  int glusterd_handle_cli_clearlocks_volume (rpcsvc_request_t *req); -int glusterd_handle_cli_label_volume (rpcsvc_request_t *req);  int glusterd_handle_defrag_start (glusterd_volinfo_t *volinfo, char *op_errstr,                                    size_t len, int cmd, defrag_cbk_fn_t cbk); @@ -687,10 +685,6 @@ int glusterd_op_statedump_volume (dict_t *dict, char **op_errstr);  int glusterd_op_stage_clearlocks_volume (dict_t *dict, char **op_errstr);  int glusterd_op_clearlocks_volume (dict_t *dict, char **op_errstr); - -int glusterd_op_stage_label_volume (dict_t *dict, char **op_errstr); -int glusterd_op_label_volume (dict_t *dict, char **op_errstr); -  int glusterd_op_stage_bd (dict_t *dict, char **op_errstr);  /* misc */  | 
