[lxc-devel] [PATCH] introduce snapshot_destroy
Serge Hallyn
serge.hallyn at ubuntu.com
Thu Oct 17 15:13:23 UTC 2013
Quoting S.Çağlar Onur (caglar at 10ur.org):
> Signed-off-by: S.Çağlar Onur <caglar at 10ur.org>
Thanks, +1, just one thing:
> ---
> src/lxc/lxccontainer.c | 32 ++++++++++++++++++++++++++++++++
> src/lxc/lxccontainer.h | 7 +++++++
> 2 files changed, 39 insertions(+)
>
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 6f97879..73a71ce 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -2609,6 +2609,37 @@ static bool lxcapi_snapshot_restore(struct lxc_container *c, char *snapname, cha
> return b;
> }
>
> +static bool lxcapi_snapshot_destroy(struct lxc_container *c, char *snapname)
> +{
> + int ret;
> + char clonelxcpath[MAXPATHLEN];
> + struct lxc_container *snap = NULL;
> +
> + if (!c || !c->name || !c->config_path)
> + return false;
> +
> + ret = snprintf(clonelxcpath, MAXPATHLEN, "%ssnaps/%s", c->config_path, c->name);
> + if (ret < 0 || ret >= MAXPATHLEN)
> + goto err;
> +
> + snap = lxc_container_new(snapname, clonelxcpath);
> + if (!snap || !lxcapi_is_defined(snap)) {
> + ERROR("Could not find snapshot %s", snapname);
> + goto err;
> + }
> +
> + if (!lxcapi_destroy(snap)) {
> + ERROR("Could not destroy snapshot %s", snapname);
> + goto err;
> + }
After a destroy, you should still lxc_container_put(snap).
This is why lxc_destroy.c, even though it is not threaded and
technically doesn't need it, should do the put as well - to set
an example. Please feel free to add that to this patch as well,
along with a rebuke to Serge for not doing that in the first
place.
> +
> + return true;
> +err:
> + if (snap)
> + lxc_container_put(snap);
> + return false;
> +}
> +
> static bool lxcapi_may_control(struct lxc_container *c)
> {
> return lxc_try_cmd(c->name, c->config_path) == 0;
> @@ -2733,6 +2764,7 @@ struct lxc_container *lxc_container_new(const char *name, const char *configpath
> c->snapshot = lxcapi_snapshot;
> c->snapshot_list = lxcapi_snapshot_list;
> c->snapshot_restore = lxcapi_snapshot_restore;
> + c->snapshot_destroy = lxcapi_snapshot_destroy;
> c->may_control = lxcapi_may_control;
>
> /* we'll allow the caller to update these later */
> diff --git a/src/lxc/lxccontainer.h b/src/lxc/lxccontainer.h
> index 5901066..adcac6a 100644
> --- a/src/lxc/lxccontainer.h
> +++ b/src/lxc/lxccontainer.h
> @@ -225,6 +225,13 @@ struct lxc_container {
> bool (*snapshot_restore)(struct lxc_container *c, char *snapname, char *newname);
>
> /*
> + * snapshot_destroy() will destroy the given snapshot of c
> + *
> + * Returns true on success, false on failure.
> + */
> + bool (*snapshot_destroy)(struct lxc_container *c, char *snapname);
> +
> + /*
> * Return false if there is a control socket for the container monitor,
> * and the caller may not access it. Return true otherwise.
> */
> --
> 1.8.1.2
>
>
> ------------------------------------------------------------------------------
> October Webinars: Code for Performance
> Free Intel webinars can help you accelerate application performance.
> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
> the latest Intel processors and coprocessors. See abstracts and register >
> http://pubads.g.doubleclick.net/gampad/clk?id=60135031&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