VENTI(2)VENTI(2)NAME
Venti - access to Venti content-addressed filestore.
SYNOPSIS
include "venti.m";
venti := load Venti Venti->PATH;
Session: import venti;
init: fn();
Session: adt {
new: fn(fd: ref Sys->FD): ref Session;
read: fn(s: self ref Session, score: Venti->Score, etype: int, maxn: int): array of byte;
write: fn(s: self ref Session, etype: int, buf: array of byte): (int, Venti->Score);
sync: fn(s: self ref Session): int;
};
Score: adt {
a: array of byte;
eq: fn(a: self Score, b: Score): int;
text: fn(a: self Score): string;
parse: fn(s: string): (int, Score);
zero: fn(): Score;
};
DESCRIPTION
Venti is a block storage server intended for archival applications.
The Venti module provides low-level access to a Venti server. The mod‐
ule assumes that the physical connection to the server has already been
established (for example, by dial(2)). On a Venti server, a block is
addressed by the SHA1 hash of the contents of that block, known as a
score, and represented as a Score adt. Blocks are additionally tagged
with a type, facilitating recovery in the event of corruption. A Ses‐
sion represents a session with a Venti server.
s.new(fd)
New performs the initial handshake with the Venti server,
returning established Session.
s.read(score, etype, maxn)
Read tries to retrieve the block corresponding to score, and of
type etype. The block must be no longer than maxn bytes. Etype
is conventionally one of the constants Roottype, Dirtype,
Datatype or Pointertype[0-9], where the different Pointertypes
represent different depth levels within a Venti tree.
s.write(etype, buf)
Write writes the data in buf to the Venti server. The block
will be tagged with type etype. It returns a tuple, say
(ok, score); on error, ok is -1, otherwise ok is 0 and score
contains the Venti score for the block that has been written.
s.sync()
Sync tells the Venti server to make sure that all data is com‐
mitted to active storage.
SOURCE
/module/venti.m
/appl/lib/venti.b
BUGSVENTI(2)