{"record":{"id":"6d57dd6a957fead3","repo":"nautechsystems/nautilus_trader","slug":"no-durable-store-configured-refusing-to-update-ex","errorCode":null,"errorMessage":"No durable store configured; refusing to update execution transaction","messagePattern":"No durable store configured; refusing to update execution transaction","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/blockchain/src/cache/mod.rs","lineNumber":223,"sourceCode":"        })?;\n\n        database.ensure_execution_transaction_schema().await\n    }\n\n    /// Updates the status of a persisted execution transaction record, failing closed when no\n    /// database is attached.\n    ///\n    /// # Errors\n    ///\n    /// Returns an error if no database is configured or the database operation fails.\n    pub async fn update_execution_transaction_status(\n        &self,\n        chain_id: u32,\n        transaction_hash: &str,\n        status: &str,\n    ) -> anyhow::Result<()> {\n        let database = self.database.as_ref().ok_or_else(|| {\n            anyhow::anyhow!(\"No durable store configured; refusing to update execution transaction\")\n        })?;\n\n        database\n            .update_execution_transaction_status(chain_id, transaction_hash, status)\n            .await\n    }\n\n    /// Loads an execution transaction record by chain ID and transaction hash, failing closed\n    /// when no database is attached.\n    ///\n    /// # Errors\n    ///\n    /// Returns an error if no database is configured or the database operation fails.\n    pub async fn get_execution_transaction(\n        &self,\n        chain_id: u32,\n        transaction_hash: &str,\n    ) -> anyhow::Result<Option<ExecutionTransactionRow>> {","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/blockchain/src/cache/mod.rs#L205-L241","documentation":"update_execution_transaction_status persists a status change for a stored execution transaction, but it requires a configured durable database. With no database on the cache, it refuses the update instead of dropping the status change silently.","triggerScenarios":"Calling update_execution_transaction_status(chain_id, tx_hash, status) on a BlockchainCache constructed without a database handle.","commonSituations":"Transaction lifecycle watchers running against a memory-only cache; deployments where the database option was dropped during refactor or env var missing; test harnesses using in-memory caches but reusing production callback code.","solutions":["Construct the cache with a database so status updates persist","Guard the status-update call site to skip when no durable store is configured","Supply the missing database configuration in the deployment environment","Confirm the component holding the cache was initialized with the same database used for writes"],"exampleFix":"// before\nlet cache = BlockchainCache::new(chain, None);\ncache.update_execution_transaction_status(1, &tx_hash, \"confirmed\").await?;\n// after\nlet cache = BlockchainCache::new(chain, Some(database));\ncache.update_execution_transaction_status(1, &tx_hash, \"confirmed\").await?;","handlingStrategy":"validation","validationCode":"if cache.database.is_none() {\n    eprintln!(\"cannot update transaction status: no durable store configured\");\n}","typeGuard":"fn is_persistent(cache: &BlockchainCache) -> bool {\n    cache.database.is_some()\n}","tryCatchPattern":"match cache.update_execution_transaction_status(chain_id, &tx_hash, \"confirmed\").await {\n    Err(e) if e.to_string().contains(\"No durable store configured\") => {\n        // queue the update or report the missing configuration\n    }\n    other => other?,\n}","preventionTips":["Gate transaction lifecycle workers on database availability","Share one configured cache/database handle across components","Add an integration test asserting status updates persist","Fail fast at startup when persistence is required"],"tags":["database","configuration","persistence","transactions"],"backgroundTag":"missing-required-config","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}