[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