[lxc-devel] [PATCH] python3: Allow setting daemonize and close_fds
Serge Hallyn
serge.hallyn at ubuntu.com
Fri Nov 29 15:27:15 UTC 2013
Quoting Stéphane Graber (stgraber at ubuntu.com):
> This extends the list of arguments of start() allowing the user to
> request the container be started in the foreground and have control on
> whether fds will be closed or not (daemonize=True implies that too).
>
> One problem at the moment however is that while we have functions to set
> close_fds and daemonize in the API, we don't have functions to unset
> those flags, so those new parameters will only work on the initial call
> to start() any further call will use the values of the previous one.
>
> I think it'd make sense to change lxcapi slightly to have daemonize and
> close_fds offer a similar interface, both returning booleans and both
> accepting a value as a parameter so API users can set the value they
> want.
What would be the point in checking the value as opposed to simply
setting the one you want?
If unsetting is all we need, we could just add a boolean argument to
want_damonize and want_close_all_fds. If there is a good reason to
be able to check the values, then we can either add a get_daemonize,
or make the second argument to want_daemonize an int, where -1 means
unset, 1 means set, and 0 means just give me the return value.
Or maybe we want to just add new api fns so as not to change the
existing api? I'm feeling indecisive.
> Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>
> ---
> src/python-lxc/lxc.c | 33 +++++++++++++++++++++++++--------
> 1 file changed, 25 insertions(+), 8 deletions(-)
>
> diff --git a/src/python-lxc/lxc.c b/src/python-lxc/lxc.c
> index f850a3d..5a20ff4 100644
> --- a/src/python-lxc/lxc.c
> +++ b/src/python-lxc/lxc.c
> @@ -1221,13 +1221,21 @@ Container_snapshot_restore(Container *self, PyObject *args, PyObject *kwds)
> static PyObject *
> Container_start(Container *self, PyObject *args, PyObject *kwds)
> {
> + PyObject *useinit = NULL;
> + PyObject *daemonize = NULL;
> + PyObject *close_fds = NULL;
> +
> + PyObject *vargs = NULL;
> char** init_args = {NULL};
> - PyObject *useinit = NULL, *retval = NULL, *vargs = NULL;
> +
> + PyObject *retval = NULL;
> int init_useinit = 0, i = 0;
> - static char *kwlist[] = {"useinit", "cmd", NULL};
> + static char *kwlist[] = {"useinit", "daemonize", "close_fds",
> + "cmd", NULL};
>
> - if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OO", kwlist,
> - &useinit, &vargs))
> + if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOOO", kwlist,
> + &useinit, &daemonize, &close_fds,
> + &vargs))
> return NULL;
>
> if (useinit && useinit == Py_True) {
> @@ -1241,7 +1249,13 @@ Container_start(Container *self, PyObject *args, PyObject *kwds)
> }
> }
>
> - self->container->want_daemonize(self->container);
> + if (close_fds && close_fds == Py_True) {
> + self->container->want_close_all_fds(self->container);
> + }
> +
> + if (!daemonize || daemonize == Py_True) {
> + self->container->want_daemonize(self->container);
> + }
>
> if (self->container->start(self->container, init_useinit, init_args))
> retval = Py_True;
> @@ -1519,10 +1533,13 @@ static PyMethodDef Container_methods[] = {
> },
> {"start", (PyCFunction)Container_start,
> METH_VARARGS|METH_KEYWORDS,
> - "start(useinit = False, cmd = (,)) -> boolean\n"
> + "start(useinit = False, daemonize=True, close_fds=False, "
> + "cmd = (,)) -> boolean\n"
> "\n"
> - "Start the container, optionally using lxc-init and "
> - "an alternate init command, then returns its return code."
> + "Start the container, return True on success.\n"
> + "When set useinit will make LXC use lxc-init to start the container.\n"
> + "The container can be started in the foreground with daemonize=False.\n"
> + "All fds may also be closed by passing close_fds=True."
> },
> {"stop", (PyCFunction)Container_stop,
> METH_NOARGS,
> --
> 1.8.4.4
>
>
> ------------------------------------------------------------------------------
> Rapidly troubleshoot problems before they affect your business. Most IT
> organizations don't have a clear picture of how application performance
> affects their revenue. With AppDynamics, you get 100% visibility into your
> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel
More information about the lxc-devel
mailing list