{
  "slug": "recipe",
  "term": "RECIPE persistent-index conversion",
  "aliases": [
    "RECIPE"
  ],
  "definition": "RECIPE is a method for converting selected concurrent DRAM indexes into persistent-memory indexes using persistence ordering and recoverable updates.",
  "note": "The method applies to selected concurrency protocols, not arbitrary thread-safe code. The design assumes reinitialized locks and reclamation of unreachable allocations. [recipe-paper]\n\nWitcher later found crash-consistency bugs in evaluated RECIPE implementations; this is not a current-revision defect claim. [witcher-paper]\n\nSource history records P-ART counter-ordering repairs and corrected persistence primitives. Compare the exact code revision, not just the index name. [recipe-art-fix] [recipe-flush-fix]",
  "status": "research",
  "advantages": [],
  "limitations": [
    {
      "text": "A reader that only retries an unfinished update does not supply a recovery mechanism.",
      "citationIds": [
        "recipe-paper"
      ]
    }
  ],
  "related": [
    "fptree",
    "persistent-memory",
    "persistence-ordering",
    "durable-linearizability",
    "crash-test-oracle",
    "tips"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-13",
  "citations": [
    {
      "id": "recipe-paper",
      "title": "Lee et al. RECIPE: Converting Concurrent DRAM Indexes to Persistent-Memory Indexes. SOSP 2019, sections 4-7. DOI: 10.1145/3341301.3359635.",
      "url": "https://www.cs.utexas.edu/~vijay/papers/sosp19-recipe.pdf",
      "accessed": "2026-11-13"
    },
    {
      "id": "witcher-paper",
      "title": "Fu et al. Witcher: Systematic Crash Consistency Testing for Non-Volatile Memory Key-Value Stores. SOSP 2021. DOI: 10.1145/3477132.3483556.",
      "url": "https://www3.cs.stonybrook.edu/~dongyoon/papers/SOSP-21-Witcher.pdf",
      "accessed": "2026-11-13"
    },
    {
      "id": "recipe-art-fix",
      "title": "RECIPE source history: P-ART counter ordering and exceptional insertion handling, commit 4b0c276.",
      "url": "https://github.com/utsaslab/RECIPE/commit/4b0c27674ca7727195152b5604d71f47c0a0a7a2",
      "accessed": "2026-11-13"
    },
    {
      "id": "recipe-flush-fix",
      "title": "RECIPE source history: persistence primitive repairs, commit 950ae0e.",
      "url": "https://github.com/utsaslab/RECIPE/commit/950ae0ea5ed23ce28840615976e03338b943d57a",
      "accessed": "2026-11-13"
    },
    {
      "id": "hesela-pmem",
      "title": "Hesela: RECIPE conversion and recovery-testing boundaries.",
      "url": "https://hesela.com/analyses/pmem-persistence-domains-dax/#recipe-recovery",
      "accessed": "2026-11-13"
    }
  ],
  "provenance": [
    "Source review of SOSP 2019 sections 4-7 and SOSP 2021 sections 4.3-4.4, 6.1-6.2 and Tables 3-4; no prototype execution or hardware reproduction."
  ]
}
