Re: [PATCH] Implement config file testing mode.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Vladislav,
generally good idea. But I'm thinking about usage. What exactly is your use case?

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?

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




[Index of Archives]     [Linux Clusters]     [Corosync Project]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]    [Yosemite Photos]    [Linux Kernel]     [Linux SCSI]     [X.Org]

  Powered by Linux