client: make waitsync check interval configurable

This commit is contained in:
Miroslav Lichvar 2015-10-07 12:44:25 +02:00
parent 6a9c756cf0
commit ca5a791d09
2 changed files with 22 additions and 10 deletions

View file

@ -4687,10 +4687,10 @@ with the @code{rtcautotrim} directive (@pxref{rtcautotrim directive}).
@subsubsection waitsync @subsubsection waitsync
The @code{waitsync} command waits for @code{chronyd} to synchronise. The @code{waitsync} command waits for @code{chronyd} to synchronise.
Up to three optional arguments can be specified, the first is the maximum Up to four optional arguments can be specified, the first is the maximum
number of tries in 10 second intervals before giving up and returning a number of tries before giving up and returning a non-zero error code. When 0
non-zero error code. When 0 is specified, or there are no arguments, the is specified, or there are no arguments, the number of tries will not be
number of tries will not be limited. limited.
The second and third arguments are the maximum allowed remaining correction of The second and third arguments are the maximum allowed remaining correction of
the system clock and the maximum allowed skew (in ppm) as reported by the the system clock and the maximum allowed skew (in ppm) as reported by the
@ -4698,14 +4698,18 @@ the system clock and the maximum allowed skew (in ppm) as reported by the
and @code{Skew} fields. If not specified or zero, the value will not be and @code{Skew} fields. If not specified or zero, the value will not be
checked. checked.
The fourth argument is the interval in which the check is repeated. The
interval is 10 seconds by default.
An example is An example is
@example @example
waitsync 60 0.01 waitsync 60 0.01
@end example @end example
which will wait up to about 10 minutes for @code{chronyd} to synchronise to a which will wait up to about 10 minutes (60 times 10 seconds) for @code{chronyd}
source and the remaining correction to be less than 10 milliseconds. to synchronise to a source and the remaining correction to be less than 10
milliseconds.
@c }}} @c }}}
@c {{{ writertc @c {{{ writertc
@node writertc command @node writertc command

View file

@ -1191,7 +1191,7 @@ give_help(void)
"makestep\0Correct clock by stepping immediately\0" "makestep\0Correct clock by stepping immediately\0"
"makestep <threshold> <updates>\0Configure automatic clock stepping\0" "makestep <threshold> <updates>\0Configure automatic clock stepping\0"
"maxupdateskew <skew>\0Modify maximum valid skew to update frequency\0" "maxupdateskew <skew>\0Modify maximum valid skew to update frequency\0"
"waitsync [max-tries [max-correction [max-skew]]]\0" "waitsync [max-tries [max-correction [max-skew [interval]]]]\0"
"Wait until synchronised in specified limits\0" "Wait until synchronised in specified limits\0"
"\0\0" "\0\0"
"Time sources:\0\0" "Time sources:\0\0"
@ -2313,14 +2313,20 @@ process_cmd_waitsync(char *line)
CMD_Request request; CMD_Request request;
CMD_Reply reply; CMD_Reply reply;
uint32_t ref_id, a, b, c, d; uint32_t ref_id, a, b, c, d;
double correction, skew_ppm, max_correction, max_skew_ppm; double correction, skew_ppm, max_correction, max_skew_ppm, interval;
int ret = 0, max_tries, i; int ret = 0, max_tries, i;
struct timeval timeout;
max_tries = 0; max_tries = 0;
max_correction = 0.0; max_correction = 0.0;
max_skew_ppm = 0.0; max_skew_ppm = 0.0;
interval = 10.0;
sscanf(line, "%d %lf %lf", &max_tries, &max_correction, &max_skew_ppm); sscanf(line, "%d %lf %lf %lf", &max_tries, &max_correction, &max_skew_ppm, &interval);
/* Don't allow shorter interval than 0.1 seconds */
if (interval < 0.1)
interval = 0.1;
request.command = htons(REQ_TRACKING); request.command = htons(REQ_TRACKING);
@ -2347,7 +2353,9 @@ process_cmd_waitsync(char *line)
} }
if (!ret && (!max_tries || i < max_tries) && !quit) { if (!ret && (!max_tries || i < max_tries) && !quit) {
sleep(10); UTI_DoubleToTimeval(interval, &timeout);
if (select(0, NULL, NULL, NULL, &timeout))
break;
} else { } else {
break; break;
} }