From e96234488fd2f6c6421131760ac9ac890125c1fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reynir=20Bj=C3=B6rnsson?= Date: Tue, 13 Feb 2024 14:23:25 +0100 Subject: [PATCH] Add BUILDER_WEB_DATADIR env, fix bug The builder-web commands now understand the BUILDER_WEB_DATADIR environment variable which is used as --datadir. During a change the transaction when vacuuming was committed twice which is an error in sqlite. This was found during testing. --- bin/builder_db_app.ml | 37 ++++++++++++++-------------- bin/builder_web_app.ml | 3 ++- bin/migrations/builder_migrations.ml | 3 ++- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/bin/builder_db_app.ml b/bin/builder_db_app.ml index 2cc0241..1ecd155 100644 --- a/bin/builder_db_app.ml +++ b/bin/builder_db_app.ml @@ -244,23 +244,20 @@ let vacuum datadir (module Db : Caqti_blocking.CONNECTION) platform_opt job_id p this is too verbose? *) Logs.info (fun m -> m "Job %s %a; not removing any builds" jobname pp_reason predicate); - let* () = - List.fold_left (fun r (build_id, build) -> - let* () = r in - let* () = Db.start () in - let* () = Db.exec defer_foreign_keys () in - match - delete_build datadir (module Db) jobname build_id - build.Builder_db.Build.uuid - with - | Ok () -> Db.commit () - | Error _ as e -> - let* () = Db.rollback () in - e) - (Ok ()) - builds - in - Db.commit () + List.fold_left (fun r (build_id, build) -> + let* () = r in + let* () = Db.start () in + let* () = Db.exec defer_foreign_keys () in + match + delete_build datadir (module Db) jobname build_id + build.Builder_db.Build.uuid + with + | Ok () -> Db.commit () + | Error _ as e -> + let* () = Db.rollback () in + e) + (Ok ()) + builds let vacuum () datadir platform_opt jobnames predicate = let dbpath = datadir ^ "/builder.sqlite3" in @@ -838,15 +835,17 @@ let dbpath_new = let datadir = let doc = "Data directory." in + let env = Cmdliner.Cmd.Env.info "BUILDER_WEB_DATADIR" in Cmdliner.Arg.(value & opt dir Builder_system.default_datadir & - info ~doc ["datadir"; "d"]) + info ~doc ~env ["datadir"; "d"]) let cachedir = let doc = "Cache directory." in + let env = Cmdliner.Cmd.Env.info "BUILDER_WEB_CACHEDIR" in Cmdliner.Arg.(value & opt (some dir) None & - info ~doc ["cachedir"]) + info ~doc ~env ["cachedir"]) let jobname = let doc = "Jobname." in diff --git a/bin/builder_web_app.ml b/bin/builder_web_app.ml index fb53cb8..18e2839 100644 --- a/bin/builder_web_app.ml +++ b/bin/builder_web_app.ml @@ -196,10 +196,11 @@ let ip_port : (Ipaddr.V4.t * int) Arg.conv = let datadir = let doc = "data directory" in let docv = "DATA_DIR" in + let env = Cmdliner.Cmd.Env.info "BUILDER_WEB_DATADIR" in Arg.( value & opt dir Builder_system.default_datadir & - info [ "d"; "datadir" ] ~doc ~docv + info ~env [ "d"; "datadir" ] ~doc ~docv ) let cachedir = diff --git a/bin/migrations/builder_migrations.ml b/bin/migrations/builder_migrations.ml index ae84f6f..e2c56fd 100644 --- a/bin/migrations/builder_migrations.ml +++ b/bin/migrations/builder_migrations.ml @@ -61,9 +61,10 @@ let help man_format migrations = function let datadir = let doc = "data directory containing builder.sqlite3 and data files" in + let env = Cmdliner.Cmd.Env.info "BUILDER_WEB_DATADIR" in Cmdliner.Arg.(value & opt dir Builder_system.default_datadir & - info ~doc ["datadir"; "d"]) + info ~env ~doc ["datadir"; "d"]) let setup_log = let setup_log level =