[Gluster-devel] Performance Translators' Stability and Usefulness

Vikas Gorur vikas at gluster.com
Mon Jul 6 09:51:45 UTC 2009

----- "Gordan Bobic" <gordan at bobich.net> wrote:


I'd like to clarify the situation with the "mount --bind" issue you're facing.

When GlusterFS is started, it does two things in the following order:

1) daemonize itself (by calling daemon(3)).
2) Initialize the translator graph (and thus FUSE and mount).

This introduces a race since a shell command that runs glusterfs will return as
soon as glusterfs becomes a daemon. The next shell command (in a script) will
try something like "mount --bind", but glusterfs might not have finished initializing
fuse and mounting by then. This is why putting in a "sleep 2" in your script works,
because it gives glusterfs time to initialize and mount.

Unfortunately, the obvious solution of interchanging the order of these
two things does not work. The translator graph might contain an ib-verbs
transport module. The ib-verbs library expects that the process which
does ib-verbs init is also the process that does any further send/recv.
Calling daemon(), however, will spawn child processes and kill the parent,
thus "changing" the PID of GlusterFS.

The solution is to write a custom daemon() function which will wait
for the child to successfully initialize everything before exiting. We
are working on this and you can track its progress at:


Engineer - http://gluster.com/

A: Because it messes up the way people read text.
Q: Why is a top-posting such a bad thing?

More information about the Gluster-devel mailing list