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

Ben Pfaff blp at nicira.com
Mon Feb 7 20:52:06 UTC 2011


Thanks for the review.  I'm going to push this pair of commits out soon
so that this one gets some testing.

On Sun, Feb 06, 2011 at 11:51:17PM -0800, Justin Pettit wrote:
> 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