[Gluster-users] What would the cli command look like for integrating custom xlator?
Jeff Darcy
jdarcy at redhat.com
Tue Jan 22 18:34:19 UTC 2013
On 01/22/2013 12:59 PM, Joe Julian wrote:
> The cli has been great for adding the necessary management tools,but if you
> want to use custom translators, you're back to writing vol files and losing
> your ability to do online volume changes. This ability needs to be added in
> order for custom translators to become viable.
>
> What would the cli command look like for integrating custom xlator?
>
> I can picture a couple ways, one of which would be that xlators would list
> requirements and providers so the volgen would be able to intuit a valid graph
> if that xlator is enabled for the volume. The cli would provide command hooks
> for any new features that xlator would need to add to the cli.
>
> The gluster command should have a switch option listing the supported mount
> options in case a xlator provides new ones (would be parsed by mount.glusterfs).
>
> Anybody else have a view?
How about this?
gluster volume client-xlator myvol encryption/rot14 cluster/distribute
This would tell the volfile-generation machinery that it should insert
something like this:
volume myvol-dht
type cluster/distribute
...
subvolume
volume myvol-rot14
type encryption/rot14
...
subvolumes myvol-dht
end-volume
Basically the type/path is determined by the first argument, and the position
in the volfile by the second. There'd be a server-xlator equivalent,
obviously, and it's up to you to make sure the translator even exists at that
location on each client/server. Then you could do this:
gluster volume set myvol encryption/rot14.algorithm Salsa20
This covers most of the kinds of translator insertion that I've seen both in
GlusterFS and in HekaFS, though there are a few that require deeper changes to
the volfile-generation logic (e.g. when NUFA was brought back or to do HekaFS
multi-tenancy). One could even have gluster/d inspect the named .so and make
sure that everything "looks right" in terms of entry points and options. One
thing I don't like about this approach is that there's no way to specify a
specific instance of the new translator or its parent either in the original
insertion command or when setting options; there's sort of an implicit "for
each" in there. In some situations we might also want separate "above" and
"below" qualifiers to say where the new translator should go.
For HekaFS I actually developed a Python infrastructure for working with
volfiles (see volfile.py either there or in some of my subsequent scripts), and
there's a hook to enable them (see volgen_apply_filters). That provides total
flexibility, but that doesn't make it the right approach. For one thing, it
doesn't really play well with the rest of our option-setting machinery. I
think the more "structured" approach would be better for the vast majority of
cases, with this type of filter only as a last resort.
More information about the Gluster-users
mailing list