* [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval
@ 2016-07-28 20:43 Jonathan Haws
2016-08-06 16:38 ` Sven Eckelmann
2016-08-12 8:18 ` Simon Wunderlich
0 siblings, 2 replies; 7+ messages in thread
From: Jonathan Haws @ 2016-07-28 20:43 UTC (permalink / raw)
To: b.a.t.m.a.n; +Cc: Jonathan Haws
Signed-off-by: Jonathan Haws <jhaws@sdl.usu.edu>
ALFRED_INTERVAL is now externalized via the -p option (synchronization
period). If specified as option, user supplied interval is used,
otherwise the default interval of ALFRED_INTERVAL is used.
---
alfred.h | 1 +
main.c | 14 +++++++++++++-
man/alfred.8 | 5 +++++
server.c | 4 ++--
4 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/alfred.h b/alfred.h
index a9906c8..5b7e965 100644
--- a/alfred.h
+++ b/alfred.h
@@ -131,6 +131,7 @@ struct globals {
uint16_t changed_data_type_count; /* maximum is 256 */
struct timespec if_check;
+ struct timespec sync_period;
struct hashtable_t *data_hash;
struct hashtable_t *transaction_hash;
diff --git a/main.c b/main.c
index 9cab705..3aa89fd 100644
--- a/main.c
+++ b/main.c
@@ -59,6 +59,8 @@ static void alfred_usage(void)
printf(" -m, --master start up the daemon in master mode, which\n");
printf(" accepts data from slaves and syncs it with\n");
printf(" other masters\n");
+ printf(" -p, --sync-period [period] set synchronization period, in seconds\n");
+ printf(" fractional seconds are supported (i.e. 0.2 = 5 Hz)\n");
printf("\n");
printf(" -u, --unix-path [path] path to unix socket used for client-server\n");
printf(" communication (default: \""ALFRED_SOCK_PATH_DEFAULT"\")\n");
@@ -156,6 +158,7 @@ out:
static struct globals *alfred_init(int argc, char *argv[])
{
int opt, opt_ind, i, ret;
+ double sync_period = 0.0;
struct globals *globals;
struct option long_options[] = {
{"set-data", required_argument, NULL, 's'},
@@ -170,6 +173,7 @@ static struct globals *alfred_init(int argc, char *argv[])
{"update-command", required_argument, NULL, 'c'},
{"version", no_argument, NULL, 'v'},
{"verbose", no_argument, NULL, 'd'},
+ {"sync-period", required_argument, NULL, 'p'},
{NULL, 0, NULL, 0},
};
@@ -193,12 +197,14 @@ static struct globals *alfred_init(int argc, char *argv[])
globals->unix_path = ALFRED_SOCK_PATH_DEFAULT;
globals->verbose = 0;
globals->update_command = NULL;
+ globals->sync_period.tv_sec = ALFRED_INTERVAL;
+ globals->sync_period.tv_nsec = 0;
INIT_LIST_HEAD(&globals->changed_data_types);
globals->changed_data_type_count = 0;
time_random_seed();
- while ((opt = getopt_long(argc, argv, "ms:r:hi:b:vV:M:I:u:dc:", long_options,
+ while ((opt = getopt_long(argc, argv, "ms:r:hi:b:vV:M:I:u:dc:p:", long_options,
&opt_ind)) != -1) {
switch (opt) {
case 'r':
@@ -265,6 +271,12 @@ static struct globals *alfred_init(int argc, char *argv[])
printf("%s %s\n", argv[0], SOURCE_VERSION);
printf("A.L.F.R.E.D. - Almighty Lightweight Remote Fact Exchange Daemon\n");
return NULL;
+ case 'p':
+ sync_period = strtod(optarg, NULL);
+ globals->sync_period.tv_sec = (int) sync_period;
+ globals->sync_period.tv_nsec = (double)(sync_period - (int)sync_period) * 1e9;
+ printf(" ** Setting sync interval to: %.9f seconds (%ld.%09ld)\n", sync_period, globals->sync_period.tv_sec, globals->sync_period.tv_nsec);
+ break;
case 'h':
default:
alfred_usage();
diff --git a/man/alfred.8 b/man/alfred.8
index 49d42bc..df37040 100644
--- a/man/alfred.8
+++ b/man/alfred.8
@@ -118,6 +118,11 @@ overhead).
\fB\-c\fP, \fB\-\-update-command\fP \fIcommand\fP
Specify command to execute on data change. It will be called with data-type list
as arguments.
+.TP
+\fB\-p\fP, \fB\-\-sync-period\fP \fIperiod\fP
+Specify alfred synchronization period, in seconds. If not specified, the default
+ALFRED_INTERVAL setting of 10 seconds will be used. Fractional seconds are
+supported.
.
.SH EXAMPLES
Start an alfred server listening on bridge br0 (assuming that this bridge
diff --git a/server.c b/server.c
index 47aee4f..c5df945 100644
--- a/server.c
+++ b/server.c
@@ -372,7 +372,7 @@ int alfred_server(struct globals *globals)
while (1) {
clock_gettime(CLOCK_MONOTONIC, &now);
- now.tv_sec -= ALFRED_INTERVAL;
+ time_diff(&now, &globals->sync_period, &now);
if (!time_diff(&last_check, &now, &tv)) {
tv.tv_sec = 0;
tv.tv_nsec = 0;
@@ -409,7 +409,7 @@ int alfred_server(struct globals *globals)
if (globals->opmode == OPMODE_MASTER) {
/* we are a master */
- printf("announce master ...\n");
+ printf("[%ld.%09ld] announce master ...\n", last_check.tv_sec, last_check.tv_nsec);
announce_master(globals);
sync_data(globals);
} else {
--
1.9.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval
2016-07-28 20:43 [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval Jonathan Haws
@ 2016-08-06 16:38 ` Sven Eckelmann
2016-08-10 19:59 ` Jonathan Haws
2016-08-12 8:18 ` Simon Wunderlich
1 sibling, 1 reply; 7+ messages in thread
From: Sven Eckelmann @ 2016-08-06 16:38 UTC (permalink / raw)
To: b.a.t.m.a.n; +Cc: Jonathan Haws
[-- Attachment #1: Type: text/plain, Size: 436 bytes --]
On Donnerstag, 28. Juli 2016 14:43:16 CEST Jonathan Haws wrote:
[...]
> + printf(" ** Setting sync interval to: %.9f seconds (%ld.%09ld)\n", sync_period, globals->sync_period.tv_sec, globals->sync_period.tv_nsec);
[...]
> - printf("announce master ...\n");
> + printf("[%ld.%09ld] announce master ...\n", last_check.tv_sec, last_check.tv_nsec);
[...]
Are these two things just relicts from your testing code?
Kind regards,
Sven
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval
2016-08-06 16:38 ` Sven Eckelmann
@ 2016-08-10 19:59 ` Jonathan Haws
2016-08-12 8:20 ` Simon Wunderlich
0 siblings, 1 reply; 7+ messages in thread
From: Jonathan Haws @ 2016-08-10 19:59 UTC (permalink / raw)
To: sven; +Cc: b.a.t.m.a.n
> > + printf(" ** Setting sync interval to: %.9f seconds (%ld.%09ld)\n", sync_period, globals->sync_period.tv_sec, globals->sync_period.tv_nsec);
> [...]
> > - printf("announce master ...\n");
> > + printf("[%ld.%09ld] announce master ...\n", last_check.tv_sec, last_check.tv_nsec);
> [...]
>
> Are these two things just relicts from your testing code?
Yes and no. I left them in because I figured they were useful additions
to the main code.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval
2016-07-28 20:43 [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval Jonathan Haws
2016-08-06 16:38 ` Sven Eckelmann
@ 2016-08-12 8:18 ` Simon Wunderlich
2016-08-15 14:59 ` Jonathan Haws
1 sibling, 1 reply; 7+ messages in thread
From: Simon Wunderlich @ 2016-08-12 8:18 UTC (permalink / raw)
To: b.a.t.m.a.n; +Cc: Jonathan Haws
[-- Attachment #1: Type: text/plain, Size: 659 bytes --]
On Thursday, July 28, 2016 2:43:16 PM CEST Jonathan Haws wrote:
> Signed-off-by: Jonathan Haws <jhaws@sdl.usu.edu>
>
> ALFRED_INTERVAL is now externalized via the -p option (synchronization
> period). If specified as option, user supplied interval is used,
> otherwise the default interval of ALFRED_INTERVAL is used.
[...]
> --- a/server.c
> +++ b/server.c
> @@ -372,7 +372,7 @@ int alfred_server(struct globals *globals)
>
> while (1) {
> clock_gettime(CLOCK_MONOTONIC, &now);
> - now.tv_sec -= ALFRED_INTERVAL;
> + time_diff(&now, &globals->sync_period, &now);
I believe this at least deserves a comment, or must be made more clear in the
code.
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval
2016-08-10 19:59 ` Jonathan Haws
@ 2016-08-12 8:20 ` Simon Wunderlich
0 siblings, 0 replies; 7+ messages in thread
From: Simon Wunderlich @ 2016-08-12 8:20 UTC (permalink / raw)
To: b.a.t.m.a.n, Jonathan Haws
[-- Attachment #1: Type: text/plain, Size: 674 bytes --]
On Wednesday, August 10, 2016 7:59:12 PM CEST Jonathan Haws wrote:
> > > + printf(" ** Setting sync interval to: %.9f seconds (%ld.
%09ld)\n",
> > > sync_period, globals->sync_period.tv_sec,
> > > globals->sync_period.tv_nsec);
>
> > [...]
> >
> > > - printf("announce master ...\n");
> > > + printf("[%ld.%09ld] announce master ...\n",
last_check.tv_sec,
> > > last_check.tv_nsec);
>
> > [...]
> >
> > Are these two things just relicts from your testing code?
>
>
> Yes and no. I left them in because I figured they were useful additions
> to the main code.
Hmm, I'm not sure if I like the format, but I guess we can keep it for now. :)
Cheers,
Simon
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval
2016-08-12 8:18 ` Simon Wunderlich
@ 2016-08-15 14:59 ` Jonathan Haws
2016-08-15 15:09 ` Simon Wunderlich
0 siblings, 1 reply; 7+ messages in thread
From: Jonathan Haws @ 2016-08-15 14:59 UTC (permalink / raw)
To: sw; +Cc: b.a.t.m.a.n
> > ALFRED_INTERVAL is now externalized via the -p option (synchronization
> > period). If specified as option, user supplied interval is used,
> > otherwise the default interval of ALFRED_INTERVAL is used.
> [...]
> > --- a/server.c
> > +++ b/server.c
> > @@ -372,7 +372,7 @@ int alfred_server(struct globals *globals)
> >
> > while (1) {
> > clock_gettime(CLOCK_MONOTONIC, &now);
> > - now.tv_sec -= ALFRED_INTERVAL;
> > + time_diff(&now, &globals->sync_period, &now);
>
> I believe this at least deserves a comment, or must be made more clear in the
> code.
This change simply does exactly what the previous code did - subtracts
the interval from the current time. It utilizes the existing
time_diff() routine to account for nanoseconds.
If you need me to resubmit with that language in the commit text or in a
C comment, I can do that.
Thanks!
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval
2016-08-15 14:59 ` Jonathan Haws
@ 2016-08-15 15:09 ` Simon Wunderlich
0 siblings, 0 replies; 7+ messages in thread
From: Simon Wunderlich @ 2016-08-15 15:09 UTC (permalink / raw)
To: Jonathan Haws; +Cc: b.a.t.m.a.n
[-- Attachment #1: Type: text/plain, Size: 1435 bytes --]
On Monday, August 15, 2016 2:59:05 PM CEST Jonathan Haws wrote:
> > > ALFRED_INTERVAL is now externalized via the -p option (synchronization
> > > period). If specified as option, user supplied interval is used,
> > > otherwise the default interval of ALFRED_INTERVAL is used.
> >
> > [...]
> >
> > > --- a/server.c
> > > +++ b/server.c
> > > @@ -372,7 +372,7 @@ int alfred_server(struct globals *globals)
> > >
> > >
> > > while (1) {
> > >
> > > clock_gettime(CLOCK_MONOTONIC, &now);
> > >
> > > - now.tv_sec -= ALFRED_INTERVAL;
> > > + time_diff(&now, &globals->sync_period, &now);
> >
> >
> > I believe this at least deserves a comment, or must be made more clear in
> > the
code.
>
>
> This change simply does exactly what the previous code did - subtracts
> the interval from the current time. It utilizes the existing
> time_diff() routine to account for nanoseconds.
>
> If you need me to resubmit with that language in the commit text or in a
> C comment, I can do that.
>
> Thanks!
I was staring at your code and time_diff() which was implemented for an
entirely different purpose, and concluded that you could be doing the right
thing ... ;)
But yes, please re-submit with a comment explaining that, or restructure
otherwise to make it more clear. time_diff() was written to get a difference
of two timestamps, not to subtracts times from each other, and that confused
me.
Thanks,
Simon
[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-08-15 15:09 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-28 20:43 [B.A.T.M.A.N.] [PATCH] alfred: Externalized synchronization interval Jonathan Haws
2016-08-06 16:38 ` Sven Eckelmann
2016-08-10 19:59 ` Jonathan Haws
2016-08-12 8:20 ` Simon Wunderlich
2016-08-12 8:18 ` Simon Wunderlich
2016-08-15 14:59 ` Jonathan Haws
2016-08-15 15:09 ` Simon Wunderlich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).