The system consists of three main components:
-
KV Server A single in-memory key/value server that supports atomic Get and conditional Put operations using version numbers.
-
Clerk (Client Library) A client-side abstraction that handles RPC retries, network failures, and ambiguity (ErrMaybe) while interacting with the server.
-
Distributed Lock A lock abstraction implemented entirely on the client side using conditional Put (compare-and-swap) semantics over the KV store.
The server itself is unaware of locks or retries, all coordination logic lives in the client.