glusterd: volume-sync shouldn't validate volume-id
- volume sync would overwrite volume information on local node from the hostname supplied. This warning is provided to the user. - Also fixed a double free in volume-sync handler. Change-Id: Icc68d9d563fb50ca58d5880921f063692e1e6882 BUG: 865700 Signed-off-by: Krishnan Parthasarathi <kparthas@redhat.com> Reviewed-on: http://review.gluster.org/4188 Reviewed-by: Vijay Bellur <vbellur@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com>
This commit is contained in:
parent
8fd4aa7414
commit
cee1b62d01
@ -125,6 +125,11 @@ cli_cmd_sync_volume_cbk (struct cli_state *state, struct cli_cmd_word *word,
|
||||
int parse_error = 0;
|
||||
dict_t *dict = NULL;
|
||||
cli_local_t *local = NULL;
|
||||
gf_answer_t answer = GF_ANSWER_NO;
|
||||
const char *question = "Sync volume may make data "
|
||||
"inaccessible while the sync "
|
||||
"is in progress. Do you want "
|
||||
"to continue?";
|
||||
|
||||
if ((wordcount < 3) || (wordcount > 4)) {
|
||||
cli_usage_out (word->pattern);
|
||||
@ -159,6 +164,14 @@ cli_cmd_sync_volume_cbk (struct cli_state *state, struct cli_cmd_word *word,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!(state->mode & GLUSTER_MODE_SCRIPT)) {
|
||||
answer = cli_cmd_get_confirmation (state, question);
|
||||
if (GF_ANSWER_NO == answer) {
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
proc = &cli_rpc_prog->proctable[GLUSTER_CLI_SYNC_VOLUME];
|
||||
|
||||
frame = create_frame (THIS, THIS->ctx->pool);
|
||||
|
@ -1137,7 +1137,6 @@ glusterd_handle_sync_volume (rpcsvc_request_t *req)
|
||||
dict_t *dict = NULL;
|
||||
gf_cli_rsp cli_rsp = {0.};
|
||||
char msg[2048] = {0,};
|
||||
glusterd_volinfo_t *volinfo = NULL;
|
||||
char *volname = NULL;
|
||||
gf1_cli_sync_volume flags = 0;
|
||||
char *hostname = NULL;
|
||||
@ -1194,30 +1193,6 @@ glusterd_handle_sync_volume (rpcsvc_request_t *req)
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!flags) {
|
||||
ret = glusterd_volinfo_find (volname, &volinfo);
|
||||
if (!ret) {
|
||||
snprintf (msg, sizeof (msg), "please delete the "
|
||||
"volume: %s before sync", volname);
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = dict_set_dynmstr (dict, "volname", volname);
|
||||
if (ret) {
|
||||
gf_log ("", GF_LOG_ERROR, "volume name set failed");
|
||||
snprintf (msg, sizeof (msg), "volume name set failed");
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
if (glusterd_volume_count_get ()) {
|
||||
snprintf (msg, sizeof (msg), "please delete all the "
|
||||
"volumes before full sync");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
ret = glusterd_op_begin (req, GD_OP_SYNC_VOLUME, dict);
|
||||
|
||||
out:
|
||||
|
@ -785,9 +785,6 @@ glusterd_op_stage_sync_volume (dict_t *dict, char **op_errstr)
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = glusterd_validate_volume_id (dict, volinfo);
|
||||
if (ret)
|
||||
goto out;
|
||||
} else {
|
||||
ret = 0;
|
||||
}
|
||||
@ -2240,6 +2237,7 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
{
|
||||
int ret = -1;
|
||||
void *ctx = NULL;
|
||||
dict_t *dict = NULL;
|
||||
dict_t *req_dict = NULL;
|
||||
glusterd_op_t op = GD_OP_NONE;
|
||||
char *volname = NULL;
|
||||
@ -2271,10 +2269,10 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
}
|
||||
#undef GD_SYNC_OPCODE_KEY
|
||||
|
||||
dict = ctx;
|
||||
switch (op) {
|
||||
case GD_OP_CREATE_VOLUME:
|
||||
{
|
||||
dict_t *dict = ctx;
|
||||
++glusterfs_port;
|
||||
ret = dict_set_int32 (dict, "port",
|
||||
glusterfs_port);
|
||||
@ -2286,7 +2284,6 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
|
||||
case GD_OP_GSYNC_SET:
|
||||
{
|
||||
dict_t *dict = ctx;
|
||||
ret = glusterd_op_gsync_args_get (dict,
|
||||
&errstr,
|
||||
&volname,
|
||||
@ -2303,7 +2300,6 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
|
||||
case GD_OP_SET_VOLUME:
|
||||
{
|
||||
dict_t *dict = ctx;
|
||||
ret = dict_get_str (dict, "volname", &volname);
|
||||
if (ret) {
|
||||
gf_log (THIS->name, GF_LOG_CRITICAL,
|
||||
@ -2323,9 +2319,14 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
}
|
||||
break;
|
||||
|
||||
case GD_OP_SYNC_VOLUME:
|
||||
{
|
||||
dict_copy (dict, req_dict);
|
||||
break;
|
||||
}
|
||||
|
||||
case GD_OP_STATUS_VOLUME:
|
||||
{
|
||||
dict_t *dict = ctx;
|
||||
ret = dict_get_uint32 (dict, "cmd",
|
||||
&status_cmd);
|
||||
if (ret) {
|
||||
@ -2339,7 +2340,7 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*fall-through*/
|
||||
case GD_OP_DELETE_VOLUME:
|
||||
case GD_OP_START_VOLUME:
|
||||
case GD_OP_STOP_VOLUME:
|
||||
@ -2348,7 +2349,6 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
case GD_OP_RESET_VOLUME:
|
||||
case GD_OP_REMOVE_BRICK:
|
||||
case GD_OP_LOG_ROTATE:
|
||||
case GD_OP_SYNC_VOLUME:
|
||||
case GD_OP_QUOTA:
|
||||
case GD_OP_PROFILE_VOLUME:
|
||||
case GD_OP_REBALANCE:
|
||||
@ -2357,7 +2357,6 @@ glusterd_op_build_payload (dict_t **req, char **op_errstr, dict_t *op_ctx)
|
||||
case GD_OP_CLEARLOCKS_VOLUME:
|
||||
case GD_OP_DEFRAG_BRICK_VOLUME:
|
||||
{
|
||||
dict_t *dict = ctx;
|
||||
ret = dict_get_str (dict, "volname", &volname);
|
||||
if (ret) {
|
||||
gf_log (THIS->name, GF_LOG_CRITICAL,
|
||||
|
Loading…
x
Reference in New Issue
Block a user