Reuse DB connection for consequtive queries

This commit is contained in:
Robur 2021-12-02 13:58:44 +00:00
parent 0afec1617b
commit 19633e84ea

View file

@ -176,16 +176,18 @@ let add_routes datadir =
let job_name = Dream.param "job" req let job_name = Dream.param "job" req
and build = Dream.param "build" req in and build = Dream.param "build" req in
get_uuid build >>= fun uuid -> get_uuid build >>= fun uuid ->
(Dream.sql req (Model.readme job_name) >>= fun readme -> Dream.sql req (fun conn ->
Dream.sql req (Model.build uuid) >>= fun (build_id, build) -> Model.readme job_name conn >>= fun readme ->
Dream.sql req (Model.build_artifacts build_id) >>= fun artifacts -> Model.build uuid conn >>= fun (build_id, build) ->
Dream.sql req (Model.builds_with_same_input_and_same_main_binary build_id) >>= fun same_input_same_output -> Model.build_artifacts build_id conn >>= fun artifacts ->
Dream.sql req (Model.builds_with_different_input_and_same_main_binary build_id) >>= fun different_input_same_output -> Model.builds_with_same_input_and_same_main_binary build_id conn >>= fun same_input_same_output ->
Dream.sql req (Model.builds_with_same_input_and_different_main_binary build_id) >>= fun same_input_different_output -> Model.builds_with_different_input_and_same_main_binary build_id conn >>= fun different_input_same_output ->
Dream.sql req (Model.latest_successful_build build.job_id (Some build.Builder_db.Build.platform)) >>= fun latest -> Model.builds_with_same_input_and_different_main_binary build_id conn >>= fun same_input_different_output ->
Dream.sql req (Model.next_successful_build_different_output build_id) >>= fun next -> Model.latest_successful_build build.job_id (Some build.Builder_db.Build.platform) conn >>= fun latest ->
Dream.sql req (Model.previous_successful_build_different_output build_id) >|= fun previous -> Model.next_successful_build_different_output build_id conn >>= fun next ->
(readme, build, artifacts, same_input_same_output, different_input_same_output, same_input_different_output, latest, next, previous)) Model.previous_successful_build_different_output build_id conn >|= fun previous ->
(readme, build, artifacts, same_input_same_output, different_input_same_output, same_input_different_output, latest, next, previous)
)
|> if_error "Error getting job build" |> if_error "Error getting job build"
~log:(fun e -> Log.warn (fun m -> m "Error getting job build: %a" pp_error e)) ~log:(fun e -> Log.warn (fun m -> m "Error getting job build: %a" pp_error e))
>>= fun (readme, build, artifacts, same_input_same_output, different_input_same_output, same_input_different_output, latest, next, previous) -> >>= fun (readme, build, artifacts, same_input_same_output, different_input_same_output, same_input_different_output, latest, next, previous) ->
@ -303,25 +305,26 @@ let add_routes datadir =
let build_right = Dream.param "build_right" req in let build_right = Dream.param "build_right" req in
get_uuid build_left >>= fun build_left -> get_uuid build_left >>= fun build_left ->
get_uuid build_right >>= fun build_right -> get_uuid build_right >>= fun build_right ->
(Dream.sql req (Model.build build_left) >>= fun (_id, build_left) -> Dream.sql req (fun conn ->
Dream.sql req (Model.build build_right) >>= fun (_id, build_right) -> Model.build build_left conn >>= fun (_id, build_left) ->
Dream.sql req (Model.build_artifact build_left.Builder_db.Build.uuid (Fpath.v "opam-switch")) >>= Model.build build_right conn >>= fun (_id, build_right) ->
Model.build_artifact_data datadir >>= fun switch_left -> Model.build_artifact build_left.Builder_db.Build.uuid (Fpath.v "opam-switch") conn >>=
Dream.sql req (Model.build_artifact build_left.Builder_db.Build.uuid (Fpath.v "build-environment")) >>= Model.build_artifact_data datadir >>= fun switch_left ->
Model.build_artifact_data datadir >>= fun build_env_left -> Model.build_artifact build_left.Builder_db.Build.uuid (Fpath.v "build-environment") conn >>=
Dream.sql req (Model.build_artifact build_left.Builder_db.Build.uuid (Fpath.v "system-packages")) >>= Model.build_artifact_data datadir >>= fun build_env_left ->
Model.build_artifact_data datadir >>= fun system_packages_left -> Model.build_artifact build_left.Builder_db.Build.uuid (Fpath.v "system-packages") conn >>=
Dream.sql req (Model.build_artifact build_right.Builder_db.Build.uuid (Fpath.v "opam-switch")) >>= Model.build_artifact_data datadir >>= fun system_packages_left ->
Model.build_artifact_data datadir >>= fun switch_right -> Model.build_artifact build_right.Builder_db.Build.uuid (Fpath.v "opam-switch") conn >>=
Dream.sql req (Model.build_artifact build_right.Builder_db.Build.uuid (Fpath.v "build-environment")) >>= Model.build_artifact_data datadir >>= fun switch_right ->
Model.build_artifact_data datadir >>= fun build_env_right -> Model.build_artifact build_right.Builder_db.Build.uuid (Fpath.v "build-environment") conn >>=
Dream.sql req (Model.build_artifact build_right.Builder_db.Build.uuid (Fpath.v "system-packages")) >>= Model.build_artifact_data datadir >>= fun build_env_right ->
Model.build_artifact_data datadir >>= fun system_packages_right -> Model.build_artifact build_right.Builder_db.Build.uuid (Fpath.v "system-packages") conn >>=
Dream.sql req (Model.job_name build_left.job_id) >>= fun job_left -> Model.build_artifact_data datadir >>= fun system_packages_right ->
Dream.sql req (Model.job_name build_right.job_id) >|= fun job_right -> Model.job_name build_left.job_id conn >>= fun job_left ->
(job_left, job_right, build_left, build_right, Model.job_name build_right.job_id conn >|= fun job_right ->
switch_left, build_env_left, system_packages_left, (job_left, job_right, build_left, build_right,
switch_right, build_env_right, system_packages_right)) switch_left, build_env_left, system_packages_left,
switch_right, build_env_right, system_packages_right))
|> if_error "Internal server error" |> if_error "Internal server error"
>>= fun (job_left, job_right, build_left, build_right, >>= fun (job_left, job_right, build_left, build_right,
switch_left, build_env_left, system_packages_left, switch_left, build_env_left, system_packages_left,