From 3755c370ac95662fb57f45487d42d9eaf76009bb Mon Sep 17 00:00:00 2001 From: Andrzej Jackowski Date: Tue, 28 Apr 2026 16:24:47 +0200 Subject: [PATCH] audit: assert storage ordering invariants at runtime Abort if audit storage fails to start rather than silently running with an unaudited maintenance socket. Also assert that storage is already stopped when the audit service is destroyed, documenting the defer-stack ordering requirement. Refs SCYLLADB-1615 Refs SCYLLADB-1695 --- audit/audit.cc | 1 + main.cc | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/audit/audit.cc b/audit/audit.cc index 1fcc133e55..25c1b6890e 100644 --- a/audit/audit.cc +++ b/audit/audit.cc @@ -223,6 +223,7 @@ future<> audit::stop_audit() { return make_ready_future<>(); } return audit::audit::audit_instance().invoke_on_all([] (auto& local_audit) { + SCYLLA_ASSERT(!local_audit._storage_running); return local_audit.shutdown(); }).then([] { return audit::audit::audit_instance().stop(); diff --git a/main.cc b/main.cc index 94c273a818..10dfdc2a54 100644 --- a/main.cc +++ b/main.cc @@ -2363,9 +2363,7 @@ To start the scylla server proper, simply invoke as: scylla server (or just scyl // The table-based audit backend needs Raft (via join_cluster) // to create its keyspace and table. checkpoint(stop_signal, "starting audit storage"); - audit::audit::start_storage(*cfg).handle_exception([&] (auto&& e) { - startlog.error("audit storage start failed: {}", e); - }).get(); + audit::audit::start_storage(*cfg).get(); auto audit_storage_stop = defer([] { audit::audit::stop_storage().get(); });