summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd.h
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd.h')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.h87
1 files changed, 48 insertions, 39 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd.h b/xlators/mgmt/glusterd/src/glusterd.h
index 27ebbbb6c..bd765349a 100644
--- a/xlators/mgmt/glusterd/src/glusterd.h
+++ b/xlators/mgmt/glusterd/src/glusterd.h
@@ -40,6 +40,7 @@
#include "store.h"
#define GLUSTERD_MAX_VOLUME_NAME 1000
+#define GLUSTERD_MAX_SNAP_NAME 128
#define GLUSTERD_TR_LOG_SIZE 50
#define GLUSTERD_NAME "glusterd"
#define GLUSTERD_SOCKET_LISTEN_BACKLOG 128
@@ -75,6 +76,9 @@
struct glusterd_volinfo_;
typedef struct glusterd_volinfo_ glusterd_volinfo_t;
+struct glusterd_snap_;
+typedef struct glusterd_snap_ glusterd_snap_t;
+
typedef enum glusterd_op_ {
GD_OP_NONE = 0,
GD_OP_CREATE_VOLUME,
@@ -139,7 +143,7 @@ typedef struct {
nodesrv_t *nfs;
struct pmap_registry *pmap;
struct list_head volumes;
- struct list_head snap_list; /*List of snap volumes */
+ struct list_head snapshots; /*List of snap volumes */
pthread_mutex_t xprt_lock;
struct list_head xprt_list;
gf_store_handle_t *handle;
@@ -279,6 +283,7 @@ struct glusterd_volinfo_ {
gf_lock_t lock;
char volname[GLUSTERD_MAX_VOLUME_NAME];
gf_boolean_t is_snap_volume;
+ glusterd_snap_t *snapshot;
gf_boolean_t is_volume_restored;
char parent_volname[GLUSTERD_MAX_VOLUME_NAME];
/* In case of a snap volume
@@ -292,8 +297,16 @@ struct glusterd_volinfo_ {
uint64_t snap_count;
uint64_t snap_max_hard_limit;
struct list_head vol_list;
+ /* In case of a snap volume
+ i.e (is_snap_volume == TRUE) this
+ is linked to glusterd_snap_t->volumes.
+ In case of a non-snap volume, this is
+ linked to glusterd_conf_t->volumes */
+ struct list_head snapvol_list;
+ /* This is a current pointer for
+ glusterd_volinfo_t->snap_volumes */
struct list_head bricks;
- struct list_head snaps;
+ struct list_head snap_volumes;
glusterd_volume_status status;
int sub_count; /* backward compatibility */
int stripe_count;
@@ -306,7 +319,6 @@ struct glusterd_volinfo_ {
gf_store_handle_t *shandle;
gf_store_handle_t *rb_shandle;
gf_store_handle_t *node_state_shandle;
- gf_store_handle_t *snap_list_shandle;
/* Defrag/rebalance related */
glusterd_rebalance_t rebal;
@@ -347,9 +359,11 @@ typedef enum gd_snap_status_ {
struct glusterd_snap_ {
gf_lock_t lock;
- glusterd_volinfo_t *snap_volume;
+ struct list_head volumes;
+ glusterd_volinfo_t *snap_volume; /*TODO: This should be replaced
+ with volumes list later */
struct list_head snap_list;
- char snap_name[256];
+ char snapname[GLUSTERD_MAX_SNAP_NAME];
uuid_t snap_id;
char cg_name[256];
uuid_t cg_id;
@@ -360,8 +374,6 @@ struct glusterd_snap_ {
gf_store_handle_t *shandle;
};
-typedef struct glusterd_snap_ glusterd_snap_t;
-
struct glusterd_snap_cg_ {
gf_lock_t lock;
uuid_t cg_id;
@@ -415,6 +427,7 @@ enum glusterd_vol_comp_status_ {
#define GLUSTERD_VOLUME_DIR_PREFIX "vols"
#define GLUSTERD_PEER_DIR_PREFIX "peers"
#define GLUSTERD_VOLUME_INFO_FILE "info"
+#define GLUSTERD_SNAP_INFO_FILE "info"
#define GLUSTERD_VOLUME_RBSTATE_FILE "rbstate"
#define GLUSTERD_BRICK_INFO_DIR "bricks"
#define GLUSTERD_CKSUM_FILE "cksum"
@@ -444,27 +457,33 @@ enum glusterd_vol_comp_status_ {
typedef ssize_t (*gd_serialize_t) (struct iovec outmsg, void *args);
-#define GLUSTERD_GET_VOLUME_DIR(path, volinfo, priv) \
- snprintf (path, PATH_MAX, "%s/vols/%s", priv->workdir,\
- volinfo->volname);
+#define GLUSTERD_GET_VOLUME_DIR(path, volinfo, priv) \
+ if (volinfo->is_snap_volume) { \
+ snprintf (path, PATH_MAX, "%s/snaps/%s/%s", priv->workdir, \
+ volinfo->snapshot->snapname, volinfo->volname); \
+ } else { \
+ snprintf (path, PATH_MAX, "%s/vols/%s", priv->workdir, \
+ volinfo->volname); \
+ }
+
+#define GLUSTERD_GET_SNAP_DIR(path, snap, priv) \
+ snprintf (path, PATH_MAX, "%s/snaps/%s", priv->workdir, \
+ snap->snapname);
#define GLUSTERD_GET_SNAP_CG_DIR(path, priv) \
snprintf (path, PATH_MAX, "%s/%s", priv->workdir,\
GLUSTERD_VOL_SNAP_CG_DIR_PREFIX);
-#define GLUSTERD_GET_SNAP_DIR(path, volinfo, snap_name, priv) \
- snprintf (path, PATH_MAX, "%s/vols/%s/snaps/%s", priv->workdir,\
- volinfo->volname, snap_name);
-
-#define GLUSTERD_GET_BRICK_DIR(path, volinfo, priv) \
- snprintf (path, PATH_MAX, "%s/%s/%s/%s", priv->workdir,\
- GLUSTERD_VOLUME_DIR_PREFIX, volinfo->volname, \
- GLUSTERD_BRICK_INFO_DIR);
-
-#define GLUSTERD_GET_SNAP_BRICK_DIR(path, volinfo, snap_name, priv) \
- snprintf (path, PATH_MAX, "%s/%s/%s/snaps/%s/%s", priv->workdir,\
- GLUSTERD_VOLUME_DIR_PREFIX, volinfo->volname, \
- snap_name, GLUSTERD_BRICK_INFO_DIR);
+#define GLUSTERD_GET_BRICK_DIR(path, volinfo, priv) \
+ if (volinfo->is_snap_volume) { \
+ snprintf (path, PATH_MAX, "%s/snaps/%s/%s/%s", priv->workdir, \
+ volinfo->snapshot->snapname, volinfo->volname, \
+ GLUSTERD_BRICK_INFO_DIR); \
+ } else { \
+ snprintf (path, PATH_MAX, "%s/%s/%s/%s", priv->workdir, \
+ GLUSTERD_VOLUME_DIR_PREFIX, volinfo->volname, \
+ GLUSTERD_BRICK_INFO_DIR); \
+ }
#define GLUSTERD_GET_NFS_DIR(path, priv) \
snprintf (path, PATH_MAX, "%s/nfs", priv->workdir);
@@ -487,17 +506,6 @@ typedef ssize_t (*gd_serialize_t) (struct iovec outmsg, void *args);
volpath, brickinfo->hostname, exp_path); \
} while (0)
-#define GLUSTERD_GET_SNAP_BRICK_PIDFILE(pidfile,vol_name,snap_name, \
- brickinfo, priv) do { \
- char exp_path[PATH_MAX] = {0,}; \
- char volpath[PATH_MAX] = {0,}; \
- snprintf (volpath, sizeof (volpath), "%s/vols/%s/snaps/%s", \
- priv->workdir, vol_name, snap_name); \
- GLUSTERD_REMOVE_SLASH_FROM_PATH (brickinfo->path, exp_path);\
- snprintf (pidfile, sizeof (pidfile), "%s/run/%s-%s.pid", \
- volpath, brickinfo->hostname, exp_path); \
- } while (0)
-
#define GLUSTERD_GET_NFS_PIDFILE(pidfile,nfspath) { \
snprintf (pidfile, PATH_MAX, "%s/run/nfs.pid", \
nfspath); \
@@ -904,19 +912,20 @@ 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_list_add_snapvol (glusterd_volinfo_t *origin_vol,
+ glusterd_volinfo_t *snap_vol);
glusterd_snap_t*
-glusterd_remove_snap_by_id (glusterd_volinfo_t *volinfo, uuid_t snap_id);
+glusterd_remove_snap_by_id (uuid_t snap_id);
glusterd_snap_t*
-glusterd_remove_snap_by_name (glusterd_volinfo_t *volinfo, char *snap_name);
+glusterd_remove_snap_by_name (char *snap_name);
glusterd_snap_t*
-glusterd_find_snap_by_name (glusterd_volinfo_t *volinfo, char *snap_name);
+glusterd_find_snap_by_name (char *snap_name);
glusterd_snap_t*
-glusterd_find_snap_by_id (glusterd_volinfo_t *volinfo, uuid_t snap_id);
+glusterd_find_snap_by_id (uuid_t snap_id);
int32_t
glusterd_add_snap_cg (glusterd_conf_t *conf, glusterd_snap_cg_t *cg);