[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