ioremap.net

Storage and beyond

POHMELFS transactions and inode caches

I decided to change common practice of having single inode cache per filesystem and isntead implemented per-mountpoint caches (and memory pools for that matter). It is because mount point allows to specify different size of the inode ID, which is highly connected to transformation mechanism used for given mount.

So, for example, one can mount remote storage and specify only one transformation function, while other mount will have multiple functions, thus forcing each inode update to be redundantly stored with multiple IDs. Each inode has its IDs cached in the inode structure, so with different number of transformation functions inode size also becomes different. The same applies when various mounts use different transformation functions, which for kernel POHMELFS client are plain crypto hashes.

Getting that elliptics network topology always allows to store data, no matter which ID it has, even when network connections to some other servers are broken (ability to store given ID range is delegated to the neighbours of the failed nodes), each transactions now has to be acked by all remote nodes before it is considered completed. Thus network transaction has the same issues with mounts as inodes, and thus may have different sizes depending on mount point.

So actually transaction becomes a list of per-id metadata objects used to create network command for given data. When all per-id objects are acked by the remote servers, transaction is completed.

Comments are currently closed.