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@matfyz.cz> Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
1373b07d75
commit
9a36a9b713
26
Monitor.c
26
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 &&
|
||||
|
|
2
ReadMe.c
2
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"
|
||||
|
|
12
mdadm.8
12
mdadm.8
|
@ -1220,6 +1220,12 @@ reduce this as the kernel alerts
|
|||
.I mdadm
|
||||
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
|
||||
|
@ -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
|
||||
|
|
11
mdadm.c
11
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:
|
||||
|
|
2
mdadm.h
2
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);
|
||||
|
|
Loading…
Reference in New Issue