diff options
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-snapshot.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot.c | 211 |
1 files changed, 102 insertions, 109 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index f3428ff03..39392c655 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -44,107 +44,6 @@ #endif int -glusterd_handle_snapshot_fn (rpcsvc_request_t *req) -{ - int32_t ret = 0; - dict_t *dict = NULL; - gf_cli_req cli_req = {{0},}; - glusterd_op_t cli_op = GD_OP_SNAP; - int type = 0; - glusterd_conf_t *conf = NULL; - char *host_uuid = NULL; - char err_str[2048] = {0,}; - xlator_t *this = NULL; - - GF_ASSERT (req); - - this = THIS; - GF_ASSERT (this); - conf = this->private; - GF_ASSERT (conf); - - ret = xdr_to_generic (req->msg[0], &cli_req, - (xdrproc_t)xdr_gf_cli_req); - if (ret < 0) { - req->rpc_err = GARBAGE_ARGS; - goto out; - } - - if (cli_req.dict.dict_len > 0) { - dict = dict_new (); - if (!dict) - goto out; - - 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"); - snprintf (err_str, sizeof (err_str), "Unable to decode " - "the command"); - goto out; - } - - dict->extra_stdfree = cli_req.dict.dict_val; - - host_uuid = gf_strdup (uuid_utoa(MY_UUID)); - if (host_uuid == NULL) { - snprintf (err_str, sizeof (err_str), "Failed to get " - "the uuid of local glusterd"); - ret = -1; - goto out; - } - ret = dict_set_dynstr (dict, "host-uuid", host_uuid); - if (ret) - goto out; - - } else { - gf_log (this->name, GF_LOG_ERROR, "request dict length is %d", - cli_req.dict.dict_len); - goto out; - } - - ret = dict_get_int32 (dict, "type", &type); - if (ret < 0) { - snprintf (err_str, sizeof (err_str), "Command type not found"); - gf_log (this->name, GF_LOG_ERROR, "%s", err_str); - goto out; - } - - switch (type) { - case GF_SNAP_OPTION_TYPE_CREATE: - ret = glusterd_mgmt_v3_initiate_all_phases (req, cli_op, dict); - break; - case GF_SNAP_OPTION_TYPE_LIST: - ret = glusterd_handle_snapshot_list (req, cli_op, dict); - break; - default: - gf_log (this->name, GF_LOG_ERROR, "Unkown snapshot request " - "type (%d)", type); - ret = -1; /* Failure */ - } - -out: - if (ret) { - GF_FREE (host_uuid); - if (err_str[0] == '\0') - snprintf (err_str, sizeof (err_str), - "Operation failed"); - ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, - dict, err_str); - } - - return ret; -} - -int -glusterd_handle_snapshot (rpcsvc_request_t *req) -{ - return glusterd_big_locked_handler (req, glusterd_handle_snapshot_fn); -} - -int glusterd_snapshot_prevalidate (dict_t *dict, char **op_errstr, dict_t *rsp_dict) { @@ -1733,7 +1632,7 @@ glusterd_build_snap_device_path (char *device, char *snapname) snap_device = gf_strdup (snap); if (!snap_device) { gf_log (this->name, GF_LOG_WARNING, "cannot copy the " - "snapshot device name (volname: %s, " + "snapshot device name " "snapname: %s)", snapname); goto out; } @@ -1825,7 +1724,6 @@ glusterd_snap_brick_create (char *device, glusterd_volinfo_t *snap_volinfo, char *mnt_pt = NULL; struct mntent *entry = NULL; FILE *mtab = NULL; - char msg[PATH_MAX] = {0, }; this = THIS; priv = this->private; @@ -1928,12 +1826,6 @@ glusterd_do_snap (glusterd_volinfo_t *volinfo, char *name, dict_t *dict, int32_t ret = -1; xlator_t *this = NULL; glusterd_conf_t *priv = NULL; - char volfile[PATH_MAX] = {0,}; - char exp_path[PATH_MAX] = {0,}; - char logfile[PATH_MAX] = {0,}; - int port = 0; - int rdma_port = 0; - char socketpath[PATH_MAX] = {0}; glusterd_brickinfo_t *brickinfo = NULL; char *device = NULL; char snapname[PATH_MAX] = {0, }; @@ -2325,3 +2217,104 @@ glusterd_snapshot (dict_t *dict, char **op_errstr, dict_t *rsp_dict) out: return ret; } + +int +glusterd_handle_snapshot_fn (rpcsvc_request_t *req) +{ + int32_t ret = 0; + dict_t *dict = NULL; + gf_cli_req cli_req = {{0},}; + glusterd_op_t cli_op = GD_OP_SNAP; + int type = 0; + glusterd_conf_t *conf = NULL; + char *host_uuid = NULL; + char err_str[2048] = {0,}; + xlator_t *this = NULL; + + GF_ASSERT (req); + + this = THIS; + GF_ASSERT (this); + conf = this->private; + GF_ASSERT (conf); + + ret = xdr_to_generic (req->msg[0], &cli_req, + (xdrproc_t)xdr_gf_cli_req); + if (ret < 0) { + req->rpc_err = GARBAGE_ARGS; + goto out; + } + + if (cli_req.dict.dict_len > 0) { + dict = dict_new (); + if (!dict) + goto out; + + 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"); + snprintf (err_str, sizeof (err_str), "Unable to decode " + "the command"); + goto out; + } + + dict->extra_stdfree = cli_req.dict.dict_val; + + host_uuid = gf_strdup (uuid_utoa(MY_UUID)); + if (host_uuid == NULL) { + snprintf (err_str, sizeof (err_str), "Failed to get " + "the uuid of local glusterd"); + ret = -1; + goto out; + } + ret = dict_set_dynstr (dict, "host-uuid", host_uuid); + if (ret) + goto out; + + } else { + gf_log (this->name, GF_LOG_ERROR, "request dict length is %d", + cli_req.dict.dict_len); + goto out; + } + + ret = dict_get_int32 (dict, "type", &type); + if (ret < 0) { + snprintf (err_str, sizeof (err_str), "Command type not found"); + gf_log (this->name, GF_LOG_ERROR, "%s", err_str); + goto out; + } + + switch (type) { + case GF_SNAP_OPTION_TYPE_CREATE: + ret = glusterd_mgmt_v3_initiate_all_phases (req, cli_op, dict); + break; + case GF_SNAP_OPTION_TYPE_LIST: + ret = glusterd_handle_snapshot_list (req, cli_op, dict); + break; + default: + gf_log (this->name, GF_LOG_ERROR, "Unkown snapshot request " + "type (%d)", type); + ret = -1; /* Failure */ + } + +out: + if (ret) { + GF_FREE (host_uuid); + if (err_str[0] == '\0') + snprintf (err_str, sizeof (err_str), + "Operation failed"); + ret = glusterd_op_send_cli_response (cli_op, ret, 0, req, + dict, err_str); + } + + return ret; +} + +int +glusterd_handle_snapshot (rpcsvc_request_t *req) +{ + return glusterd_big_locked_handler (req, glusterd_handle_snapshot_fn); +} |