diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-snapshot.c | 188 |
1 files changed, 26 insertions, 162 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c index 58e423aab1c..a4c60a87d9e 100644 --- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c +++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c @@ -3099,155 +3099,15 @@ glusterd_handle_snapshot_status (rpcsvc_request_t *req, glusterd_op_t op, dict_t *dict, char *err_str, size_t len) { int ret = -1; - char *volname = NULL; - char *snapname = NULL; - char *buf = NULL; - glusterd_conf_t *conf = NULL; xlator_t *this = NULL; - int32_t cmd = -1; - int i = 0; - dict_t *voldict = NULL; - char key[PATH_MAX] = ""; - glusterd_volinfo_t *volinfo = NULL; - glusterd_snap_t *snap = NULL; - glusterd_volinfo_t *snap_volinfo = NULL; this = THIS; GF_ASSERT (this); - conf = this->private; - GF_ASSERT (conf); GF_ASSERT (req); GF_ASSERT (dict); GF_ASSERT (err_str); - ret = dict_get_int32 (dict, "cmd", &cmd); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, "Could not get status type"); - goto out; - } - switch (cmd) { - case GF_SNAP_STATUS_TYPE_ALL: - { - /* IF we give "gluster snapshot status" - * then lock is held on all snaps. - * This is the place where necessary information - * (snapname and snapcount)is populated in dictionary - * for locking. - */ - ++i; - list_for_each_entry (snap, &conf->snapshots, snap_list) - { - snprintf (key, sizeof (key), "snapname%d", i); - buf = gf_strdup (snap->snapname); - if (!buf) { - ret = -1; - goto out; - } - ret = dict_set_dynstr (dict, key, buf); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, - "Could not save snapname (%s) " - "in the dictionary", - snap->snapname); - GF_FREE (buf); - goto out; - } - - buf = NULL; - i++; - } - - ret = dict_set_int32 (dict, "snapcount", i - 1); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, "Could not " - "save snapcount in the dictionary"); - goto out; - } - break; - } - - case GF_SNAP_STATUS_TYPE_SNAP: - { - /* IF we give "gluster snapshot status <snapname>" - * then lock is held on single snap. - * This is the place where necessary information - * (snapname)is populated in dictionary - * for locking. - */ - ret = dict_get_str (dict, "snapname", &snapname); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, - "Failed to fetch snap name"); - goto out; - } - - snap = glusterd_find_snap_by_name (snapname); - if (!snap) { - snprintf (err_str, len, "Snap (%s)" - "does not exist", snapname); - gf_log(this->name, GF_LOG_ERROR, - "%s", err_str); - ret = -1; - goto out; - } - break; - } - case GF_SNAP_STATUS_TYPE_VOL: - ret = dict_get_str (dict, "volname", &volname); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, - "Failed to fetch volname"); - goto out; - } - - ret = glusterd_volinfo_find (volname, &volinfo); - if (ret) { - snprintf (err_str, len, "Volume (%s) " - "does not exist", volname); - gf_log (this->name, GF_LOG_ERROR, - "%s", err_str); - goto out; - } - - i = 1; - list_for_each_entry (snap_volinfo, - &volinfo->snap_volumes, snapvol_list) { - snprintf (key, sizeof (key), "snapname%d", i); - - buf = gf_strdup - (snap_volinfo->snapshot->snapname); - if (!buf) { - ret = -1; - goto out; - } - - ret = dict_set_dynstr (dict, key, buf); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, - "Could not save snapname"); - GF_FREE (buf); - goto out; - } - - buf = NULL; - i++; - } - - ret = dict_set_int32 (dict, "snapcount", i-1); - if (ret) { - gf_log (this->name, GF_LOG_ERROR, - "Could not save snapcount"); - goto out; - } - break; - default: - { - gf_log (this->name, GF_LOG_ERROR, "Unknown type"); - ret = -1; - goto out; - } - } ret = glusterd_mgmt_v3_initiate_snap_phases (req, op, dict); if (ret) { @@ -3257,11 +3117,7 @@ glusterd_handle_snapshot_status (rpcsvc_request_t *req, glusterd_op_t op, } ret = 0; - out: - if (voldict) { - dict_unref (voldict); - } return ret; } @@ -4286,7 +4142,7 @@ glusterd_snapshot_status_prevalidate (dict_t *dict, char **op_errstr, goto out; } - ret = dict_get_int32 (dict, "cmd", &cmd); + ret = dict_get_int32 (dict, "status-cmd", &cmd); if (ret) { gf_log (this->name, GF_LOG_ERROR, "Could not fetch status cmd"); @@ -4331,7 +4187,7 @@ glusterd_snapshot_status_prevalidate (dict_t *dict, char **op_errstr, ret = glusterd_volinfo_find (volname, &volinfo); if (ret) { - ret = gf_asprintf (op_errstr, "Volume (%s)" + ret = gf_asprintf (op_errstr, "Volume (%s) " "not found", volname); if (ret < 0) { goto out; @@ -5616,19 +5472,20 @@ glusterd_get_snap_status_of_volume (char **op_errstr, dict_t *rsp_dict, list_for_each_entry_safe (snap_volinfo, temp_volinfo, &volinfo->snap_volumes, snapvol_list) { - ret = snprintf (key, sizeof (key), "status.snap%d", i); + ret = snprintf (key, sizeof (key), + "status.snap%d.snapname", i); if (ret < 0) { goto out; } - ret = glusterd_get_each_snap_object_status (op_errstr, - rsp_dict, snap_volinfo->snapshot, key); - + ret = dict_set_dynstr_with_alloc (rsp_dict, key, + snap_volinfo->snapshot->snapname); if (ret) { - gf_log (this->name, GF_LOG_ERROR, "Function : " - "glusterd_get_single_snap_status failed"); + gf_log (this->name, GF_LOG_ERROR, "Could not save " + "snap name"); goto out; } + i++; } @@ -5664,20 +5521,20 @@ glusterd_get_all_snapshot_status (dict_t *dict, char **op_errstr, list_for_each_entry_safe (snap, tmp_snap, &priv->snapshots, snap_list) { - ret = snprintf (key, sizeof (key), "status.snap%d", i); + ret = snprintf (key, sizeof (key), + "status.snap%d.snapname", i); if (ret < 0) { goto out; } - ret = glusterd_get_each_snap_object_status (op_errstr, - rsp_dict, snap, key); - + ret = dict_set_dynstr_with_alloc (rsp_dict, key, + snap->snapname); if (ret) { - gf_log (this->name, GF_LOG_ERROR, "Could not get " - "the details of a snap object: %s", - snap->snapname); + gf_log (this->name, GF_LOG_ERROR, "Could not save " + "snap name"); goto out; } + i++; } @@ -5688,7 +5545,7 @@ glusterd_get_all_snapshot_status (dict_t *dict, char **op_errstr, } ret = 0; -out: +out : return ret; } @@ -5715,14 +5572,14 @@ glusterd_snapshot_status_commit (dict_t *dict, char **op_errstr, conf = this->private; GF_ASSERT (conf); - ret = dict_get_int32 (dict, "cmd", &cmd); + ret = dict_get_int32 (dict, "status-cmd", &cmd); if (ret) { gf_log (this->name, GF_LOG_ERROR, "Failed to get status cmd type"); goto out; } - ret = dict_set_int32 (rsp_dict, "cmd", cmd); + ret = dict_set_int32 (rsp_dict, "status-cmd", cmd); if (ret) { gf_log (this->name, GF_LOG_ERROR, "Could not save status cmd in rsp dictionary"); @@ -5769,6 +5626,13 @@ glusterd_snapshot_status_commit (dict_t *dict, char **op_errstr, "get status of snap %s", get_buffer); goto out; } + + ret = dict_set_int32 (rsp_dict, "status.snapcount", 1); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Unable to " + "set snapcount to 1"); + goto out; + } break; } case GF_SNAP_STATUS_TYPE_VOL: |