craq · research · also Chain Replication with Apportioned Queries

CRAQ

CRAQ is a chain-replication extension that distributes strongly consistent single-object reads across replicas using version-state checks.

Related Observatory article: CRAQ on hesela.com

A clean latest version can be read locally; a dirty one requires the tail's committed version number. Retained local bytes supply the response. Dirty is local knowledge: commitment can precede the returning acknowledgement. [1]

The published prototype stores objects in memory; protocol commitment does not establish disk persistence. [1]

In the optional eventual mode, the newest local version may be uncommitted, and switching replicas can reverse reads. Joining replicas withhold reads until synchronized. [1]

A delayed version reply can race local reclamation. In the archived code, the extended read handler can substitute the newest pending payload on a missing-version path while keeping the queried version label. [3]

Relations

related
Chain replication, Linearizability, Synchronous replication, Eventual consistency

Citations

  1. Jeff Terrace and Michael J. Freedman: Object Storage on CRAQ, USENIX ATC 2009 (accessed 2026-10-22)
  2. CRAQ archived implementation: chain_node.Tc, commit c394900b4da3 (2012) (accessed 2026-10-23)

Further reading

  1. Hesela: Replication acknowledgements: received, durable, applied (accessed 2026-10-22)
Sources & caveats
  • Protocol, weaker modes, prototype and join behavior from sections 2.3, 2.4, 5.2 and 5.3. [1]
  • The archived-code observation is source review, not a running-cluster reproduction. The companion synthetic model isolates selection and omits transport and storage callbacks. [3]

JSON: /data/terms/craq.json

Published by Hesela team · Updated

Report a correction · Editorial standards · Reuse guidance

Cite this page
Hesela team. CRAQ. Hesela. 2026-10-23. https://hesela.dev/terms/craq/