Zdenek Behan: Monitor: add option to specify rebuild increments

Martin F. Krafft madduck at alioth.debian.org
Tue Oct 27 19:21:35 UTC 2009


Module: mdadm
Branch: master
Commit: 9a36a9b713a6c789f268251a81de67bb8fd9c7f8
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=9a36a9b713a6c789f268251a81de67bb8fd9c7f8

Author: Zdenek Behan <rain at matfyz.cz>
Date:   Mon Oct 19 13:13:58 2009 +1100

Monitor: add option to specify rebuild increments

ie. the percent increments after which RebuildNN event is generated

This is particulary useful when using --program option, rather than
(only) syslog for alerts.

Signed-off-by: Zdenek Behan <rain at matfyz.cz>
Signed-off-by: NeilBrown <neilb at suse.de>

---

 Monitor.c |   26 +++++++++++++-------------
 ReadMe.c  |    2 ++
 mdadm.8   |   12 ++++++++++--
 mdadm.c   |   11 ++++++++++-
 mdadm.h   |    2 +-
 5 files changed, 36 insertions(+), 17 deletions(-)

diff --git a/Monitor.c b/Monitor.c
index af486d7..b0802f8 100644
--- a/Monitor.c
+++ b/Monitor.c
@@ -33,14 +33,6 @@
 static void alert(char *event, char *dev, char *disc, char *mailaddr, char *mailfrom,
 		  char *cmd, int dosyslog);
 
-static char *percentalerts[] = {
-	"RebuildStarted",
-	"Rebuild20",
-	"Rebuild40",
-	"Rebuild60",
-	"Rebuild80",
-};
-
 /* The largest number of disks current arrays can manage is 384
  * This really should be dynamically, but that will have to wait
  * At least it isn't MD_SB_DISKS.
@@ -49,7 +41,7 @@ static char *percentalerts[] = {
 int Monitor(mddev_dev_t devlist,
 	    char *mailaddr, char *alert_cmd,
 	    int period, int daemonise, int scan, int oneshot,
-	    int dosyslog, int test, char* pidfile)
+	    int dosyslog, int test, char* pidfile, int increments)
 {
 	/*
 	 * Every few seconds, scan every md device looking for changes
@@ -77,8 +69,8 @@ int Monitor(mddev_dev_t devlist,
 	 *      An active device had a reverse transition
 	 *    RebuildStarted
 	 *      percent went from -1 to +ve
-	 *    Rebuild20 Rebuild40 Rebuild60 Rebuild80
-	 *      percent went from below to not-below that number
+	 *    RebuildNN
+	 *      percent went from below to not-below NN%
 	 *    DeviceDisappeared
 	 *      Couldn't access a device which was previously visible
 	 *
@@ -311,9 +303,17 @@ int Monitor(mddev_dev_t devlist,
 			if (mse &&
 			    st->percent >= 0 &&
 			    mse->percent >= 0 &&
-			    (mse->percent / 20) > (st->percent / 20))
-				alert(percentalerts[mse->percent/20],
+			    (mse->percent / increments) > (st->percent / increments)) {
+				char percentalert[15]; // "RebuildNN" (10 chars) or "RebuildStarted" (15 chars)
+
+				if((mse->percent / increments) == 0)
+					snprintf(percentalert, sizeof(percentalert), "RebuildStarted");
+				else
+					snprintf(percentalert, sizeof(percentalert), "Rebuild%02d", mse->percent);
+
+				alert(percentalert,
 				      dev, NULL, mailaddr, mailfrom, alert_cmd, dosyslog);
+			}
 
 			if (mse &&
 			    mse->percent == -1 &&
diff --git a/ReadMe.c b/ReadMe.c
index 90b4daf..3e53e57 100644
--- a/ReadMe.c
+++ b/ReadMe.c
@@ -176,6 +176,7 @@ struct option long_options[] = {
     {"mail",      1, 0, 'm'},
     {"program",   1, 0, 'p'},
     {"alert",     1, 0, 'p'},
+    {"increment", 1, 0, 'r'},
     {"delay",     1, 0, 'd'},
     {"daemonise", 0, 0, 'f'},
     {"daemonize", 0, 0, 'f'},
@@ -495,6 +496,7 @@ char Help_monitor[] =
 "  --mail=       -m   : Address to mail alerts of failure to\n"
 "  --program=    -p   : Program to run when an event is detected\n"
 "  --alert=           : same as --program\n"
+"  --increment=  -r   : Report RebuildNN events in the given increment. default=20\n"
 "  --delay=      -d   : seconds of delay between polling state. default=60\n"
 "  --config=     -c   : specify a different config file\n"
 "  --scan        -s   : find mail-address/program in config file\n"
diff --git a/mdadm.8 b/mdadm.8
index 7f19918..36dbf90 100644
--- a/mdadm.8
+++ b/mdadm.8
@@ -1221,6 +1221,12 @@ reduce this as the kernel alerts
 immediately when there is any change.
 
 .TP
+.BR \-r ", " \-\-increment
+Give a percentage increment.
+.I mdadm
+will generate RebuildNN events with the given percentage increment.
+
+.TP
 .BR \-f ", " \-\-daemonise
 Tell
 .I mdadm
@@ -1818,8 +1824,10 @@ An md array started reconstruction. (syslog priority: Warning)
 .BI Rebuild NN
 Where
 .I NN
-is 20, 40, 60, or 80, this indicates that rebuild has passed that many
-percentage of the total. (syslog priority: Warning)
+is a two-digit number (ie. 05, 48). This indicates that rebuild
+has passed that many percent of the total. The events are generated
+with fixed increment since 0. Increment size may be specified with
+a commandline option (default is 20). (syslog priority: Warning)
 
 .TP
 .B RebuildFinished
diff --git a/mdadm.c b/mdadm.c
index 6f43dc3..df48117 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -89,6 +89,7 @@ int main(int argc, char *argv[])
 	int require_homehost = 1;
 	char *mailaddr = NULL;
 	char *program = NULL;
+	int increments = 20;
 	int delay = 0;
 	int daemonise = 0;
 	char *pidfile = NULL;
@@ -698,6 +699,14 @@ int main(int argc, char *argv[])
 				program = optarg;
 			continue;
 
+		case O(MONITOR,'r'): /* rebuild increments */
+			increments = atoi(optarg);
+			if (increments>99 || increments<1) {
+				fprintf(stderr, Name ": please specify positive integer between 1 and 99 as rebuild increments.\n");
+				exit(2);
+			}
+			continue;
+
 		case O(MONITOR,'d'): /* delay in seconds */
 		case O(GROW, 'd'):
 		case O(BUILD,'d'): /* delay for bitmap updates */
@@ -1377,7 +1386,7 @@ int main(int argc, char *argv[])
 		}
 		rv= Monitor(devlist, mailaddr, program,
 			    delay?delay:60, daemonise, scan, oneshot,
-			    dosyslog, test, pidfile);
+			    dosyslog, test, pidfile, increments);
 		break;
 
 	case GROW:
diff --git a/mdadm.h b/mdadm.h
index ffa5f53..2e2275c 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -749,7 +749,7 @@ extern int Examine(mddev_dev_t devlist, int brief, int export, int scan,
 extern int Monitor(mddev_dev_t devlist,
 		   char *mailaddr, char *alert_cmd,
 		   int period, int daemonise, int scan, int oneshot,
-		   int dosyslog, int test, char *pidfile);
+		   int dosyslog, int test, char *pidfile, int increments);
 
 extern int Kill(char *dev, int force, int quiet, int noexcl);
 extern int Wait(char *dev);




More information about the pkg-mdadm-commits mailing list