{
  "slug": "concurrent-prefix-recovery",
  "term": "Concurrent prefix recovery",
  "aliases": [
    "CPR"
  ],
  "definition": "Concurrent prefix recovery identifies durable operation prefixes separately for each client session rather than by one global issue-time cutoff.",
  "note": "The 2019 protocol chooses the session boundaries jointly; independent arbitrary cutoffs are not a substitute for its consistency protocol. [cpr-paper]\n\nAPI boundary: FasterKV documents a commit point with UntilSerialNo and optional excluded pending operations. An exception below the frontier is not durable merely because its number is small. [faster-cpr-docs]\n\nWaiting for durability: the pinned WaitForCommitAsync implementation checks the frontier and an empty exclusion list, completes pending synchronous operations and requires asynchronous operations to have been awaited. It does not initiate a checkpoint itself. [faster-cpr-code]\n\nThe linked Hesela example accounts for invented operation identities; it does not execute FASTER or prove checkpoint consistency. [hesela-cpr]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "The paper's checkpoint protocol and the documented exception-bearing API must not be treated as identical abstractions.",
      "citationIds": [
        "cpr-paper",
        "faster-cpr-docs"
      ]
    }
  ],
  "related": [
    "hybrid-log",
    "database-checkpoint",
    "group-commit"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-14",
  "citations": [
    {
      "id": "cpr-paper",
      "title": "Prasaad, Chandramouli and Kossmann. Concurrent Prefix Recovery: Performing CPR on a Database. SIGMOD 2019, sections 2, 4.3 and 7; DOI 10.1145/3299869.3300090.",
      "url": "https://www.microsoft.com/en-us/research/wp-content/uploads/2019/01/cpr-sigmod19.pdf",
      "accessed": "2026-11-14"
    },
    {
      "id": "faster-cpr-docs",
      "title": "FasterKV Checkpointing and Recovery: session commit points and pending-operation exceptions; documentation dated 6 May 2021.",
      "url": "https://microsoft.github.io/FASTER/docs/fasterkv-recovery/",
      "accessed": "2026-11-14"
    },
    {
      "id": "faster-cpr-code",
      "title": "FASTER ClientSession.cs, commit 332ea7da532a688acf648ee60c4f63a1caeaf1f7, WaitForCommitAsync lines 955-984.",
      "url": "https://github.com/microsoft/FASTER/blob/332ea7da532a688acf648ee60c4f63a1caeaf1f7/cs/src/core/ClientSession/ClientSession.cs#L955-L984",
      "accessed": "2026-11-14"
    },
    {
      "id": "hesela-cpr",
      "title": "Hesela: recovery receipts, exception holes and replay accounting.",
      "url": "https://hesela.com/analyses/wal-checkpoints-torn-pages/#concurrent-prefix-recovery",
      "accessed": "2026-11-14"
    }
  ],
  "provenance": [
    "Historical protocol and documented API reviewed separately; no implementation execution or performance reproduction."
  ]
}
