{
  "slug": "craq",
  "term": "CRAQ",
  "aliases": [
    "Chain Replication with Apportioned Queries"
  ],
  "definition": "CRAQ is a chain-replication extension that distributes strongly consistent single-object reads across replicas using version-state checks.",
  "note": "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. [craq-paper]\n\nThe published prototype stores objects in memory; protocol commitment does not establish disk persistence. [craq-paper]\n\nIn the optional eventual mode, the newest local version may be uncommitted, and switching replicas can reverse reads. Joining replicas withhold reads until synchronized. [craq-paper]\n\nA 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. [craq-code]",
  "status": "research",
  "advantages": [],
  "limitations": [],
  "related": [
    "chain-replication",
    "linearizability",
    "synchronous-replication",
    "eventual-consistency"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-23",
  "provenance": [
    "Protocol, weaker modes, prototype and join behavior from sections 2.3, 2.4, 5.2 and 5.3. [craq-paper]",
    "The archived-code observation is source review, not a running-cluster reproduction. The companion synthetic model isolates selection and omits transport and storage callbacks. [craq-code]"
  ],
  "citations": [
    {
      "id": "craq-paper",
      "title": "Jeff Terrace and Michael J. Freedman: Object Storage on CRAQ, USENIX ATC 2009",
      "url": "https://www.usenix.org/legacy/event/usenix09/tech/full_papers/terrace/terrace.pdf",
      "accessed": "2026-10-22"
    },
    {
      "id": "hesela-replication",
      "title": "Hesela: Replication acknowledgements: received, durable, applied",
      "url": "https://hesela.com/analyses/replication-acknowledgements-durability-lag/#craq",
      "accessed": "2026-10-22"
    },
    {
      "id": "craq-code",
      "title": "CRAQ archived implementation: chain_node.Tc, commit c394900b4da3 (2012)",
      "url": "https://github.com/jterrace/craq/blob/c394900b4da384abc7af2a2723140c693778e767/chain_node.Tc",
      "accessed": "2026-10-23"
    }
  ]
}
