[libvirt] [PATCHv3 3/4] storage: implement rudimentary glusterfs pool refresh

Eric Blake eblake at redhat.com
Tue Nov 12 18:52:14 UTC 2013


On 11/12/2013 08:35 AM, Peter Krempa wrote:
> On 11/12/13 05:19, 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.
>>
>> I've reported a couple of glusterfs bugs; if we were to require a
>> minimum of (not-yet-released) glusterfs 3.5, we could use the new
>> glfs_readdir [1] and not worry about the bogus return value of
>> glfs_fini [2], but for now I'm testing with Fedora 19's glusterfs
>> 3.4.1.
> 
> I'm not sure if this paragraph is suitable in a commit message.

Yes, because it justifies why we require a minimum version of gluster,
and what it would take to bump that minimum version (whether up or
down).  But perhaps it belongs better in 1/4 when we actually do
autoconf probing for a particular glusterfs version.  I'll move it.

>> +
>> +    /* 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 (state->vol && glfs_fini(state->vol) < 0)
>> +        VIR_DEBUG("shutdown of gluster volume %s failed with errno %d",
>> +                  state->volname, errno);
> 
> I'm not sure if we can do anything else if close of the volume fails.
> The only change would be to report something more critical.

The problem is that gluster 3.4.1 _always_ reports failure, even when it
succeeds.  If we were to require a minimum of (not-yet-released) 3.4.2,
where that gluster bug is fixed, then yes we could log something more
critical on failure to close.

>> +static virStorageBackendGlusterStatePtr
>> +virStorageBackendGlusterOpen(virStoragePoolObjPtr pool)
>> +{
>> +    virStorageBackendGlusterStatePtr ret = NULL;
>> +    char *sub;
>> +    const char *name = pool->def->source.name;
>> +
>> +    if (VIR_ALLOC(ret) < 0)
>> +        return NULL;
>> +
>> +    if (*name == '/')
>> +        name++;
> 
> Wouldn't it be better just to forbid names with slashes? or trim them
> away when creating the pool? This would avoid multiple of such hacks.

Dan asked a similar question on 1/4; I guess we need to make sure we are
happy with the XML representation (or whether I need to revisit things
to make the XML specify volume separately from subdirectory, rather than
my current attempt to hack volume/subdir into a single name).

>> +    /* FIXME: Currently hard-coded to tcp transport; XML needs to be
>> +     * extended to allow alternate transport */
> 
> Okay for now IMHO.
> 
>> +    if (VIR_ALLOC(ret->uri) < 0 ||
>> +        VIR_STRDUP(ret->uri->scheme, "gluster") < 0 ||
>> +        VIR_STRDUP(ret->uri->server, pool->def->source.hosts[0].name) < 0 ||
>> +        virAsprintf(&ret->uri->path, "%s%s",
>> +                    *pool->def->source.name == '/' ? "" : "/",
>> +                    pool->def->source.name) < 0)
> 
> Same as above, if we would trim away the slash, we could add it without
> the need to check for it.

And maybe I should just canonicalize what the user passed in, so that
the rest of the code doesn't have to keep checking.  But one thing I did
do well in this patch was isolating the '/' games to just the open
method; the rest of the code reuses details learned here, rather than
repeating the conditionals.

>> +        virReportSystemError(errno, _("failed to connect to %s"),
>> +                             NULLSTR(uri));
> 
> I'd suggest adding apostrophes around %s to denote the URI as we do in
> other places.

Done.

>> +    /* Silently skip directories, including '.' and '..'.  FIXME:
>> +     * should non-'.' subdirectories be listed as type dir?  */
> 
> Is it even possible to use them with qemu as dir-type volumes?

Yes, a 'directory' pool lists dir-type volumes for all subdirectories,
skipping only '.' and '..'.  I'll see about wiring that in, and whether
it's easier to respin this patch or treat it as a followup.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20131112/147fdc27/attachment-0001.sig>


More information about the libvir-list mailing list