[lvm-devel] [PATCH 2/2] support mirrored log in cluster evironment

dongmao zhang dmzhang at suse.com
Sun Jan 6 08:46:36 UTC 2013


From: dongmao zhang <deanraccoon at gmail.com>

1.remove the limits when meeting mirrored log in cluster.

2.If core log ,use mirror's UUID(change last 4 bytes to CORE.
Because when in cluster mirrored log, UUID conflicts occurs between
the main mirror's log and mirrored log(which is CORE) itself.
---
 lib/metadata/mirror.c |   23 -----------------------
 lib/mirror/mirrored.c |    4 +++-
 tools/lvconvert.c     |    9 ---------
 3 files changed, 3 insertions(+), 33 deletions(-)

diff --git a/lib/metadata/mirror.c b/lib/metadata/mirror.c
index 4fee763..1a67832 100644
--- a/lib/metadata/mirror.c
+++ b/lib/metadata/mirror.c
@@ -1889,10 +1889,6 @@ int add_mirror_log(struct cmd_context *cmd, struct logical_volume *lv,
 	unsigned old_log_count;
 	int r = 0;
 
-	if (vg_is_clustered(lv->vg) && (log_count > 1)) {
-		log_error("Log type, \"mirrored\", is unavailable to cluster mirrors");
-		return 0;
-	}
 
 	if (dm_list_size(&lv->segments) != 1) {
 		log_error("Multiple-segment mirror is not supported");
@@ -2056,25 +2052,6 @@ int lv_add_mirrors(struct cmd_context *cmd, struct logical_volume *lv,
 		return 0;
 	}
 
-	if (vg_is_clustered(lv->vg)) {
-		/* FIXME: review check of lv_is_active_remotely */
-		/* FIXME: move this test out of this function */
-		/* Skip test for pvmove mirrors, it can use local mirror */
-		if (!(lv->status & (PVMOVE | LOCKED)) &&
-		    !_cluster_mirror_is_available(lv)) {
-			log_error("Shared cluster mirrors are not available.");
-			return 0;
-		}
-
-		/*
-		 * No mirrored logs for cluster mirrors until
-		 * log daemon is multi-threaded.
-		 */
-		if (log_count > 1) {
-			log_error("Log type, \"mirrored\", is unavailable to cluster mirrors");
-			return 0;
-		}
-	}
 
 	/* For corelog mirror, activation code depends on
 	 * the global mirror_in_sync status. As we are adding
diff --git a/lib/mirror/mirrored.c b/lib/mirror/mirrored.c
index 7ce8475..335772f 100644
--- a/lib/mirror/mirrored.c
+++ b/lib/mirror/mirrored.c
@@ -366,12 +366,14 @@ static int _add_log(struct dm_pool *mem, struct lv_segment *seg,
 			return 0;
 		}
 	} else {
-		/* If core log, use mirror's UUID and set DM_CORELOG flag */
+		/* If core log, use mirror's (UUID + CORE) and set DM_CORELOG flag */
 		if (!(log_dlid = build_dm_uuid(mem, seg->lv->lvid.s, NULL))) {
 			log_error("Failed to build uuid for mirror LV %s.",
 				  seg->lv->name);
 			return 0;
 		}
+		memcpy(&(log_dlid[strlen(log_dlid)-4]),"CORE",4);
+
 		log_flags |= DM_CORELOG;
 	}
 
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 5bda00f..d5cbb97 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -1096,15 +1096,6 @@ static int _lvconvert_mirrors_parse_params(struct cmd_context *cmd,
 		return 0;
 	}
 
-	/*
-	 * No mirrored logs for cluster mirrors until
-	 * log daemon is multi-threaded.
-	 */
-	if ((*new_log_count == 2) && vg_is_clustered(lv->vg)) {
-		log_error("Log type, \"mirrored\", is unavailable to cluster mirrors");
-		return 0;
-	}
-
 	log_verbose("Setting logging type to %s", mirrorlog);
 
 	/*
-- 
1.7.3.4




More information about the lvm-devel mailing list