[libvirt] [PATCH v3] daemon: Add early libvirtd start verbose errors.

Early errors during start of libvirtd didn't have an error reporting mechanism and caused libvirtd to exit silently (only the return value indicated an error). Libvirt logging is initialized very early using enviroment variables and the internal error reporting API is used to report early errors. v2 changes: - print errors unconditionaly before logging starts - fix message to US spelling v2.5 changes: - initialize logging from enviroment - log all early errors using VIR_ERROR v3 changes: - move virSetLogFromEnv() after virInitialize() fixes: https://bugzilla.redhat.com/show_bug.cgi?id=728654 --- On 08/12/2011 12:09 PM, Daniel P. Berrange wrote:
Ok, not quiet that early. virInitialize() must be the first libvirt call made since it initializes threading which is needed by logging.
Uh, sorry. I didn't check for that. Now it should be in the correct place.
Daniel
Peter Krempa daemon/libvirtd.c | 39 +++++++++++++++++++++++++++++---------- 1 files changed, 29 insertions(+), 10 deletions(-) diff --git a/daemon/libvirtd.c b/daemon/libvirtd.c index 53f1002..c7382b0 100644 --- a/daemon/libvirtd.c +++ b/daemon/libvirtd.c @@ -1293,6 +1293,9 @@ int main(int argc, char **argv) { exit(EXIT_FAILURE); } + /* initialize early logging */ + virLogSetFromEnv(); + while (1) { int optidx = 0; int c; @@ -1328,14 +1331,18 @@ int main(int argc, char **argv) { case 'p': VIR_FREE(pid_file); - if (!(pid_file = strdup(optarg))) + if (!(pid_file = strdup(optarg))) { + VIR_ERROR(_("Can't allocate memory")); exit(EXIT_FAILURE); + } break; case 'f': VIR_FREE(remote_config_file); - if (!(remote_config_file = strdup(optarg))) + if (!(remote_config_file = strdup(optarg))) { + VIR_ERROR(_("Can't allocate memory")); exit(EXIT_FAILURE); + } break; case OPT_VERSION: @@ -1347,27 +1354,33 @@ int main(int argc, char **argv) { return 2; default: - fprintf (stderr, _("%s: internal error: unknown flag: %c\n"), - argv[0], c); + VIR_ERROR(_("%s: internal error: unknown flag: %c"), + argv[0], c); exit (EXIT_FAILURE); } } - if (!(config = daemonConfigNew(privileged))) + if (!(config = daemonConfigNew(privileged))) { + VIR_ERROR(_("Can't create initial configuration")); exit(EXIT_FAILURE); + } /* No explicit config, so try and find a default one */ if (remote_config_file == NULL) { implicit_conf = true; if (daemonConfigFilePath(privileged, - &remote_config_file) < 0) + &remote_config_file) < 0) { + VIR_ERROR(_("Can't determine config path")); exit(EXIT_FAILURE); + } } /* Read the config file if it exists*/ if (remote_config_file && - daemonConfigLoad(config, remote_config_file, implicit_conf) < 0) + daemonConfigLoad(config, remote_config_file, implicit_conf) < 0) { + VIR_ERROR(_("Can't load config file '%s'"), remote_config_file); exit(EXIT_FAILURE); + } if (config->host_uuid && virSetHostUUIDStr(config->host_uuid) < 0) { @@ -1375,19 +1388,25 @@ int main(int argc, char **argv) { exit(EXIT_FAILURE); } - if (daemonSetupLogging(config, privileged, verbose, godaemon) < 0) + if (daemonSetupLogging(config, privileged, verbose, godaemon) < 0) { + VIR_ERROR(_("Can't initialize logging")); exit(EXIT_FAILURE); + } if (!pid_file && privileged && daemonPidFilePath(privileged, - &pid_file) < 0) + &pid_file) < 0) { + VIR_ERROR(_("Can't determine pid file path.")); exit(EXIT_FAILURE); + } if (daemonUnixSocketPaths(config, privileged, &sock_file, - &sock_file_ro) < 0) + &sock_file_ro) < 0) { + VIR_ERROR(_("Can't determine socket paths")); exit(EXIT_FAILURE); + } if (godaemon) { char ebuf[1024]; -- 1.7.6

On 08/12/2011 05:41 AM, Peter Krempa wrote:
Early errors during start of libvirtd didn't have an error reporting mechanism and caused libvirtd to exit silently (only the return value indicated an error).
Libvirt logging is initialized very early using enviroment variables and the internal error reporting API is used to report early errors.
v2 changes: - print errors unconditionaly before logging starts - fix message to US spelling v2.5 changes: - initialize logging from enviroment - log all early errors using VIR_ERROR v3 changes: - move virSetLogFromEnv() after virInitialize()
fixes: https://bugzilla.redhat.com/show_bug.cgi?id=728654 ---
ACK and pushed. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
participants (2)
-
Eric Blake
-
Peter Krempa