diff --git a/docs/storage.html.in b/docs/storage.html.in
index 2706bc546d..eb38b16abf 100644
--- a/docs/storage.html.in
+++ b/docs/storage.html.in
@@ -711,12 +711,14 @@
correspond to the files that can be found when mounting the
gluster volume. The name
is the path relative to
the effective mount specified for the pool; and
- the key
is a path including the gluster volume
- name and any subdirectory specified by the pool.
key
is a string that identifies a single volume
+ uniquely. Currently the key
attribute consists of the
+ URI of the volume but it may be changed to a UUID of the volume
+ in the future.
<volume> <name>myfile</name> - <key>volname/myfile</key> + <key>gluster://localhost/volname/myfile</key> <source> </source> <capacity unit='bytes'>53687091200</capacity> diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c index 5e0acc0651..67adda9eb7 100644 --- a/src/storage/storage_backend_gluster.c +++ b/src/storage/storage_backend_gluster.c @@ -187,6 +187,7 @@ virStorageBackendGlusterSetMetadata(virStorageBackendGlusterStatePtr state, const char *name) { int ret = -1; + char *path = NULL; char *tmp; VIR_FREE(vol->key); @@ -201,12 +202,12 @@ virStorageBackendGlusterSetMetadata(virStorageBackendGlusterStatePtr state, goto cleanup; } - if (virAsprintf(&vol->key, "%s%s%s", state->volname, state->dir, + if (virAsprintf(&path, "%s%s%s", state->volname, state->dir, vol->name) < 0) goto cleanup; tmp = state->uri->path; - if (virAsprintf(&state->uri->path, "/%s", vol->key) < 0) { + if (virAsprintf(&state->uri->path, "/%s", path) < 0) { state->uri->path = tmp; goto cleanup; } @@ -218,9 +219,14 @@ virStorageBackendGlusterSetMetadata(virStorageBackendGlusterStatePtr state, VIR_FREE(state->uri->path); state->uri->path = tmp; + /* the path is unique enough to serve as a volume key */ + if (VIR_STRDUP(vol->key, vol->target.path) < 0) + goto cleanup; + ret = 0; cleanup: + VIR_FREE(path); return ret; }