On 10/30/2013 05:30 PM, Eric Blake wrote:
Actually put gfapi to use, by allowing the creation of a gluster
pool. Right now, all volumes are treated as raw; further patches
will allow peering into files to allow for qcow2 files and backing
chains, and reporting proper volume allocation.
Needs a v2 for several reasons:
+
+static void
+virStorageBackendGlusterClose(virStorageBackendGlusterStatePtr state)
+{
+ if (!state || !state->vol)
+ return;
+ /* Yuck - glusterfs-api-3.4.1 appears to always return -1 for
+ * glfs_fini, with errno containing random data, so there's no way
+ * to tell if it succeeded. 3.4.2 is supposed to fix this.*/
+ if (glfs_fini(state->vol) < 0)
+ VIR_DEBUG("shutdown of gluster failed with errno %d", errno);
+}
Leaks state.
+
+static virStorageBackendGlusterStatePtr
+virStorageBackendGlusterOpen(virStoragePoolObjPtr pool)
+{
+ virStorageBackendGlusterStatePtr ret = NULL;
+
+ if (VIR_ALLOC(ret) < 0)
+ return NULL;
+
+ if (!(ret->vol = glfs_new(pool->def->source.name))) {
Fails for subdirectory access (qemu allows gluster://host/vol/dir/file,
so we should allow vol/dir as a pool name in the XML, but glfs requires
us to open vol then chdir to dir, rather than opening vol/dir in one go).
+ virReportOOMError();
+ goto error;
+ }
+
+ /* FIXME: allow alternate transport in the pool xml */
+ if (glfs_set_volfile_server(ret->vol, "tcp",
+ pool->def->source.hosts[0].name,
+ pool->def->source.hosts[0].port) < 0 ||
+ glfs_init(ret->vol) < 0) {
+ virReportSystemError(errno, _("failed to connect to gluster %s/%s"),
+ pool->def->source.hosts[0].name,
+ pool->def->name);
Reports the wrong name (should be pool->def->source.name).
And I'm still working on the followup patches for qcow2 metadata parsing...
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org