Elliptics network happend to be successfully compiled on Solaris 10 and various Linuxes. Solaris 8 and FreeBSD 7 (and below) do not have appropriate *at() syscalls (Solaris 10 does not have mkdirat(2) and renameat(2), which I emulated with the full pathes, procfs trick to access path via /proc/self/fd/$descriptor/$local_path does not work here, but is applicable to chmodat() for example).
Procfs trick also does not work on FreeBSD. So the only way to move further is to emulate all *at() syscalls in the compat layer I introduced for Solaris. This is not a trivial problem, since there are multiple stacked layers of openat(2) usage, which can not be easily transferred into single call related to the root directory.
Need to think, but I will solve this problem even if it will require to rewrite major part of the transaction history management.
The reason is rather trivial: I can get access to several hundreds of FreeBSD 7 machines to test my crazy ideas...
Meanwhile I exported two helpers to lookup a node for given ID (raw one and high-level function which adds found node into the route table), so testing application will create a huge file spread over all nodes in the cluster and then start reading it randomly. Write will not be propagated into the origianl object, instead transactions will be spread over the storage cloud.
Thus reading test application will download a transaction history, parse it, select the transaction which updated the regions we want to read, and fetch them from the network.
To simulate parallel access application will send multiple requests to different nodes to read different data ranges, just like it could happen if multiple clients asked to read lots of random chunks of data.
<a href="http://www.gnu.org/software/gnulib/" title="http://www.gnu.org/software/gnulib/">http://www.gnu.org/software/gnulib/</a>
Those syscalls should be implemented in the kernel for performance reasons, but otherwise it could be used. For example it tries to run the same procfs trick I mentioned.
I changed some internal things a bit so that elliptics network does not need *at() syscalls anymore and performance did not degrade by additional calls.