On 29 Feb 2016, at 13:31, Oleksandr Natalenko oleksandr@natalenko.name wrote:
Hi.
We have corporate Dovecot setup with GlusterFS as file storage. We store maildirs on GlueterFS share, mounting it via NFS. Mounting share via native GlusterFS FUSE client introduces visible performance overhead. Also, NFS mount does not provide us with HA.
That's why I have an idea to use GlusterFS C API to access maildirs share. I'd like to preserve maildir structure, but get access to it not via FS mount point but with GlusterFS C API calls.
I've discovered that Dovecot source tree has src/lib-fs infrastructure with fs-posix implemented on top of it. Is that the right place to start from? GlusterFS C API calls are POSIX-like, so they could be easily used as substitutions for VFS ops. Could such a backend be implemented as separate plugin?
Are there any examples of alternative storage backend to look at?
That isn't a small job. Currently the only mail storage backend that uses only lib-fs calls is the commercial object storage plugin. All the other storages use POSIX calls directly. Especially problematic is that lib-index uses POSIX calls also. So one possibility might be that you implement a storage backend that stores index files only locally, but if the user switches between backends the performance will likely be bad because there are no indexes for the user in the new server. I've some plans to change lib-index to use lib-fs calls, but that's not going to happen anytime soon.