storage: each runtime database connection keeps a page cache sized for its role, read back at open

This commit is contained in:
2026-10-21 21:40:05 +02:00
parent 8f2794533b
commit c2eac8d486
6 changed files with 161 additions and 8 deletions
+7 -8
View File
@@ -397,14 +397,13 @@ fn serve(r: cli.Runner, args: cli.RunArgs) !u8 {
var data = try cli.DataDir.open(io, gpa, paths.data_dir, true);
defer data.close(io, gpa);
var config_db = try data.openConfigDb(io);
var config_db = try data.openMigratedConfigDb(io);
defer config_db.close();
_ = try migrations.migrate(&config_db);
// Opened unconditionally, not gated on `cfg.web.enabled`: diagnostics record
// what went wrong whether or not anyone is running the UI, and the store
// owns this connection outright (`storage/events.zig`).
var events_db = try data.openConfigDb(io);
var events_db = try data.openRuntimeDb(io, .config);
defer events_db.close();
const boot_now_s = std.Io.Clock.real.now(io).toSeconds();
var event_store_storage: ?events.Store = events.Store.init(io, &events_db, boot_now_s) catch |err| blk: {
@@ -656,21 +655,21 @@ fn serve(r: cli.Runner, args: cli.RunArgs) !u8 {
defer log_controller.deinit(io);
var sink: query_sink.QuerySink = .init(&log_controller, hub);
var querylog_retention_db = try data.reopenQuerylogDb(io);
var querylog_retention_db = try data.openRuntimeDb(io, .querylog_retention);
defer querylog_retention_db.close();
var tracker_db = try data.openConfigDb(io);
var tracker_db = try data.openRuntimeDb(io, .config);
defer tracker_db.close();
// The web task's own two connections (ruling 26; m7 ruling 21: one SQLite
// connection per task), opened only when the web interface is (ruling 6).
// `reopenQuerylogDb` requires the file `openQuerylogDb` established above.
// A query-log role requires the file `openQuerylogDb` established above.
var web_config_db: ?db.Db = null;
defer if (web_config_db) |*database| database.close();
var web_querylog_db: ?db.Db = null;
defer if (web_querylog_db) |*database| database.close();
if (cfg.web.enabled) {
web_config_db = try data.openConfigDb(io);
web_querylog_db = try data.reopenQuerylogDb(io);
web_config_db = try data.openRuntimeDb(io, .config);
web_querylog_db = try data.openRuntimeDb(io, .querylog_reader);
}
var sessions: ?auth.Sessions = if (cfg.web.enabled) .init(cfg.web.session_ttl_hours) else null;