[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[lvm-devel] [PATCH] Use lvconvert --repair as a dmeventd mirror failure handler


this one-liner enables the dmeventd mirror monitoring DSO to use lvconvert
--repair to fix any broken mirrors. This means two things:

1) Non-mirrored LVs will be no longer affected by mirror monitoring. (Before,
if you had a LV that went partially missing on a VG where a mirror leg failed,
this LV would be removed automatically by dmeventd... Probably not an
unrecoverable dataloss bug, but still quite unpleasant.)

2) If enough parallel PV space is available at the time of the mirror failure,
the failed devices will be automatically replaced using this spare space. Which
(and whether) free space may be used is still not configurable, but is a
planned feature. Since it is relatively easy to undo the action by converting
the mirror manually, I don't consider this to be a showstopper. In fact, I
think the compromise is much better than what we have now.

I have tested the patch and mirrors get repaired for me automatically when
things fail. This does not equate thorough testing, but lvconvert --repair is
already covered by the testsuite for a few weeks now and so far no obvious
issues appeared.


diff -rN -u -p old-upstream/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c new-upstream/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c
--- old-upstream/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c	2009-05-19 07:47:55.076102213 +0200
+++ new-upstream/daemons/dmeventd/plugins/mirror/dmeventd_mirror.c	2009-05-19 07:47:55.120103895 +0200
@@ -152,7 +152,7 @@ static int _remove_failed_devices(const 
 	/* FIXME Is any sanity-checking required on %s? */
-	if (CMD_SIZE <= snprintf(cmd_str, CMD_SIZE, "vgreduce --config devices{ignore_suspended_devices=1} --removemissing --force %s", vg)) {
+	if (CMD_SIZE <= snprintf(cmd_str, CMD_SIZE, "lvconvert --config devices{ignore_suspended_devices=1} --repair %s/%s", vg, lv)) {
 		/* this error should be caught above, but doesn't hurt to check again */
 		syslog(LOG_ERR, "Unable to form LVM command: Device name too long");
 		dm_pool_empty(_mem_pool);  /* FIXME: not safe with multiple threads */
Peter Rockai | me()mornfall!net | prockai()redhat!com
 http://blog.mornfall.net | http://web.mornfall.net

"In My Egotistical Opinion, most people's C programs should be
 indented six feet downward and covered with dirt."
     -- Blair P. Houghton on the subject of C program indentation

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]