summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd
diff options
context:
space:
mode:
authorPranith K <pranithk@gluster.com>2010-12-16 01:24:33 +0000
committerAnand V. Avati <avati@dev.gluster.com>2010-12-27 20:50:55 -0800
commit953f89d82f2c444719ba3150c9890c072a2e7fb3 (patch)
treeb5756f8638ae9b93cf77a141d08184ecb94928a5 /xlators/mgmt/glusterd
parente7512cbb171856a925b7db938da423b493339b00 (diff)
glusterd,cli: print single error message on failure
Signed-off-by: Pranith Kumar K <pranithk@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 1922 (Volume not present wrong message displayed on command line) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1922
Diffstat (limited to 'xlators/mgmt/glusterd')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c13
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-op-sm.c289
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.c8
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.h1
4 files changed, 209 insertions, 102 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index ab0a6831f..42b0efcd5 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -133,7 +133,6 @@ glusterd_handle_friend_req (rpcsvc_request_t *req, uuid_t uuid,
event->ctx = ctx;
ret = glusterd_friend_sm_inject_event (event);
-
if (ret) {
gf_log ("glusterd", GF_LOG_ERROR, "Unable to inject event %d, "
"ret = %d", event->event, ret);
@@ -810,8 +809,7 @@ glusterd_handle_create_volume (rpcsvc_request_t *req)
gf_cmd_log ("Volume create", "on volname: %s attempted", volname);
if ((ret = glusterd_check_volume_exists (volname))) {
- snprintf(err_str, 2048, "Volname %s already exists",
- volname);
+ snprintf(err_str, 2048, "Volume %s already exists", volname);
gf_log ("glusterd", GF_LOG_ERROR, "%s", err_str);
err_ret = 1;
goto out;
@@ -1074,8 +1072,7 @@ glusterd_handle_add_brick (rpcsvc_request_t *req)
}
if (!(ret = glusterd_check_volume_exists (volname))) {
- snprintf(err_str, 2048, "Volname %s does not exist",
- volname);
+ snprintf(err_str, 2048, "Volume %s does not exist", volname);
gf_log ("glusterd", GF_LOG_ERROR, "%s", err_str);
err_ret = -1;
goto out;
@@ -1338,7 +1335,7 @@ glusterd_handle_reset_volume (rpcsvc_request_t *req)
ret = glusterd_reset_volume (req, dict);
out:
- if (cli_req.volname)
+ if (cli_req.volname)
free (cli_req.volname);//malloced by xdr
return ret;
@@ -1454,7 +1451,7 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)
ret = glusterd_volinfo_find (cli_req.volname, &volinfo);
if (ret) {
- snprintf (err_str, 2048, "volname %s not found",
+ snprintf (err_str, 2048, "Volume %s does not exist",
cli_req.volname);
gf_log ("", GF_LOG_ERROR, "%s", err_str);
err_ret = 1;
@@ -1514,7 +1511,7 @@ glusterd_handle_remove_brick (rpcsvc_request_t *req)
ret = glusterd_volume_brickinfo_get_by_brick(brick, volinfo, &brickinfo);
if (ret) {
- snprintf(err_str, 2048," Incorrect brick %s for volname"
+ snprintf(err_str, 2048," Incorrect brick %s for volume"
" %s", brick, cli_req.volname);
gf_log ("", GF_LOG_ERROR, "%s", err_str);
err_ret = 1;
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
index b2f247a06..f0336c7b1 100644
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
@@ -332,6 +332,7 @@ glusterd_op_stage_create_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
char cmd_str[1024];
xlator_t *this = NULL;
glusterd_conf_t *priv = NULL;
+ char msg[2048] = {0};
GF_ASSERT (req);
@@ -370,9 +371,12 @@ glusterd_op_stage_create_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
exists = glusterd_check_volume_exists (volname);
if (exists) {
- gf_log ("", GF_LOG_ERROR, "Volume with name: %s exists",
- volname);
+ snprintf (msg, sizeof (msg), "Volume %s already exists",
+ volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
ret = -1;
+ goto out;
} else {
ret = 0;
}
@@ -504,7 +508,7 @@ glusterd_op_stage_start_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
exists = glusterd_check_volume_exists (volname);
if (!exists) {
- snprintf (msg, 2048, "Volume with name %s does not exist", volname);
+ snprintf (msg, 2048, "Volume %s does not exist", volname);
gf_log ("", GF_LOG_ERROR, "%s",
msg);
*op_errstr = gf_strdup (msg);
@@ -521,9 +525,9 @@ glusterd_op_stage_start_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {
ret = glusterd_resolve_brick (brickinfo);
if (ret) {
- gf_log ("", GF_LOG_ERROR, "Unable to resolve brick"
- " with hostname: %s, export: %s",
- brickinfo->hostname,brickinfo->path);
+ gf_log ("", GF_LOG_ERROR,
+ "Unable to resolve brick %s:%s",
+ brickinfo->hostname, brickinfo->path);
goto out;
}
@@ -567,7 +571,7 @@ glusterd_op_stage_stop_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
int flags = 0;
gf_boolean_t exists = _gf_false;
glusterd_volinfo_t *volinfo = NULL;
- char msg[2048] = {0,};
+ char msg[2048] = {0};
dict = dict_new ();
if (!dict)
@@ -580,11 +584,11 @@ glusterd_op_stage_stop_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
exists = glusterd_check_volume_exists (volname);
if (!exists) {
- snprintf (msg, 2048, "Volume with name %s does not exist", volname);
- gf_log ("", GF_LOG_ERROR, "%s",
- msg);
+ snprintf (msg, sizeof (msg), "Volume %s does not exist", volname);
+ gf_log ("", GF_LOG_ERROR, msg);
*op_errstr = gf_strdup (msg);
ret = -1;
+ goto out;
} else {
ret = 0;
}
@@ -618,12 +622,13 @@ out:
}
static int
-glusterd_op_stage_delete_volume (gd1_mgmt_stage_op_req *req)
+glusterd_op_stage_delete_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
{
int ret = 0;
char volname [1024] = {0,};
gf_boolean_t exists = _gf_false;
glusterd_volinfo_t *volinfo = NULL;
+ char msg[2048] = {0};
GF_ASSERT (req);
@@ -632,8 +637,10 @@ glusterd_op_stage_delete_volume (gd1_mgmt_stage_op_req *req)
exists = glusterd_check_volume_exists (volname);
if (!exists) {
- gf_log ("", GF_LOG_ERROR, "Volume with name %s does not exist",
- volname);
+ snprintf (msg, sizeof (msg), "Volume %s does not exist",
+ volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
ret = -1;
goto out;
} else {
@@ -648,9 +655,11 @@ glusterd_op_stage_delete_volume (gd1_mgmt_stage_op_req *req)
ret = glusterd_is_volume_started (volinfo);
if (!ret) {
- gf_log ("", GF_LOG_ERROR, "Volume %s has been started."
- "Volume needs to be stopped before deletion.",
- volname);
+ snprintf (msg, sizeof (msg), "Volume %s has been started."
+ "Volume needs to be stopped before deletion.",
+ volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
ret = -1;
goto out;
}
@@ -769,7 +778,7 @@ glusterd_op_stage_add_brick (gd1_mgmt_stage_op_req *req, char **op_errstr)
ret = glusterd_brickinfo_from_brick (brick, &brickinfo);
if (ret) {
gf_log ("", GF_LOG_ERROR, "Add-brick: Unable"
- " to get brickinfo");
+ " to get brickinfo");
goto out;
}
brick_alloc = _gf_true;
@@ -992,8 +1001,8 @@ glusterd_op_stage_replace_brick (gd1_mgmt_stage_op_req *req, char **op_errstr,
break;
case GF_REPLACE_OP_PAUSE:
if (glusterd_is_rb_paused (volinfo)) {
- gf_log ("", GF_LOG_ERROR, "Replace brick is already"
- " paused for volume ");
+ gf_log ("", GF_LOG_ERROR, "Replace brick is already "
+ "paused for volume ");
ret = -1;
goto out;
} else if (!glusterd_is_rb_started(volinfo)) {
@@ -1032,7 +1041,7 @@ glusterd_op_stage_replace_brick (gd1_mgmt_stage_op_req *req, char **op_errstr,
}
ret = glusterd_volume_brickinfo_get_by_brick (src_brick, volinfo,
- &src_brickinfo);
+ &src_brickinfo);
if (ret) {
snprintf (msg, sizeof (msg), "brick: %s does not exist in "
"volume: %s", src_brick, volname);
@@ -1136,12 +1145,17 @@ out:
}
static int
-glusterd_op_stage_log_filename (gd1_mgmt_stage_op_req *req)
+glusterd_op_stage_log_filename (gd1_mgmt_stage_op_req *req, char **op_errstr)
{
int ret = -1;
dict_t *dict = NULL;
char *volname = NULL;
gf_boolean_t exists = _gf_false;
+ char msg[2048] = {0};
+ char *path = NULL;
+ char hostname[2048] = {0};
+ char *brick = NULL;
+ glusterd_volinfo_t *volinfo = NULL;
GF_ASSERT (req);
@@ -1162,13 +1176,50 @@ glusterd_op_stage_log_filename (gd1_mgmt_stage_op_req *req)
}
exists = glusterd_check_volume_exists (volname);
- if (!exists) {
- gf_log ("", GF_LOG_ERROR, "Volume with name: %s not exists",
- volname);
+ ret = glusterd_volinfo_find (volname, &volinfo);
+ if (!exists || ret) {
+ snprintf (msg, sizeof (msg), "Volume %s does not exist",
+ volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
ret = -1;
goto out;
}
+ ret = dict_get_str (dict, "brick", &brick);
+ if (ret)
+ goto out;
+
+ if (strchr (brick, ':')) {
+ 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, msg);
+ *op_errstr = gf_strdup (msg);
+ goto out;
+ }
+ }
+
+ ret = dict_get_str (dict, "path", &path);
+ if (ret) {
+ gf_log ("", GF_LOG_ERROR, "path not found");
+ goto out;
+ }
+
+ ret = gethostname (hostname, sizeof (hostname));
+ if (ret) {
+ snprintf (msg, sizeof (msg), "Failed to get hostname, error:%s",
+ strerror (errno));
+ gf_log ("glusterd", GF_LOG_ERROR, "%s");
+ *op_errstr = gf_strdup (msg);
+ goto out;
+ }
+
+ ret = glusterd_brick_create_path (hostname, path, 0777, op_errstr);
+ if (ret)
+ goto out;
out:
if (dict)
dict_unref (dict);
@@ -1178,12 +1229,15 @@ out:
}
static int
-glusterd_op_stage_log_rotate (gd1_mgmt_stage_op_req *req)
+glusterd_op_stage_log_rotate (gd1_mgmt_stage_op_req *req, char **op_errstr)
{
int ret = -1;
dict_t *dict = NULL;
char *volname = NULL;
+ glusterd_volinfo_t *volinfo = NULL;
gf_boolean_t exists = _gf_false;
+ char msg[2048] = {0};
+ char *brick = NULL;
GF_ASSERT (req);
@@ -1204,13 +1258,42 @@ glusterd_op_stage_log_rotate (gd1_mgmt_stage_op_req *req)
}
exists = glusterd_check_volume_exists (volname);
+ ret = glusterd_volinfo_find (volname, &volinfo);
if (!exists) {
- gf_log ("", GF_LOG_ERROR, "Volume with name: %s not exists",
- volname);
+ snprintf (msg, sizeof (msg), "Volume %s does not exist",
+ volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
+ ret = -1;
+ goto out;
+ }
+
+ ret = glusterd_is_volume_started (volinfo);
+
+ if (ret) {
+ snprintf (msg, sizeof (msg), "Volume %s needs to be started before"
+ " log rotate.", volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
ret = -1;
goto out;
}
+ ret = dict_get_str (dict, "brick", &brick);
+ if (ret)
+ goto out;
+
+ if (strchr (brick, ':')) {
+ 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, msg);
+ *op_errstr = gf_strdup (msg);
+ goto out;
+ }
+ }
out:
if (dict)
dict_unref (dict);
@@ -1235,9 +1318,9 @@ glusterd_op_stage_set_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
char errstr[2048] = {0, };
glusterd_volinfo_t *volinfo = NULL;
dict_t *val_dict = NULL;
-
+
GF_ASSERT (req);
-
+
dict = dict_new ();
if (!dict)
goto out;
@@ -1245,7 +1328,7 @@ glusterd_op_stage_set_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
val_dict = dict_new();
if (!val_dict)
goto out;
-
+
ret = dict_unserialize (req->buf.buf_val, req->buf.buf_len, &dict);
if (ret) {
@@ -1263,10 +1346,9 @@ glusterd_op_stage_set_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
exists = glusterd_check_volume_exists (volname);
if (!exists) {
- gf_log ("", GF_LOG_ERROR, "Volume with name: %s "
- "does not exist", volname);
- snprintf (errstr, 2048, "Volume : %s does not exist",
+ snprintf (errstr, sizeof (errstr), "Volume %s does not exist",
volname);
+ gf_log ("", GF_LOG_ERROR, errstr);
*op_errstr = gf_strdup (errstr);
ret = -1;
goto out;
@@ -1304,19 +1386,18 @@ glusterd_op_stage_set_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
sprintf (str, "key%d", count);
ret = dict_get_str (dict, str, &key);
-
- if (ret)
+
+ if (ret)
break;
-
exists = glusterd_check_option_exists (key, &key_fixed);
if (exists == -1) {
ret = -1;
goto out;
}
if (!exists) {
- gf_log ("", GF_LOG_ERROR, "Option with name: %s "
- "does not exist", key);
+ gf_log ("", GF_LOG_ERROR, "Option with name: %s "
+ "does not exist", key);
ret = snprintf (errstr, 2048,
"option : %s does not exist",
key);
@@ -1324,17 +1405,16 @@ glusterd_op_stage_set_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
snprintf (errstr + ret, 2048 - ret,
"\nDid you mean %s?", key_fixed);
*op_errstr = gf_strdup (errstr);
-
- ret = -1;
- goto out;
+ ret = -1;
+ goto out;
}
sprintf (str, "value%d", count);
ret = dict_get_str (dict, str, &value);
-
+
if (ret) {
- gf_log ("", GF_LOG_ERROR, "invalid key,value pair"
- "in 'volume set'");
+ gf_log ("", GF_LOG_ERROR,
+ "invalid key,value pair in 'volume set'");
ret = -1;
goto out;
}
@@ -1344,8 +1424,8 @@ glusterd_op_stage_set_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
ret = dict_set_str (val_dict, key, value);
if (ret) {
- gf_log ("", GF_LOG_ERROR, "Unable to set the options"
- "in 'volume set'");
+ gf_log ("", GF_LOG_ERROR,
+ "Unable to set the options in 'volume set'");
ret = -1;
goto out;
}
@@ -1359,9 +1439,8 @@ glusterd_op_stage_set_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
*op_errstr = NULL;
ret = glusterd_validate_reconfopts (volinfo, val_dict, op_errstr);
if (ret) {
- gf_log ("glsuterd", GF_LOG_DEBUG,
- "Could not create temp volfile, some option failed: %s",
- *op_errstr);
+ gf_log ("glusterd", GF_LOG_DEBUG, "Could not create temp "
+ "volfile, some option failed: %s", *op_errstr);
goto out;
}
@@ -1384,21 +1463,22 @@ out:
gf_log ("glsuterd", GF_LOG_DEBUG,
"Error, Cannot Validate option :%s",
*op_errstr);
- }
- else
+ } else {
gf_log ("glsuterd", GF_LOG_DEBUG,
- "Error, Cannot Validate option");
+ "Error, Cannot Validate option");
+ }
}
return ret;
}
static int
-glusterd_op_stage_reset_volume (gd1_mgmt_stage_op_req *req)
+glusterd_op_stage_reset_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
{
int ret = 0;
dict_t *dict = NULL;
char *volname = NULL;
gf_boolean_t exists = _gf_false;
+ char msg[2048] = {0};
GF_ASSERT (req);
@@ -1423,16 +1503,17 @@ glusterd_op_stage_reset_volume (gd1_mgmt_stage_op_req *req)
exists = glusterd_check_volume_exists (volname);
if (!exists) {
- gf_log ("", GF_LOG_ERROR, "Volume with name: %s "
- "does not exist",
- volname);
+ snprintf (msg, sizeof (msg), "Volume %s does not "
+ "exist", volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
ret = -1;
goto out;
}
out:
- if (dict)
+ if (dict)
dict_unref (dict);
gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);
@@ -1768,8 +1849,8 @@ glusterd_op_stage_sync_volume (gd1_mgmt_stage_op_req *req, char **op_errstr)
if (!ret) {
exists = glusterd_check_volume_exists (volname);
if (!exists) {
- snprintf (msg, sizeof (msg), "volume: %s, "
- "doesn't exist", volname);
+ snprintf (msg, sizeof (msg), "Volume %s "
+ "does not exist", volname);
*op_errstr = gf_strdup (msg);
ret = -1;
goto out;
@@ -2376,7 +2457,8 @@ rb_mountpoint_mkdir (glusterd_volinfo_t *volinfo,
ret = mkdir (mount_point_path, 0777);
if (ret && (errno != EEXIST)) {
- gf_log ("", GF_LOG_DEBUG, "mkdir failed, errno: %d", errno);
+ gf_log ("", GF_LOG_DEBUG, "mkdir failed, errno: %d",
+ errno);
goto out;
}
@@ -3104,16 +3186,16 @@ glusterd_op_replace_brick (gd1_mgmt_stage_op_req *req, dict_t *rsp_dict)
}
if (ret) {
- gf_log ("", GF_LOG_CRITICAL, "Unable to cleanup "
- "dst brick");
+ gf_log ("", GF_LOG_CRITICAL,
+ "Unable to cleanup dst brick");
goto out;
}
ret = glusterd_nfs_server_stop ();
if (ret) {
- gf_log ("", GF_LOG_ERROR, "Unable to stop nfs"
- "server, ret: %d", ret);
+ gf_log ("", GF_LOG_ERROR,
+ "Unable to stop nfs server, ret: %d", ret);
}
ret = glusterd_op_perform_replace_brick (volinfo, src_brick,
@@ -3131,8 +3213,8 @@ glusterd_op_replace_brick (gd1_mgmt_stage_op_req *req, dict_t *rsp_dict)
ret = glusterd_check_generate_start_nfs (volinfo);
if (ret) {
- gf_log ("", GF_LOG_CRITICAL, "Failed to generate "
- " nfs volume file");
+ gf_log ("", GF_LOG_CRITICAL,
+ "Failed to generate nfs volume file");
}
ret = glusterd_store_update_volume (volinfo);
@@ -3157,7 +3239,8 @@ glusterd_op_replace_brick (gd1_mgmt_stage_op_req *req, dict_t *rsp_dict)
"Recieved pause - doing nothing");
ctx = glusterd_op_get_ctx (GD_OP_REPLACE_BRICK);
if (ctx) {
- ret = rb_do_operation_pause (volinfo, src_brickinfo, dst_brickinfo);
+ ret = rb_do_operation_pause (volinfo, src_brickinfo,
+ dst_brickinfo);
if (ret) {
gf_log ("", GF_LOG_ERROR,
"Pause operation failed");
@@ -3263,7 +3346,7 @@ glusterd_options_reset (glusterd_volinfo_t *volinfo)
if (ret) {
gf_log ("", GF_LOG_ERROR, "Unable to create volfile for"
- " 'volume set'");
+ " 'volume set'");
ret = -1;
goto out;
}
@@ -3284,7 +3367,7 @@ glusterd_options_reset (glusterd_volinfo_t *volinfo)
ret = 0;
out:
- gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);
+ gf_log ("", GF_LOG_DEBUG, "Returning %d", ret);
return ret;
}
@@ -3296,7 +3379,7 @@ glusterd_op_reset_volume (gd1_mgmt_stage_op_req *req)
int ret = -1;
char *volname = NULL;
dict_t *dict = NULL;
-
+
dict = dict_new ();
if (!dict)
goto out;
@@ -3319,13 +3402,15 @@ glusterd_op_reset_volume (gd1_mgmt_stage_op_req *req)
gf_log ("", GF_LOG_ERROR, "Unable to allocate memory");
goto out;
}
-
+
ret = glusterd_options_reset (volinfo);
out:
+ if (dict)
+ dict_unref (dict);
gf_log ("", GF_LOG_DEBUG, "'volume reset' returning %d", ret);
return ret;
-
+
}
static int
@@ -3395,8 +3480,8 @@ glusterd_op_set_volume (gd1_mgmt_stage_op_req *req)
ret = dict_get_str (dict, str, &value);
if (ret) {
- gf_log ("", GF_LOG_ERROR, "invalid key,value pair"
- "in 'volume set'");
+ gf_log ("", GF_LOG_ERROR,
+ "invalid key,value pair in 'volume set'");
ret = -1;
goto out;
}
@@ -3410,8 +3495,8 @@ glusterd_op_set_volume (gd1_mgmt_stage_op_req *req)
ret = -1;
if (ret) {
- gf_log ("", GF_LOG_ERROR, "Unable to set the options"
- "in 'volume set'");
+ gf_log ("", GF_LOG_ERROR,
+ "Unable to set the options in 'volume set'");
ret = -1;
goto out;
}
@@ -3432,7 +3517,7 @@ glusterd_op_set_volume (gd1_mgmt_stage_op_req *req)
if (ret) {
gf_log ("", GF_LOG_ERROR, "Unable to create volfile for"
- " 'volume set'");
+ " 'volume set'");
ret = -1;
goto out;
}
@@ -3648,6 +3733,7 @@ glusterd_op_log_filename (gd1_mgmt_stage_op_req *req)
struct stat stbuf = {0,};
int valid_brick = 0;
glusterd_brickinfo_t *tmpbrkinfo = NULL;
+ char* new_logdir = NULL;
GF_ASSERT (req);
@@ -3673,6 +3759,7 @@ glusterd_op_log_filename (gd1_mgmt_stage_op_req *req)
gf_log ("", GF_LOG_ERROR, "volname not found");
goto out;
}
+
ret = dict_get_str (dict, "path", &path);
if (ret) {
gf_log ("", GF_LOG_ERROR, "path not found");
@@ -3695,7 +3782,15 @@ glusterd_op_log_filename (gd1_mgmt_stage_op_req *req)
gf_log ("", GF_LOG_ERROR, "not a directory");
goto out;
}
- volinfo->logdir = gf_strdup (path);
+ new_logdir = gf_strdup (path);
+ if (!new_logdir) {
+ ret = -1;
+ gf_log ("", GF_LOG_ERROR, "Out of memory");
+ goto out;
+ }
+ if (volinfo->logdir)
+ GF_FREE (volinfo->logdir);
+ volinfo->logdir = new_logdir;
} else {
ret = glusterd_brickinfo_from_brick (brick, &tmpbrkinfo);
if (ret) {
@@ -3711,15 +3806,15 @@ glusterd_op_log_filename (gd1_mgmt_stage_op_req *req)
if (uuid_is_null (brickinfo->uuid)) {
ret = glusterd_resolve_brick (brickinfo);
+ if (ret)
+ goto out;
}
/* check if the brickinfo belongs to the 'this' machine */
if (uuid_compare (brickinfo->uuid, priv->uuid))
continue;
- if (brick &&
- (strcmp (tmpbrkinfo->hostname, brickinfo->hostname) ||
- strcmp (tmpbrkinfo->path,brickinfo->path)))
+ if (brick && strcmp (tmpbrkinfo->path,brickinfo->path))
continue;
valid_brick = 1;
@@ -3998,8 +4093,10 @@ glusterd_op_sync_volume (gd1_mgmt_stage_op_req *req, char **op_errstr,
if (!ret) {
ret = glusterd_volinfo_find (volname, &volinfo);
if (ret) {
- gf_log ("", GF_LOG_ERROR, "Volume with name: %s "
- "not exists", volname);
+ snprintf (msg, sizeof (msg), "Volume %s does not exist",
+ volname);
+ gf_log ("", GF_LOG_ERROR, msg);
+ *op_errstr = gf_strdup (msg);
goto out;
}
}
@@ -4561,6 +4658,10 @@ glusterd_op_send_cli_response (int32_t op, int32_t op_ret,
rsp.op_ret = op_ret;
rsp.op_errno = op_errno;
rsp.volname = "";
+ if (op_errstr)
+ rsp.op_errstr = op_errstr;
+ else
+ rsp.op_errstr = "";
cli_rsp = &rsp;
sfunc = gf_xdr_serialize_cli_delete_vol_rsp;
break;
@@ -4640,7 +4741,7 @@ glusterd_op_send_cli_response (int32_t op, int32_t op_ret,
sfunc = gf_xdr_serialize_cli_set_vol_rsp;
break;
}
-
+
case GD_MGMT_CLI_RESET_VOLUME:
{
gf_log ("", GF_LOG_DEBUG, "Return value to CLI");
@@ -4662,7 +4763,10 @@ glusterd_op_send_cli_response (int32_t op, int32_t op_ret,
gf1_cli_log_filename_rsp rsp = {0,};
rsp.op_ret = op_ret;
rsp.op_errno = op_errno;
- rsp.errstr = "";
+ if (op_errstr)
+ rsp.errstr = op_errstr;
+ else
+ rsp.errstr = "";
cli_rsp = &rsp;
sfunc = gf_xdr_serialize_cli_log_filename_rsp;
break;
@@ -4672,7 +4776,10 @@ glusterd_op_send_cli_response (int32_t op, int32_t op_ret,
gf1_cli_log_rotate_rsp rsp = {0,};
rsp.op_ret = op_ret;
rsp.op_errno = op_errno;
- rsp.errstr = "";
+ if (op_errstr)
+ rsp.errstr = op_errstr;
+ else
+ rsp.errstr = "";
cli_rsp = &rsp;
sfunc = gf_xdr_serialize_cli_log_rotate_rsp;
break;
@@ -4945,7 +5052,7 @@ glusterd_op_stage_validate (gd1_mgmt_stage_op_req *req, char **op_errstr,
break;
case GD_OP_DELETE_VOLUME:
- ret = glusterd_op_stage_delete_volume (req);
+ ret = glusterd_op_stage_delete_volume (req, op_errstr);
break;
case GD_OP_ADD_BRICK:
@@ -4962,7 +5069,7 @@ glusterd_op_stage_validate (gd1_mgmt_stage_op_req *req, char **op_errstr,
break;
case GD_OP_RESET_VOLUME:
- ret = glusterd_op_stage_reset_volume (req);
+ ret = glusterd_op_stage_reset_volume (req, op_errstr);
break;
case GD_OP_REMOVE_BRICK:
@@ -4970,11 +5077,11 @@ glusterd_op_stage_validate (gd1_mgmt_stage_op_req *req, char **op_errstr,
break;
case GD_OP_LOG_FILENAME:
- ret = glusterd_op_stage_log_filename (req);
+ ret = glusterd_op_stage_log_filename (req, op_errstr);
break;
case GD_OP_LOG_ROTATE:
- ret = glusterd_op_stage_log_rotate (req);
+ ret = glusterd_op_stage_log_rotate (req, op_errstr);
break;
case GD_OP_SYNC_VOLUME:
@@ -5466,12 +5573,14 @@ glusterd_op_free_ctx (glusterd_op_t op, void *ctx, gf_boolean_t ctx_free)
case GD_OP_SYNC_VOLUME:
case GD_OP_SET_VOLUME:
case GD_OP_START_VOLUME:
+ case GD_OP_RESET_VOLUME:
dict_unref (ctx);
break;
case GD_OP_DELETE_VOLUME:
GF_FREE (ctx);
break;
default:
+ GF_ASSERT (0);
break;
}
}
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c
index 27acaf271..5224a91d4 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c
@@ -1566,7 +1566,7 @@ validate_clientopts (glusterd_volinfo_t *volinfo,
}
int
-validate_brickopts (glusterd_volinfo_t *volinfo,
+validate_brickopts (glusterd_volinfo_t *volinfo,
char *brickinfo_path,
dict_t *val_dict,
char **op_errstr)
@@ -1595,12 +1595,12 @@ glusterd_validate_brickreconf (glusterd_volinfo_t *volinfo,
{
glusterd_brickinfo_t *brickinfo = NULL;
int ret = -1;
-
+
list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {
gf_log ("", GF_LOG_DEBUG,
"Validating %s", brickinfo->hostname);
- ret = validate_brickopts (volinfo, brickinfo->path, val_dict,
+ ret = validate_brickopts (volinfo, brickinfo->path, val_dict,
op_errstr);
if (ret)
goto out;
@@ -1609,7 +1609,7 @@ glusterd_validate_brickreconf (glusterd_volinfo_t *volinfo,
ret = 0;
out:
- return ret;
+ return ret;
}
int
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index 8853db813..9914e7be7 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -50,6 +50,7 @@
#define GLUSTERD_MAX_VOLUME_NAME 1000
#define DEFAULT_LOG_FILE_DIRECTORY DATADIR "/log/glusterfs"
#define GLUSTERD_TR_LOG_SIZE 50
+#define GLUSTERD_NAME "glusterd"
typedef enum glusterd_op_ {