From a386092de70a7590c0bda1eb819a4089f4c50e48 Mon Sep 17 00:00:00 2001 From: shishir gowda Date: Tue, 24 Sep 2013 16:44:24 +0530 Subject: mgmt/glusterd: Introduce snapshot infrastructure API's for creating, adding, finding, removing snapshots and consistency groups are provided. Change-Id: I5c15a464c001dffe756513c0286b31e43ae10c54 Signed-off-by: shishir gowda --- xlators/mgmt/glusterd/src/glusterd.h | 78 ++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'xlators/mgmt/glusterd/src/glusterd.h') diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h index 26e9b0c0d..e804c9ce8 100644 --- a/xlators/mgmt/glusterd/src/glusterd.h +++ b/xlators/mgmt/glusterd/src/glusterd.h @@ -154,6 +154,7 @@ typedef struct { dict_t *opts; synclock_t big_lock; gf_boolean_t restart_done; + struct list_head snap_cg; } glusterd_conf_t; @@ -263,11 +264,13 @@ struct glusterd_replace_brick_ { typedef struct glusterd_replace_brick_ glusterd_replace_brick_t; struct glusterd_volinfo_ { + gf_lock_t lock; char volname[GLUSTERD_MAX_VOLUME_NAME]; int type; int brick_count; struct list_head vol_list; struct list_head bricks; + struct list_head snaps; glusterd_volume_status status; int sub_count; /* backward compatibility */ int stripe_count; @@ -310,6 +313,44 @@ struct glusterd_volinfo_ { int client_op_version; }; +typedef enum gd_snap_status_ { + GD_SNAP_STATUS_NONE, + GD_SNAP_STATUS_INIT, + GD_SNAP_STATUS_IN_USE, + GD_SNAP_STATUS_DECOMMISSION, + GD_SNAP_STATUS_RESTORED, +} gd_snap_status_t; + + +struct glusterd_snap_ { + gf_lock_t lock; + glusterd_volinfo_t *snap_volume; + struct list_head snap_list; + char snap_name[256]; + uuid_t snap_id; + uuid_t cg_id; + char *description; + time_t time_stamp; + gd_snap_status_t snap_status; +}; + +typedef struct glusterd_snap_ glusterd_snap_t; + +struct glusterd_snap_cg_ { + gf_lock_t lock; + uuid_t cg_id; + char cg_name[256]; + char *description; + gd_snap_status_t cg_status; + int64_t volume_count; + struct list_head cg_list; + glusterd_volinfo_t volumes[0]; +}; + +typedef struct glusterd_snap_cg_ glusterd_snap_cg_t; + + + typedef enum gd_node_type_ { GD_NODE_NONE, GD_NODE_BRICK, @@ -760,4 +801,41 @@ int32_t glusterd_op_begin_synctask (rpcsvc_request_t *req, glusterd_op_t op, void *dict); int32_t glusterd_defrag_event_notify_handle (dict_t *dict); + +/* snapshot */ +glusterd_snap_t* +glusterd_new_snap_object(); + +glusterd_snap_cg_t* +glusterd_new_snap_cg_object(int64_t volume_count); + +int32_t +glusterd_add_snap (glusterd_volinfo_t *volinfo, glusterd_snap_t *snap); + +glusterd_snap_t* +glusterd_remove_snap_by_id (glusterd_volinfo_t *volinfo, uuid_t snap_id); + +glusterd_snap_t* +glusterd_remove_snap_by_name (glusterd_volinfo_t *volinfo, char *snap_name); + +glusterd_snap_t* +glusterd_find_snap_by_name (glusterd_volinfo_t *volinfo, char *snap_name); + +glusterd_snap_t* +glusterd_find_snap_by_id (glusterd_volinfo_t *volinfo, uuid_t snap_id); + +int32_t +glusterd_add_snap_cg (glusterd_conf_t *conf, glusterd_snap_cg_t *cg); + +glusterd_snap_cg_t* +glusterd_remove_snap_cg_by_name (glusterd_conf_t *conf, char *cg_name); + +glusterd_snap_cg_t* +glusterd_remove_snap_cg_by_id (glusterd_conf_t *conf, uuid_t cg_id); + +glusterd_snap_cg_t* +glusterd_find_snap_cg_by_id (glusterd_conf_t *conf, uuid_t cg_id); + +glusterd_snap_cg_t* +glusterd_find_snap_cg_by_name (glusterd_conf_t *conf, char *cg_name); #endif -- cgit