[libvirt] [PATCH 7/7] storage:dir: adapts .uploadVol .dowloadVol for ploop volume
Ján Tomko
jtomko at redhat.com
Fri Apr 15 15:01:46 UTC 2016
On Mon, Apr 11, 2016 at 07:16:25PM +0300, Olga Krishtal wrote:
> In case of ploop volume, target path of the volume is the path to the
> directory that contains image file named root.hds and DiskDescriptor.xml.
> While using uploadVol and downloadVol callbacks we need to open root.hds
> itself.
> Upload or download operations with ploop volume are only allowed when
> images do not have snapshots. Otherwise operation fails.
>
> Signed-off-by: Olga Krishtal <okrishtal at virtuozzo.com>
> ---
> src/storage/storage_backend.c | 99 +++++++++++++++++++++++++++++++++++++++++--
> src/storage/storage_driver.c | 51 +++++++++++++++++++++-
> 2 files changed, 146 insertions(+), 4 deletions(-)
>
ACK
> +static int
> +virStorageBackendPloopHasSnapshots(char *path)
> +{
> + virCommandPtr cmd = NULL;
> + char *output = NULL;
> + char *snap_tool = NULL;
> + int ret = -1;
> +
> + snap_tool = virFindFileInPath("ploop");
> + if (!snap_tool) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + "%s", _("can't upload volume,"
> + " please install ploop tool "));
This error message has a trailing space so I replaced it with the one
used by other calls:
- "%s", _("can't upload volume,"
- " please install ploop tool "));
+ "%s", _("unable to find ploop, please install "
+ "ploop tools"));
> + return ret;
> + }
> +
> + cmd = virCommandNewArgList(snap_tool, "snapshot-list", NULL);
> + virCommandAddArgFormat(cmd, "%s/DiskDescriptor.xml", path);
> + virCommandSetOutputBuffer(cmd, &output);
> +
> + if ((ret = virCommandRun(cmd, NULL)) < 0)
> + goto cleanup;
> +
> + if (!strstr(output, "root.hds.")) {
> + ret = 1;
> @@ -2296,7 +2343,6 @@ storageVolUpload(virStorageVolPtr obj,
> vol->name);
> goto cleanup;
> }
> -
Unrelated whitespace change.
> if (!backend->uploadVol) {
> virReportError(VIR_ERR_NO_SUPPORT, "%s",
> _("storage pool doesn't support volume upload"));
> @@ -2313,6 +2359,9 @@ storageVolUpload(virStorageVolPtr obj,
> if (VIR_ALLOC(cbdata) < 0 ||
> VIR_STRDUP(cbdata->pool_name, pool->def->name) < 0)
> goto cleanup;
> + if (vol->target.type == VIR_STORAGE_VOL_PLOOP &&
> + VIR_STRDUP(cbdata->vol_path, vol->target.path) < 0)
> + goto cleanup;
The indentation is off here.
Jan
More information about the libvir-list
mailing list