[lvm-devel] [PATCH 11/25] Replicator: metadata update

Zdenek Kabelac zkabelac at redhat.com
Sun Aug 8 08:57:23 UTC 2010


Signed-off-by: Zdenek Kabelac <zkabelac at redhat.com>
---
 lib/metadata/metadata-exported.h |   81 +++++++++++++++++++++++++++-----------
 1 files changed, 58 insertions(+), 23 deletions(-)

diff --git a/lib/metadata/metadata-exported.h b/lib/metadata/metadata-exported.h
index 41ef566..70a4c33 100644
--- a/lib/metadata/metadata-exported.h
+++ b/lib/metadata/metadata-exported.h
@@ -73,7 +73,8 @@
 #define MERGING			0x10000000U	/* LV SEG */
 
 #define REPLICATOR		0x20000000U	/* LV -internal use only for replicator */
-#define REPLICATOR_LOG		0x40000000U	/* LV -internal use only for replicator-dev */
+#define REPLICATOR_LOG		0x40000000U	/* LV -internal use only for replicated */
+#define REPLICATOR_NOTSYNCED   	0x80000000U	/* LV -internal use only for replicator */
 
 #define LVM_READ              	0x00000100U	/* LV VG */
 #define LVM_WRITE             	0x00000200U	/* LV VG */
