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(a)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