[libvirt] [PATCHv3 3/4] storage: implement rudimentary glusterfs pool refresh
Eric Blake
eblake at redhat.com
Tue Nov 12 19:01:11 UTC 2013
On 11/12/2013 09:58 AM, Daniel P. Berrange wrote:
> On Mon, Nov 11, 2013 at 09:19:30PM -0700, 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.
>>
>> + /* FIXME: Currently hard-coded to tcp transport; XML needs to be
>> + * extended to allow alternate transport */
>> + 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)
>> + goto error;
>
> I'm not a huge fan of chaining together statements like this,
> since some gdb versions are pretty awful at telling you which
> one of these 4 statements has the problem on segv.
Easy enough to split; so consider it done.
>> + /* Silently skip directories, including '.' and '..'. FIXME:
>> + * should non-'.' subdirectories be listed as type dir? */
>
> What behaviour does the 'fs' pool have in for non-'.' subdirs ?
> Seems we perhaps ought to match that.
Peter asked the same question - guess I'm stuck doing that :)
>> +
>> + /* FIXME - must open files to determine if they are non-raw */
>> + vol->type = VIR_STORAGE_VOL_NETWORK;
>> + vol->target.format = VIR_STORAGE_FILE_RAW;
>> + vol->capacity = vol->allocation = st->st_size;
>
> So gluster has no concept of sparse volumes ?
Gluster has sparse support; I need to flesh this out a bit more, based
on how directory pools do it (both pools have a struct stat to work
with); I also need to populate ownership details.
>> +
>> + if (!(state = virStorageBackendGlusterOpen(pool)))
>> + goto cleanup;
>
> What kind of overhead is there in opening / closing gluster connections ?
> Is it something we should just do in the pool start/stop methods, instead
> of on every operation like refresh.
I was just copying after rbd. In gdb, I see several threads spawned for
every refresh operation; but I can certainly try to rework things to
open at pool start instead. Should I do it on this patch, or save it
for a followup?
The other consideration is that eventually, the
src/util/virstoragefile.c code will need to call into the
src/storage/storage_driver.c code (indirectly, via the virConnectPtr)
when doing recursive backing chain checking; in that case, I'm
envisioning a new callback (internal-only, no public API needed) that
roughly says: "given this URI for a backing file, tell me if you have a
backend for parsing the file, and if so, grab the header from that
file"; which means my ultimate goal is to have a reusable method that
both the pool XML (given host and name, [or host, volume, subdir, based
on review of 1/4]) and the qemu URI (given a string
"gluster://host/vol/..."). So while pool start may be better than pool
refresh for opening a glfs connection, the ability to open a glfs
connection also needs to be modular enough to reuse for one-off parsing
of a URI.
>> + if (glfs_statvfs(state->vol, state->dir, &sb) < 0) {
>> + virReportSystemError(errno, _("cannot statvfs path '%s'"), pool->def->source.name);
>
> Seems you lost the line break here.
Yep, Peter caught it too.
--
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/7d0c6431/attachment-0001.sig>
More information about the libvir-list
mailing list