@@ -327,7 +328,7 @@ typedef enum {
 
 struct replicator_site {
 	struct dm_list list;		/* Chained list of sites */
-	struct dm_list rdevices;	/* Device list */
+	struct dm_list rdevices;	/* List of replicated devices */
 
 	struct logical_volume *replicator; /* Reference to replicator */
 
@@ -336,23 +337,23 @@ struct replicator_site {
 	struct volume_group *vg;        /* resolved vg  (activate/deactive) */
 	unsigned site_index;
 	replicator_state_t state;	/* Active or pasive state of site */
-	dm_replicator_mode_t op_mode;	/* Operation mode sync or async fail|warn|drop|stall */
-	uint64_t fall_behind_data;	/* Bytes */
+	dm_replicator_policy_t policy;	/* Policy sync or async fail|warn|drop|stall */
 	uint32_t fall_behind_ios;	/* IO operations */
+	uint64_t fall_behind_size;	/* Bytes */
 	uint32_t fall_behind_timeout;	/* Seconds */
 };
 
-struct replicator_device {
+struct replicated_device {
 	struct dm_list list;		/* Chained list of devices from same site */
 
-	struct lv_segment *replicator_dev; /* Reference to replicator-dev segment */
+	struct lv_segment *replicated_seg; /* Reference to replicated segment */
 	struct replicator_site *rsite;	/* Reference to site parameters */
 
 	uint64_t device_index;
 	const char *name;		/* Device LV name */
 	struct logical_volume *lv;	/* LV from replicator site's VG */
 	struct logical_volume *slog;	/* Synclog lv from VG  */
-	const char *slog_name;		/* Debug - specify size of core synclog */
+	uint32_t slog_core;		/* Corelog size */
 };
 /* -- Replicator datatypes */
 
@@ -384,7 +385,7 @@ struct lv_segment {
 
 	struct lv_segment_area *areas;
 
-	struct logical_volume *replicator;/* For replicator-devs - link to replicator LV */
+	struct logical_volume *replicator;/* For replicated - link to replicator LV */
 	struct logical_volume *rlog_lv;	/* For replicators */
 	const char *rlog_type;		/* For replicators */
 	uint64_t rdevice_index_highest;	/* For replicators */
@@ -414,7 +415,7 @@ struct logical_volume {
 	struct dm_list snapshot_segs;
 	struct lv_segment *snapshot;
 
-	struct replicator_device *rdevice;/* For replicator-devs, rimages, slogs - reference to rdevice */
+	struct replicated_device *rdevice;/* For replicated, rimages, slogs - reference to rdevice */
 	struct dm_list rsites;	/* For replicators - all sites */
 
 	struct dm_list segments;
@@ -623,6 +624,8 @@ uint64_t extents_from_size(struct cmd_context *cmd, uint64_t size,
 struct lvcreate_params {
 	/* flags */
 	int snapshot; /* snap */
+	const char *replicator; /* replicator */
+	int replicated; /* replicated */
 	int zero; /* all */
 	int major; /* all */
 	int minor; /* all */
@@ -641,6 +644,9 @@ struct lvcreate_params {
 
 	uint32_t mirrors; /* mirror */
 
+	const char *rlog_type; /* replicator */
+	struct replicator_site rsite; /* replicator, use only parameters */
+
 	const struct segment_type *segtype; /* all */
 
 	/* size */
@@ -804,24 +810,53 @@ int collapse_mirrored_lv(struct logical_volume *lv);
 int shift_mirror_images(struct lv_segment *mirrored_seg, unsigned mimage);
 
 /* ++  metadata/replicator_manip.c */
-int replicator_add_replicator_dev(struct logical_volume *replicator_lv,
-				  struct lv_segment *rdev_seg);
-struct logical_volume *replicator_remove_replicator_dev(struct lv_segment *rdev_seg);
-int replicator_add_rlog(struct lv_segment *replicator_seg, struct logical_volume *rlog_lv);
-struct logical_volume *replicator_remove_rlog(struct lv_segment *replicator_seg);
-
-int replicator_dev_add_slog(struct replicator_device *rdev, struct logical_volume *slog_lv);
-struct logical_volume *replicator_dev_remove_slog(struct replicator_device *rdev);
-int replicator_dev_add_rimage(struct replicator_device *rdev, struct logical_volume *lv);
-struct logical_volume *replicator_dev_remove_rimage(struct replicator_device *rdev);
-
-int lv_is_active_replicator_dev(const struct logical_volume *lv);
+int lv_is_active_replicated(const struct logical_volume *lv);
 int lv_is_replicator(const struct logical_volume *lv);
-int lv_is_replicator_dev(const struct logical_volume *lv);
+int lv_is_replicated(const struct logical_volume *lv);
 int lv_is_rimage(const struct logical_volume *lv);
 int lv_is_rlog(const struct logical_volume *lv);
 int lv_is_slog(const struct logical_volume *lv);
-struct logical_volume *first_replicator_dev(const struct logical_volume *lv);
+struct replicator_site *find_site_in_replicator(const struct logical_volume *replicator,
+						const char *site_name);
+struct replicator_site *find_local_site_in_replicator(const struct logical_volume *replicator);
+struct logical_volume *first_replicated(const struct logical_volume *lv);
+int replicator_add_rlog(struct lv_segment *replicator_seg, struct logical_volume *rlog_lv);
+struct logical_volume *replicator_remove_rlog(struct lv_segment *replicator_seg);
+int replicator_site_add_device(struct replicator_site *rsite,
+			       struct lv_segment *replicated_seg,
+			       const char *name,
+			       struct logical_volume *rimage,
+			       uint32_t slog_core,
+			       struct logical_volume *slog_lv,
+			       uint64_t device_index);
+int replicator_site_set_policy(struct replicator_site *rsite, const char *sitepolicy);
+const char *replicator_site_get_policy(const struct replicator_site *rsite);
+struct replicator_site *replicator_add_site(struct logical_volume *replicator,
+					    const char *site_name);
+void replicator_init(struct logical_volume *replicator);
+int replicator_add_replicated_seg(struct logical_volume *replicator,
+				  struct lv_segment *rdev_seg);
+
+int lv_add_replicated(struct logical_volume *replicator,
+		      struct logical_volume *lv);
+int lv_remove_replicated(struct logical_volume *replicated);
+
+int lv_add_replicator_site(struct logical_volume *replicator,
+			   const struct replicator_site *rsite);
+int lv_remove_replicator_site(struct logical_volume *replicator, const char *site_name);
+
+int lv_add_sync_log(struct logical_volume *replicator,
+		    unsigned site_index,
+		    uint64_t device_index,
+		    struct dm_list *allocatable_pvs,
+		    alloc_policy_t alloc);
+
+int vg_prearrange_replicator(struct volume_group *vg,
+			     const struct lvcreate_params *lp);
+int vg_add_replicator(struct logical_volume *replicator,
+		      const char *rlog_type,
+		      uint32_t region_size);
+int vg_remove_replicator(struct logical_volume *replicator);
 /* --  metadata/replicator_manip.c */
 struct cmd_vg *cmd_vg_add(struct dm_pool *mem, struct dm_list *cmd_vgs,
 			  const char *vg_name, const char *vgid,
-- 
1.7.2.1




More information about the lvm-devel mailing list