]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commit
fuse/blackmatch: split into client/server (twisted server)
authorrobk-tahoe <robk-tahoe@allmydata.com>
Thu, 16 Oct 2008 15:08:46 +0000 (08:08 -0700)
committerrobk-tahoe <robk-tahoe@allmydata.com>
Thu, 16 Oct 2008 15:08:46 +0000 (08:08 -0700)
commit4bc57f19c91f5ba1b37c277dbda453fbf4d22ffd
tree2823d47cb5800e919a4118d59db28b070cb584a0
parentc0b2aae0d49b2fbd2f07599da1fe7c4e35f0d1a1
fuse/blackmatch: split into client/server (twisted server)

This implements a client/server split for blackmatch, where the client
implements the fuse_main bindings and a simple blocking rpc client mechanism.
The server implements the other half of that rpc mechanism, and contains all
the actual logic for interpreting fuse requests in the context of the on disk
cache and requests to the tahoe node.  The server is based on a twisted reactor.

The rpc mechanism implements a simple method dispatch including marshalling,
using json, of basic inert data types, in a flat namespace (no objects).
The client side is written in a blocking idiom, to interface with the threading
model used by the fuse_main bindings, whereas the server side is written for a
twisted reactor-based environment, intended to facilitate implementing more
sophisticated logic in that paradigm.  The two communicate over a unix domain
socket, allocated within the nodedir.

Command line usage is unchanged; the server is launched automatically by the
client. The server daemonizes itself, to avoid preventing the original parent
process (e.g. 'runtests') from waiting upon the server exiting.

The client keeps open a 'keepalive' connection to the server; upon loss thereof
the server will exit. This addresses the fact that the python-fuse bindings
provide no notification of exit of the client process upon unmount.

The client thus provides a relatively thin 'shim' proxying requests from the
fuse_main bindings across the rpc to the server process, which handles the
logic behind each request.

For the time being, a '--no-split' option is provided to surpress the splitting
into client/server, yielding the prior behaviour.  Once the server logic gets
more complex and more entrenched in a twisted idiom, this might be removed.
The 'runtests' test harness currently tests both modes, as 'impl_c' and
'impl_c_no_split'
contrib/fuse/impl_c/blackmatch.py
contrib/fuse/runtests.py