]> xenbits.xensource.com Git - libvirt.git/commitdiff
gluster: Fix "key" attribute for gluster volumes
authorPeter Krempa <pkrempa@redhat.com>
Mon, 24 Feb 2014 15:12:34 +0000 (16:12 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 1 Apr 2014 06:44:34 +0000 (08:44 +0200)
According to our documentation the "key" value has the following
meaning: "Providing an identifier for the volume which identifies a
single volume." The currently used keys for gluster volumes consist of
the gluster volume name and file path. This can't be considered unique
as a different storage server can serve a volume with the same name.

Unfortunately I wasn't able to figure out a way to retrieve the gluster
volume UUID which would avoid the possibility of having two distinct
keys identifying a single volume.

Use the full URI as the key for the volume to avoid the more critical
ambiguity problem and document the possible change to UUID.

docs/storage.html.in
src/storage/storage_backend_gluster.c

index 2706bc546d23fd624396f7a32c1c4fe737207561..eb38b16abfebb22bee6231391cf593b9d92e40a5 100644 (file)
       correspond to the files that can be found when mounting the
       gluster volume.  The <code>name</code> is the path relative to
       the effective mount specified for the pool; and
-      the <code>key</code> is a path including the gluster volume
-      name and any subdirectory specified by the pool.</p>
+      the <code>key</code> is a string that identifies a single volume
+      uniquely. Currently the <code>key</code> attribute consists of the
+      URI of the volume but it may be changed to a UUID of the volume
+      in the future.</p>
     <pre>
        &lt;volume&gt;
          &lt;name&gt;myfile&lt;/name&gt;
-         &lt;key&gt;volname/myfile&lt;/key&gt;
+         &lt;key&gt;gluster://localhost/volname/myfile&lt;/key&gt;
          &lt;source&gt;
          &lt;/source&gt;
          &lt;capacity unit='bytes'&gt;53687091200&lt;/capacity&gt;
index 5e0acc0651b5a0380d8d8f5977eb0cebec70d9d9..67adda9eb7926a47b43b2f062f726495e817c4d6 100644 (file)
@@ -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;
 }