Starting
Hi all. Here is a first progress report. To start with, here is some code in action:
http://ueber.net/vac/bc32a6a6f09395131bec9f34d75e7cfda4b1ffc7/
This is an http interface to a venti server. The files are served by
vacfs.b
, which is a vac file server a lot like vacfs
from Plan 9.
The difference is that this one can serve arbitrary vac root scores: The
root directory appears empty. Walking to a score tries to open that score
as a vac root score and serves the contents of that vac. The current
(work in progress, with at least one severe bug, be warned!) vacfs.b
can be found in the vac archive referenced above. As a sidenote, the http
interface is a scgi program that reads directories and prints out html.
There are some more interesting bits in the archive. But note that these programs are not final, they may be removed/replaced/redesigned later on. And when I put this in the mercurial repository, I will also make a proper directory hierarchy and mkfile. Here is only a summary of the somewhat working programs in the archive. They also have manual pages which have near-complete usage information. The limbo source files contain lists of work to do, and some of the manual pages have lists as well.
Vacfs
, as described above, it can connect to a venti server and
serve any score present at that server. A specific score can also be
specified at startup which will be openend and it’s contents served in
the root directory.
Vacget
, lists of retrieves the contents of a venti archive. -t
just lists them, -x
retrieves them.
Vacput
, write a file tree to venti. The resulting vac root score is
printed to standard out. The tree is always written entirely, i.e. it
cannot write only changes relative to a previous archive.
Vcache
, a venti cache and/or proxy. It can serve as memory-cache,
keeping venti blocks in memory. Requests for non-present blocks are
sent to the authorative venti server. A proxy can also be specified:
Before reading data from the venti server, the proxy (a venti server,
typically one nearby) is queried for the data. Data received from the
authorative venti server is written to the proxy server. The proxy
can also be used as write-through server: all writes (that normally go
only to the authorative server) go to the proxy simultaneously, and the
operation succeeds only when both servers respond okay.
Vread
and Vwrite
, read a single score or write a single data block from/to a venti. Mostly for debugging.
Vparse
, parses vac root scores, metablocks, entries, etc.
Ventry
, parses and prints a given entry in a file with many entries.
If you want to play around with some of this code, you also need these
changes to inferno’s appl/lib/venti.b
:
http://ueber.net/vac/78d72a3daf13c934f4b161e0268feffefc232f7d/venti.b.diff
That’s it for now. Next on the todo list is setting up the hg repository, and working on the venti server.