[ovs-dev] [kernel-reload 2/8] ovs-vswitchd: Complete daemonization only after initial configuration.

Justin Pettit jpettit at nicira.com
Mon Feb 7 07:51:17 UTC 2011


Looks good.

--Justin


On Feb 2, 2011, at 2:31 PM, Ben Pfaff wrote:

> Otherwise when we add support for saving and restoring configuration
> of internal devices around kernel module unload and reload, there's
> no easy way for the "restore" code to tell when all the interfaces
> should be set up and ready for configuration.
> ---
> lib/daemon.c               |    8 ++++++--
> lib/daemon.man             |    2 +-
> ovsdb/ovsdb-server.1.in    |    3 +++
> vswitchd/bridge.c          |    5 +++++
> vswitchd/ovs-vswitchd.8.in |    4 ++++
> vswitchd/ovs-vswitchd.c    |    4 +---
> 6 files changed, 20 insertions(+), 6 deletions(-)
> 
> diff --git a/lib/daemon.c b/lib/daemon.c
> index c0f1682..3f668b9 100644
> --- a/lib/daemon.c
> +++ b/lib/daemon.c
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2008, 2009, 2010 Nicira Networks.
> + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -475,11 +475,14 @@ daemonize_start(void)
> }
> 
> /* If daemonization is configured, then this function notifies the parent
> - * process that the child process has completed startup successfully. */
> + * process that the child process has completed startup successfully.
> + *
> + * Calling this function more than once has no additional effect. */
> void
> daemonize_complete(void)
> {
>     fork_notify_startup(daemonize_fd);
> +    daemonize_fd = -1;
> 
>     if (detach) {
>         setsid();
> @@ -487,6 +490,7 @@ daemonize_complete(void)
>             ignore(chdir("/"));
>         }
>         close_standard_fds();
> +        detach = false;
>     }
> }
> 
> diff --git a/lib/daemon.man b/lib/daemon.man
> index d9f25e1..7b07cb8 100644
> --- a/lib/daemon.man
> +++ b/lib/daemon.man
> @@ -20,7 +20,7 @@ When \fB\-\-pidfile\fR is not specified, this option has no effect.
> .TP
> \fB\-\-detach\fR
> Causes \fB\*(PN\fR to detach itself from the foreground session and
> -run as a background process.
> +run as a background process. \*(DD
> .
> .TP
> \fB\-\-monitor\fR
> diff --git a/ovsdb/ovsdb-server.1.in b/ovsdb/ovsdb-server.1.in
> index a89f091..6100c4d 100644
> --- a/ovsdb/ovsdb-server.1.in
> +++ b/ovsdb/ovsdb-server.1.in
> @@ -81,6 +81,9 @@ This option can be useful where a database server is needed only to
> run a single command, e.g.:
> .B "ovsdb\-server \-\-remote=punix:socket \-\-run='ovsdb\-client dump unix:socket Open_vSwitch'"
> .SS "Daemon Options"
> +.ds DD \
> +\fBovsdb\-server\fR detaches only after it starts listening on all \
> +configured remotes.
> .so lib/daemon.man
> .SS "Logging Options"
> .so lib/vlog.man
> diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
> index fab6194..43e10fc 100644
> --- a/vswitchd/bridge.c
> +++ b/vswitchd/bridge.c
> @@ -35,6 +35,7 @@
> #include "cfm.h"
> #include "classifier.h"
> #include "coverage.h"
> +#include "daemon.h"
> #include "dirs.h"
> #include "dpif.h"
> #include "dynamic-string.h"
> @@ -891,6 +892,10 @@ bridge_reconfigure(const struct ovsrec_open_vswitch *ovs_cfg)
>     }
> 
>     free(managers);
> +
> +    /* ovs-vswitchd has completed initialization, so allow the process that
> +     * forked us to exit successfully. */
> +    daemonize_complete();
> }
> 
> static const char *
> diff --git a/vswitchd/ovs-vswitchd.8.in b/vswitchd/ovs-vswitchd.8.in
> index 5c52526..163ad20 100644
> --- a/vswitchd/ovs-vswitchd.8.in
> +++ b/vswitchd/ovs-vswitchd.8.in
> @@ -102,6 +102,10 @@ to be loaded.
> .IP
> On non-Linux hosts, this option is accepted but has no effect.
> .
> +.ds DD \
> +\fBovs\-vswitchd\fR detaches only after it has connected to the \
> +database, retrieved the initial configuration, and set up that \
> +configuration.
> .so lib/daemon.man
> .SS "Public Key Infrastructure Options"
> .so lib/ssl.man
> diff --git a/vswitchd/ovs-vswitchd.c b/vswitchd/ovs-vswitchd.c
> index 4ebc8f2..2181e82 100644
> --- a/vswitchd/ovs-vswitchd.c
> +++ b/vswitchd/ovs-vswitchd.c
> @@ -1,4 +1,4 @@
> -/* Copyright (c) 2008, 2009, 2010 Nicira Networks
> +/* Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -84,8 +84,6 @@ main(int argc, char *argv[])
>     }
>     unixctl_command_register("exit", ovs_vswitchd_exit, &exiting);
> 
> -    daemonize_complete();
> -
>     bridge_init(remote);
>     exiting = false;
>     while (!exiting) {
> -- 
> 1.7.1
> 
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org





More information about the dev mailing list