% -*- TeX-master: "report.tex"; TeX-PDF-mode: t -*-

\paragraph{Storage.} The client and server share a versioned block
storage system.  This system provides support for versioned block
lookups and retrievals, writes, and deprecations, and transparently
provides aggressive in-memory caching.  On the server side, it
provides block durability, while the same mechanisms are used on the
client side to perform aggressive on-disk caching.  The storage system
is completely unaware of the transaction protocol, instead providing
hooks that are used by higher layers in the client and server to
provide the protocol.

\paragraph{Communication.} The client and server communicate via TCP
using bi-directional asynchronous message passing built atop a custom
channel multiplexing protocol and the Java serialization protocol.  In
order to reduce the space overheads incurred by Java serialization, we
slightly modified the low-level protocol and hand-wrote serializers
for messages with non-trivial state.

\paragraph{Client.} The client library provides the transactional block
store interface to the overall system.  It provides methods to begin
read-only and read/write transactions; to read, write, and create
blocks; and to commit and abort transactions.

\paragraph{Server.} The server responds to requests for blocks from
clients, and commit requests. When a commit request is received, it
performs a serial backwards-validation protocol to determine if the
transaction can commit, and if so, commits it to stable storage and
sends out deprecation messages to any clients that may have affected
blocks in their cache.
