{"record":{"id":"8414b3d2d9d6c9bf","repo":"denoland/deno","slug":"failed-to-open-in-memory-cache-db","errorCode":null,"errorMessage":"failed to open in-memory cache db","messagePattern":"failed to open in-memory cache db","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ext/cache/sqlite.rs","lineNumber":106,"sourceCode":"}\n\nimpl SqliteBackedCache {\n  pub fn new(cache_storage_dir: PathBuf) -> Result<Self, CacheError> {\n    let mode = match std::env::var(\"DENO_CACHE_DB_MODE\")\n      .unwrap_or_default()\n      .as_str()\n    {\n      \"disk\" | \"\" => Mode::Disk,\n      \"memory\" => Mode::InMemory,\n      _ => {\n        log::warn!(\"Unknown DENO_CACHE_DB_MODE value, defaulting to disk\");\n        Mode::Disk\n      }\n    };\n\n    let connection = if matches!(mode, Mode::InMemory) {\n      rusqlite::Connection::open_in_memory()\n        .unwrap_or_else(|_| panic!(\"failed to open in-memory cache db\"))\n    } else {\n      create_cache_storage_dir(&cache_storage_dir)?;\n\n      let path = cache_storage_dir.join(\"cache_metadata.db\");\n      let connection = rusqlite::Connection::open(&path).unwrap_or_else(|_| {\n        panic!(\"failed to open cache db at {}\", path.display())\n      });\n      // Enable write-ahead-logging mode.\n      let initial_pragmas = \"\n        -- enable write-ahead-logging mode\n        PRAGMA journal_mode=WAL;\n        PRAGMA synchronous=NORMAL;\n        PRAGMA optimize;\n      \";\n      connection.execute_batch(initial_pragmas)?;\n      connection\n    };\n","sourceCodeStart":88,"sourceCodeEnd":124,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/ext/cache/sqlite.rs#L88-L124","documentation":"Deno's caches (type-check, node analysis, HTTP cache metadata) can live in an in-memory SQLite database when DENO_CACHE_DB_MODE=memory. This panic fires when rusqlite cannot even create that in-memory connection — practically an allocation failure inside SQLite. The default disk mode is unaffected.","triggerScenarios":"Starting any Deno command with DENO_CACHE_DB_MODE=memory while the process cannot allocate memory for the SQLite handle — severe memory pressure, cgroup/container limits, or ulimit restrictions on the process.","commonSituations":"CI containers with tight memory caps; developers enabling memory mode to speed up ephemeral CI runs; a leaky parent workload leaving no allocation headroom.","solutions":["Switch back to disk mode: unset DENO_CACHE_DB_MODE or set it to `disk`","Raise the container/cgroup memory limit or free memory before running","If memory mode previously worked, look for a leak in the workload that consumed the headroom"],"exampleFix":"# before\nDENO_CACHE_DB_MODE=memory deno run app.ts\n\n# after\nDENO_CACHE_DB_MODE=disk deno run app.ts   # or: unset DENO_CACHE_DB_MODE","handlingStrategy":"fallback","validationCode":"# only opt into memory mode when it is deliberate; disk is the safe default\nunset DENO_CACHE_DB_MODE  # or export DENO_CACHE_DB_MODE=disk","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set container/cgroup memory limits above the workload's observed peak","Monitor RSS in CI when using DENO_CACHE_DB_MODE=memory","Treat repeated in-memory open failures as a leak symptom, not a cache problem"],"tags":["sqlite","cache","env-var","memory","out-of-memory"],"backgroundTag":"sqlite-open-failed","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-31T14:17:45.589Z"}