16.07.2014 17:12, Jan Friesse wrote: > Vladislav, > >> Hi Jan, >> >> 15.07.2014 18:25, Jan Friesse wrote: >>> Vladislav, >>> generally good idea. But I'm thinking about usage. What exactly is your >>> use case? >> >> I plan to use it to test configuration file validity after it is >> automatically created by my higher-level tools if for some reason >> regression testing didn't catch config anomalies. >> >>> >>> Because I can imagine use case, where user is testing config before >>> running corosync on terminal or via some tool (let's say graphic one). >>> But then, if I would be such user, I would probably like to see parser >>> errors on terminal/in tool instead of trying to find them on log (what >>> may be problem if logging section of configuration is improperly >>> configured). >>> >>> So (at least from my point of view), such test mode should set ouput to >>> stdout (or stderr) and don't allow config to change it. >>> >>> What do you think? >> >> Yep, that would be nice to have too. Although return code is more >> important. Then, if you decide to go that way, implementing '-q' (quiet) >> or '-v' (verbose on stdout) would also be nice. >> > > Yep, agree. Do you think you can prepare such patch? ;) Ugmh... I'm not sure I completely understand the logging subsystem and is able to choose the best approach.... > > Anyway, I've changed your patch to include "t" in the getopt string and > pushed. Thanks! How did I missed that string? ;) > > Regards, > Honza > >>> >>> Regards, >>> Honza >>> >>> Vladislav Bogdanov napsal(a): >>>> Signed-off-by: Vladislav Bogdanov <bubble@xxxxxxxxxxxxx> >>>> --- >>>> exec/main.c | 17 ++++++++++++++--- >>>> man/corosync.8 | 3 +++ >>>> 2 files changed, 17 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/exec/main.c b/exec/main.c >>>> index be765de..864fe33 100644 >>>> --- a/exec/main.c >>>> +++ b/exec/main.c >>>> @@ -1190,7 +1190,7 @@ int main (int argc, char **argv, char **envp) >>>> const char *error_string; >>>> struct totem_config totem_config; >>>> int res, ch; >>>> - int background, setprio; >>>> + int background, setprio, testonly; >>>> struct stat stat_out; >>>> enum e_corosync_done flock_err; >>>> uint64_t totem_config_warnings; >>>> @@ -1200,6 +1200,7 @@ int main (int argc, char **argv, char **envp) >>>> */ >>>> background = 1; >>>> setprio = 0; >>>> + testonly = 0; >>>> >>>> while ((ch = getopt (argc, argv, "fprv")) != EOF) { >>>> >>>> @@ -1212,6 +1213,9 @@ int main (int argc, char **argv, char **envp) >>>> case 'r': >>>> setprio = 1; >>>> break; >>>> + case 't': >>>> + testonly = 1; >>>> + break; >>>> case 'v': >>>> printf ("Corosync Cluster Engine, version '%s'\n", >>>> VERSION); >>>> printf ("Copyright (c) 2006-2009 Red Hat, Inc.\n"); >>>> @@ -1224,6 +1228,7 @@ int main (int argc, char **argv, char **envp) >>>> "usage:\n"\ >>>> " -f : Start application in >>>> foreground.\n"\ >>>> " -p : Does nothing. \n"\ >>>> + " -t : Test configuration and exit.\n"\ >>>> " -r : Set round robin realtime >>>> scheduling \n"\ >>>> " -v : Display version and SVN >>>> revision of Corosync and exit.\n"); >>>> logsys_system_fini(); >>>> @@ -1283,8 +1288,10 @@ int main (int argc, char **argv, char **envp) >>>> corosync_exit_error (COROSYNC_DONE_LOGCONFIGREAD); >>>> } >>>> >>>> - log_printf (LOGSYS_LEVEL_NOTICE, "Corosync Cluster Engine ('%s'): >>>> started and ready to provide service.", VERSION); >>>> - log_printf (LOGSYS_LEVEL_INFO, "Corosync built-in features:" >>>> PACKAGE_FEATURES ""); >>>> + if (!testonly) { >>>> + log_printf (LOGSYS_LEVEL_NOTICE, "Corosync Cluster Engine >>>> ('%s'): started and ready to provide service.", VERSION); >>>> + log_printf (LOGSYS_LEVEL_INFO, "Corosync built-in features:" >>>> PACKAGE_FEATURES ""); >>>> + } >>>> >>>> /* >>>> * Make sure required directory is present >>>> @@ -1336,6 +1343,10 @@ int main (int argc, char **argv, char **envp) >>>> corosync_exit_error (COROSYNC_DONE_MAINCONFIGREAD); >>>> } >>>> >>>> + if (testonly) { >>>> + corosync_exit_error (COROSYNC_DONE_EXIT); >>>> + } >>>> + >>>> ip_version = totem_config.ip_version; >>>> >>>> totem_config.totem_memb_ring_id_create_or_load = >>>> corosync_ring_id_create_or_load; >>>> diff --git a/man/corosync.8 b/man/corosync.8 >>>> index 59b2dda..559b392 100644 >>>> --- a/man/corosync.8 >>>> +++ b/man/corosync.8 >>>> @@ -50,6 +50,9 @@ Does nothing (was: "Do not set process priority" - >>>> this is now the default). >>>> .B -r >>>> Set round robin realtime scheduling. >>>> .TP >>>> +.B -t >>>> +Test configuration and then exit. >>>> +.TP >>>> .B -v >>>> Display version and SVN revision of Corosync and exit. >>>> .SH SEE ALSO >>>> >>> >> > _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss