From 5677e5e9550df04d27406e87a4359d354a9e9fc6 Mon Sep 17 00:00:00 2001 From: mackaby Date: Thu, 5 Mar 2026 09:47:38 +0100 Subject: [PATCH] fix(db): invoke shutdown during runtime teardown Call Database::shutdown() from async_main graceful shutdown after webhook/tunnel stop. Add debug logs for libSQL no-op shutdown paths (no replicator and sync-not-supported). --- src/db/libsql/mod.rs | 10 ++++++++-- src/main.rs | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/db/libsql/mod.rs b/src/db/libsql/mod.rs index d089252f..bc2ea1e0 100644 --- a/src/db/libsql/mod.rs +++ b/src/db/libsql/mod.rs @@ -333,8 +333,14 @@ impl Database for LibSqlBackend { tracing::debug!("libSQL replicator flushed at frame {}", frame_no); Ok(()) } - Ok(None) => Ok(()), - Err(libsql::Error::SyncNotSupported(_)) => Ok(()), + Ok(None) => { + tracing::debug!("No libSQL replicator to flush, skipping shutdown sync"); + Ok(()) + } + Err(libsql::Error::SyncNotSupported(_)) => { + tracing::debug!("libSQL sync not supported, skipping flush on shutdown"); + Ok(()) + } Err(error) => Err(DatabaseError::from(error)), } } diff --git a/src/main.rs b/src/main.rs index 12a8caf6..2adb476c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -672,6 +672,8 @@ async fn async_main() -> anyhow::Result<()> { .as_ref() .map(|db| Arc::clone(db) as Arc); + let db_for_shutdown = components.db.clone(); + let deps = AgentDeps { store: components.db, llm: components.llm, @@ -930,6 +932,12 @@ async fn async_main() -> anyhow::Result<()> { } } + if let Some(db) = db_for_shutdown { + if let Err(e) = db.shutdown().await { + tracing::warn!("Failed to shutdown database cleanly: {}", e); + } + } + tracing::debug!("Agent shutdown complete"); Ok(())