Hello,
As a proof of concept I'm trying to write a xlator that does nothing, I call it "nop". The code for "nop.c" is simply:
struct xlator_fops fops = {};
struct xlator_cbks cbks = {};
struct xlator_dumpops dumpops = {};
struct volume_options options[] = {{.key={NULL}},};
int32_t init (xlator_t *this){return 0;}
int fini (xlator_t *this){return 0;}
And I compile it with:
$ gcc -fPIC -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DGF_LINUX_HOST_OS -shared -nostartfiles -lglusterfs -lpthread -I${GFS} -I${GFS}/libglusterfs/src -I${GFS}/contrib/uuid nop.c -o nop.so
Then, if I try a test.vol file like that:
option directory /home/llpamies/Projects/gluster/test-split/node0-data
type performance/io-cache
and mount it with:
$ glusterfs --debug -f test.vol /mount/point
It seems to work fine, doing nothing. However, when used together with the stripe xlator as follows:
option directory /home/llpamies/Projects/gluster/test-split/node0-data
option directory /home/llpamies/Projects/gluster/test-split/node1-data
subvolumes test-nop0 test-nop1
Glusterfs hangs during the first fuse lookup for ".Trash", and /mount/point looks unmounted with ???? permissions etc.
Does it look like some bug in the stripe xlator or is there something fundamentally wrong with the nop xlator?
Thank you,
--
Lluís