[Gluster-devel] [RFC] FUSE bridge based on GlusterFS API
Oleksandr Natalenko
oleksandr at natalenko.name
Thu Apr 7 19:32:18 UTC 2016
Hello.
Pranith and Niels encouraged me to share here my toy project of simple FUSE
bridge that uses GlusterFS API [1].
The rationale for this is that FUSE bridge currently present in GlusterFS code
does not use GlusterFS API, and that is considered to be wrong, and there are
some plans to replace it with modern solution. xglfs code could potentially go
under glusterfs tree if the developers decide it should happen. Also, it could
be rpm'ed and suggested to Fedora users.
Now xglfs it is just a separate executable that relies on glusterfs-devel and
fuse-devel packages and does simple conversion between FUSE VFS calls and
GlusterFS API. Thanks to API completeness (well, glfs_truncate() is an
exception, AFAIK), this custom bridge is really thin and small.
As a guide I used Big Brother File System code by Joseph J. Pfeiffer, Jr. [2]
that is freely available in the Internet (version 2014-06-12, but newer
version has been released recently). However, I've adopted it to current FUSE
libs reality just by inspecting /usr/include/fuse/fuse.h carefully and
defining FUSE_USE_VERSION=26 explicitly.
What I would like for reviewers to pay an attention for:
* error path handling correctness (mostly, negated errno value is returned, is
that correct?);
* fops semantic correctness;
* everything else you would like to comment on or suggest.
The code itself has been verified by GCC, Clang (+analyzer), Intel C Compiler,
cppcheck and Valgrind. No idea what could go wrong there :). However, I'm not
responsible for data damage caused by this project, of course.
Some things remain not so clear to me:
* FUSE .bmap fop (wtf is that?);
* trickery with .fgetattr (do we need that trickery?);
* .flush fop (no GlusterFS equivalent?);
* fsync/fdatasync difference for GlusterFS;
* .fsyncdir fop (again, wtf?);
* WHERE IS MY glfs_truncate()?
Feel free to happily accept this project or ignore it silently. Nevertheless,
I would be happy to see your pull requests or comments, or even results of
some test you might want to perform on you critical production. Also, I know
that Soumya has already tried xglfs, and I would be glad if she shares some
experience on it.
Best wishes,
post-factum
[1] https://github.com/pfactum/xglfs
[2] http://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/
More information about the Gluster-devel
mailing list