{"record":{"id":"aec769a2ee7caf94","repo":"diem/diem","slug":"db-not-bootstrapped","errorCode":null,"errorMessage":"DB not bootstrapped.","messagePattern":"DB not bootstrapped\\.","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"execution/executor/src/lib.rs","lineNumber":90,"sourceCode":"    cache: RwLock<SpeculationCache>,\n    phantom: PhantomData<V>,\n}\n\nimpl<V> Executor<V>\nwhere\n    V: VMExecutor,\n{\n    pub fn committed_block_id(&self) -> HashValue {\n        self.cache.read().committed_block_id()\n    }\n\n    /// Constructs an `Executor`.\n    pub fn new(db: DbReaderWriter) -> Self {\n        let startup_info = db\n            .reader\n            .get_startup_info()\n            .expect(\"Shouldn't fail\")\n            .expect(\"DB not bootstrapped.\");\n\n        Self {\n            db,\n            cache: RwLock::new(SpeculationCache::new_with_startup_info(startup_info)),\n            phantom: PhantomData,\n        }\n    }\n\n    fn reset_cache(&self) -> Result<(), Error> {\n        let startup_info = self\n            .db\n            .reader\n            .get_startup_info()?\n            .ok_or_else(|| format_err!(\"DB not bootstrapped.\"))?;\n        *self.cache.write() = SpeculationCache::new_with_startup_info(startup_info);\n        Ok(())\n    }\n","sourceCodeStart":72,"sourceCodeEnd":108,"githubUrl":"https://github.com/diem/diem/blob/fc4714a8ea273b6efe8b13dbce72ea60aad9a16c/execution/executor/src/lib.rs#L72-L108","documentation":"Executor::new requires a bootstrapped database: get_startup_info() must return Some(startup_info) since the executor needs the latest ledger info/accumulator to build its speculation cache. An empty (never bootstrapped) DB has no startup info, so the constructor panics.","triggerScenarios":"Calling Executor::new(db) against a storage instance that has never had the genesis transaction committed via executor::commit_genesis (or equivalent bootstrap).","commonSituations":"Pointing a node at a fresh/empty DB directory without running bootstrap first; misconfigured DB path pointing to the wrong volume; storage wiped after a crash.","solutions":["Bootstrap the DB first (commit genesis through the executor bootstrap path) before constructing Executor","Check your config for the correct existing DB path (db_dir) that contains prior chain state","If intentional fresh start, run the genesis bootstrap step in your node startup script before creating the Executor"],"exampleFix":"// before\nlet executor = Executor::<LibraVM>::new(db);\n// after\nexecutor::commit_genesis(&db, vm_config, genesis_blob, genesis_waypoint)?;\nlet executor = Executor::<LibraVM>::new(db);","handlingStrategy":"validation","validationCode":"if db.reader.get_startup_info().map_err(|e| e.to_string())?.is_none() {\n    // bootstrap genesis before constructing Executor\n    executor::commit_genesis(&db, vm_config, genesis_exec_output, genesis_waypoint)?;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run genesis bootstrap as a mandatory startup step before Executor::new","Validate db_dir config points at an existing, initialized DB","Monitor storage initialization in node startup scripts"],"tags":["bootstrap","storage","startup","panic"],"backgroundTag":"db-not-bootstrapped","analyzedSha":"fc4714a8ea273b6efe8b13dbce72ea60aad9a16c","analyzedAt":"2026-09-04T21:07:05.890Z","contentChangedAt":"2026-09-04T21:07:05.890Z","schemaVersion":2},"datasetVersion":"2026-09-12T02:17:10.037Z"}