From f433a90d2f78dd1920815736b3684fcaee01af55 Mon Sep 17 00:00:00 2001 From: Denis Cornehl Date: Thu, 16 Apr 2026 05:10:09 +0200 Subject: [PATCH 1/3] start storing peak-memory-usage in builds table --- ...622930ec24b54edba59a4cdd0581ef9ce1ede.json | 10 +- ...59e078a8dd8972e65dc6223d94eecfcbf4ad.json} | 5 +- ...59e078a8dd8972e65dc6223d94eecfcbf4ad.json} | 5 +- ...59e078a8dd8972e65dc6223d94eecfcbf4ad.json} | 5 +- ...622930ec24b54edba59a4cdd0581ef9ce1ede.json | 10 +- ...59e078a8dd8972e65dc6223d94eecfcbf4ad.json} | 5 +- .../src/docbuilder/rustwide_builder.rs | 133 ++++++++++++++---- ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ .../bin/docs_rs_import_release/src/import.rs | 1 + ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ .../bin/docs_rs_web/src/handlers/releases.rs | 1 + ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ ...7aa4172844a87629e5f9e7acef0387308537.json} | 14 +- ...20260416031709_builds-memory-peak.down.sql | 2 + .../20260416031709_builds-memory-peak.up.sql | 2 + crates/lib/docs_rs_database/src/releases.rs | 13 +- ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ ...c2965768044997d7806bc7d61a858307cd947.json | 41 ------ ...e59e078a8dd8972e65dc6223d94eecfcbf4ad.json | 42 ++++++ crates/lib/docs_rs_test_fakes/src/legacy.rs | 1 + 32 files changed, 537 insertions(+), 417 deletions(-) rename crates/bin/docs_rs_builder/.sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json => .sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json (75%) rename .sqlx/{query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json => query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json} (80%) rename crates/bin/{docs_rs_builder/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json => cratesfyi/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json} (80%) rename crates/bin/{cratesfyi/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json => docs_rs_admin/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json} (80%) rename .sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json => crates/bin/docs_rs_builder/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json (75%) rename crates/bin/{docs_rs_admin/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json => docs_rs_builder/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json} (80%) delete mode 100644 crates/bin/docs_rs_import_release/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/bin/docs_rs_import_release/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json delete mode 100644 crates/bin/docs_rs_watcher/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/bin/docs_rs_watcher/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json delete mode 100644 crates/bin/docs_rs_web/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/bin/docs_rs_web/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json delete mode 100644 crates/lib/docs_rs_build_limits/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/lib/docs_rs_build_limits/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json delete mode 100644 crates/lib/docs_rs_build_queue/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/lib/docs_rs_build_queue/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json delete mode 100644 crates/lib/docs_rs_context/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/lib/docs_rs_context/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json delete mode 100644 crates/lib/docs_rs_database/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/lib/docs_rs_database/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json rename crates/lib/docs_rs_database/.sqlx/{query-820a877a5fd6426b8429668d95dd9ef8eb67338b3e0e24818868a20684eb26bb.json => query-9f268512c8fd05273bc1597e35c47aa4172844a87629e5f9e7acef0387308537.json} (79%) create mode 100644 crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.down.sql create mode 100644 crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.up.sql delete mode 100644 crates/lib/docs_rs_repository_stats/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/lib/docs_rs_repository_stats/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json delete mode 100644 crates/lib/docs_rs_test_fakes/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json create mode 100644 crates/lib/docs_rs_test_fakes/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json diff --git a/crates/bin/docs_rs_builder/.sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json b/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json similarity index 75% rename from crates/bin/docs_rs_builder/.sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json rename to .sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json index d52fe3ac5..b4228a578 100644 --- a/crates/bin/docs_rs_builder/.sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json +++ b/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n r.rustdoc_status,\n r.default_target,\n r.doc_targets,\n r.archive_storage,\n r.source_size as \"source_size!\",\n cov.total_items,\n b.id as build_id,\n b.build_status::TEXT as build_status,\n b.docsrs_version,\n b.rustc_version,\n b.documentation_size\n FROM\n crates as c\n INNER JOIN releases AS r ON c.id = r.crate_id\n INNER JOIN builds as b ON r.id = b.rid\n LEFT OUTER JOIN doc_coverage AS cov ON r.id = cov.release_id\n WHERE\n c.name = $1 AND\n r.version = $2", + "query": "SELECT\n r.rustdoc_status,\n r.default_target,\n r.doc_targets,\n r.archive_storage,\n r.source_size as \"source_size!\",\n cov.total_items,\n b.id as build_id,\n b.build_status::TEXT as build_status,\n b.docsrs_version,\n b.rustc_version,\n b.documentation_size,\n b.memory_peak\n FROM\n crates as c\n INNER JOIN releases AS r ON c.id = r.crate_id\n INNER JOIN builds as b ON r.id = b.rid\n LEFT OUTER JOIN doc_coverage AS cov ON r.id = cov.release_id\n WHERE\n c.name = $1 AND\n r.version = $2", "describe": { "columns": [ { @@ -57,6 +57,11 @@ "ordinal": 10, "name": "documentation_size", "type_info": "Int8" + }, + { + "ordinal": 11, + "name": "memory_peak", + "type_info": "Int8" } ], "parameters": { @@ -76,8 +81,9 @@ null, true, true, + true, true ] }, - "hash": "f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa" + "hash": "45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede" } diff --git a/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json similarity index 80% rename from .sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json rename to .sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json index ed2bfe3aa..53108f498 100644 --- a/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ b/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", "describe": { "columns": [ { @@ -30,6 +30,7 @@ "Int8", "Date", "Text", + "Int8", "Int4" ] }, @@ -37,5 +38,5 @@ false ] }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" } diff --git a/crates/bin/docs_rs_builder/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/bin/cratesfyi/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json similarity index 80% rename from crates/bin/docs_rs_builder/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json rename to crates/bin/cratesfyi/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json index ed2bfe3aa..53108f498 100644 --- a/crates/bin/docs_rs_builder/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ b/crates/bin/cratesfyi/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", "describe": { "columns": [ { @@ -30,6 +30,7 @@ "Int8", "Date", "Text", + "Int8", "Int4" ] }, @@ -37,5 +38,5 @@ false ] }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" } diff --git a/crates/bin/cratesfyi/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/bin/docs_rs_admin/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json similarity index 80% rename from crates/bin/cratesfyi/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json rename to crates/bin/docs_rs_admin/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json index ed2bfe3aa..53108f498 100644 --- a/crates/bin/cratesfyi/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ b/crates/bin/docs_rs_admin/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", "describe": { "columns": [ { @@ -30,6 +30,7 @@ "Int8", "Date", "Text", + "Int8", "Int4" ] }, @@ -37,5 +38,5 @@ false ] }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" } diff --git a/.sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json b/crates/bin/docs_rs_builder/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json similarity index 75% rename from .sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json rename to crates/bin/docs_rs_builder/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json index d52fe3ac5..b4228a578 100644 --- a/.sqlx/query-f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa.json +++ b/crates/bin/docs_rs_builder/.sqlx/query-45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n r.rustdoc_status,\n r.default_target,\n r.doc_targets,\n r.archive_storage,\n r.source_size as \"source_size!\",\n cov.total_items,\n b.id as build_id,\n b.build_status::TEXT as build_status,\n b.docsrs_version,\n b.rustc_version,\n b.documentation_size\n FROM\n crates as c\n INNER JOIN releases AS r ON c.id = r.crate_id\n INNER JOIN builds as b ON r.id = b.rid\n LEFT OUTER JOIN doc_coverage AS cov ON r.id = cov.release_id\n WHERE\n c.name = $1 AND\n r.version = $2", + "query": "SELECT\n r.rustdoc_status,\n r.default_target,\n r.doc_targets,\n r.archive_storage,\n r.source_size as \"source_size!\",\n cov.total_items,\n b.id as build_id,\n b.build_status::TEXT as build_status,\n b.docsrs_version,\n b.rustc_version,\n b.documentation_size,\n b.memory_peak\n FROM\n crates as c\n INNER JOIN releases AS r ON c.id = r.crate_id\n INNER JOIN builds as b ON r.id = b.rid\n LEFT OUTER JOIN doc_coverage AS cov ON r.id = cov.release_id\n WHERE\n c.name = $1 AND\n r.version = $2", "describe": { "columns": [ { @@ -57,6 +57,11 @@ "ordinal": 10, "name": "documentation_size", "type_info": "Int8" + }, + { + "ordinal": 11, + "name": "memory_peak", + "type_info": "Int8" } ], "parameters": { @@ -76,8 +81,9 @@ null, true, true, + true, true ] }, - "hash": "f011aefb83cbd26e7e83edbb3d280c554a9e2a64f0e7953c1e52939b24ccdafa" + "hash": "45430d90ec9c871622a0b4d85da622930ec24b54edba59a4cdd0581ef9ce1ede" } diff --git a/crates/bin/docs_rs_admin/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/bin/docs_rs_builder/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json similarity index 80% rename from crates/bin/docs_rs_admin/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json rename to crates/bin/docs_rs_builder/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json index ed2bfe3aa..53108f498 100644 --- a/crates/bin/docs_rs_admin/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ b/crates/bin/docs_rs_builder/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", "describe": { "columns": [ { @@ -30,6 +30,7 @@ "Int8", "Date", "Text", + "Int8", "Int4" ] }, @@ -37,5 +38,5 @@ false ] }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" } diff --git a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs index 8d4c50842..d4d3d1ed2 100644 --- a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs +++ b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs @@ -36,7 +36,10 @@ use docsrs_metadata::{BuildTargets, DEFAULT_TARGETS, HOST_TARGET, Metadata}; use regex::Regex; use rustwide::{ AlternativeRegistry, Build, Crate, Toolchain, Workspace, WorkspaceBuilder, - cmd::{Command, CommandError, SandboxBuilder, SandboxImage}, + cmd::{ + Command, CommandError, ProcessStatistics as RustwideProcessStats, SandboxBuilder, + SandboxImage, + }, logging::{self, LogStorage}, toolchain::ToolchainError, }; @@ -44,12 +47,50 @@ use std::{ collections::{HashMap, HashSet}, fs::{self, File}, io::BufReader, + ops::AddAssign, path::Path, sync::{Arc, LazyLock}, time::Instant, }; use tracing::{debug, error, info, info_span, instrument, warn}; +#[derive(Default)] +struct ProcessStatistics(RustwideProcessStats); + +impl From<&RustwideProcessStats> for ProcessStatistics { + fn from(value: &RustwideProcessStats) -> Self { + Self(RustwideProcessStats { + memory_peak: value.memory_peak, + }) + } +} + +impl From for ProcessStatistics { + fn from(value: RustwideProcessStats) -> Self { + Self(RustwideProcessStats { + memory_peak: value.memory_peak, + }) + } +} + +impl Clone for ProcessStatistics { + fn clone(&self) -> Self { + Self(RustwideProcessStats { + memory_peak: self.0.memory_peak, + }) + } +} + +impl AddAssign for ProcessStatistics { + fn add_assign(&mut self, rhs: Self) { + self.0.memory_peak = match (self.0.memory_peak, rhs.0.memory_peak) { + (Some(lhs), Some(rhs)) => Some(lhs.max(rhs)), + (Some(v), None) | (None, Some(v)) => Some(v), + (None, None) => None, + }; + } +} + const USER_AGENT: &str = "docs.rs builder (https://github.com/rust-lang/docs.rs)"; const COMPONENTS: &[&str] = &["llvm-tools-preview", "rustc-dev", "rustfmt"]; static DUMMY_CRATE_NAME: LazyLock = LazyLock::new(|| "empty-library".parse().unwrap()); @@ -714,6 +755,8 @@ impl RustwideBuilder { .is_dir(); } + let mut aggregated_build_stats = res.stats.clone(); + let mut target_build_logs = HashMap::new(); let documentation_size = if has_docs { debug!("adding documentation for the default target to the database"); @@ -743,7 +786,9 @@ impl RustwideBuilder { collect_metrics, )?; target_build_logs.insert(target, target_res.build_log); + aggregated_build_stats += target_res.stats; } + let (file_list, new_alg) = self.runtime.block_on( self.storage.store_all_in_archive( @@ -771,6 +816,7 @@ impl RustwideBuilder { BuildStatus::Failure }, documentation_size, + aggregated_build_stats.0.memory_peak, res.result.build_error.as_ref() ))?; @@ -963,7 +1009,7 @@ impl RustwideBuilder { build: &Build, metadata: &Metadata, limits: &Limits, - ) -> Result<()> { + ) -> Result { let rustdoc_flags = vec!["--output-format".to_string(), "json".to_string()]; let mut storage = LogStorage::new(log::LevelFilter::Info); @@ -974,7 +1020,6 @@ impl RustwideBuilder { self.prepare_command(build, target, metadata, limits, rustdoc_flags, false) .and_then(|command| command.run().map_err(Into::into)) }); - let successful = result.is_ok(); { let _span = info_span!("store_json_build_logs").entered(); @@ -984,11 +1029,11 @@ impl RustwideBuilder { .context("storing build log on S3")?; } - if !successful { + let Ok(stats) = result else { // this is a normal build error and will be visible in the uploaded build logs. // We don't need the Err variant here. - return Ok(()); - } + return Ok(ProcessStatistics::default()); + }; let json_dir = if metadata.proc_macro { assert!( @@ -1050,7 +1095,7 @@ impl RustwideBuilder { } } - Ok(()) + Ok(ProcessStatistics(stats)) } #[instrument(skip(self, build))] @@ -1060,7 +1105,7 @@ impl RustwideBuilder { build: &Build, metadata: &Metadata, limits: &Limits, - ) -> Result> { + ) -> Result<(ProcessStatistics, Option)> { let rustdoc_flags = vec![ "--output-format".to_string(), "json".to_string(), @@ -1074,7 +1119,8 @@ impl RustwideBuilder { items_with_examples: 0, }; - self.prepare_command(build, target, metadata, limits, rustdoc_flags, false)? + let stats = self + .prepare_command(build, target, metadata, limits, rustdoc_flags, false)? .process_lines(&mut |line, _| { if line.starts_with('{') && line.ends_with('}') { match doc_coverage::parse_line(line) { @@ -1086,13 +1132,14 @@ impl RustwideBuilder { .log_output(true) .run()?; - Ok( + Ok(( + ProcessStatistics(stats), if coverage.total_items == 0 && coverage.documented_items == 0 { None } else { Some(coverage) }, - ) + )) } #[instrument(skip(self, build))] @@ -1132,19 +1179,24 @@ impl RustwideBuilder { let mut storage = LogStorage::new(log::LevelFilter::Info); storage.set_max_size(limits.max_log_size()); + let mut aggregated_build_stats = ProcessStatistics::default(); + // we have to run coverage before the doc-build because currently it // deletes the doc-target folder. // https://github.com/rust-lang/cargo/issues/9447 - let doc_coverage = match self.get_coverage(target, build, metadata, limits) { - Ok(cov) => cov, - Err(err) => { - info!("error when trying to get coverage: {}", err); - info!("continuing anyways."); - None - } - }; + let (coverage_stats, doc_coverage) = + match self.get_coverage(target, build, metadata, limits) { + Ok((stats, cov)) => (stats, cov), + Err(err) => { + info!("error when trying to get coverage: {}", err); + info!("continuing anyways."); + (ProcessStatistics::default(), None) + } + }; - if let Err(err) = self.execute_json_build( + aggregated_build_stats += coverage_stats; + + let json_stats = match self.execute_json_build( build_id, name, version, @@ -1154,15 +1206,23 @@ impl RustwideBuilder { metadata, limits, ) { - // FIXME: this is temporary. Theoretically all `Err` things coming out - // of the method should be retryable, so we could juse use `?` here. - // But since this is new, I want to be carful and first see what kind of - // errors we are seeing here. - error!( - ?err, - "internal error when trying to generate rustdoc JSON output" - ); - } + Ok(stats) => stats, + Err(err) => { + // FIXME: this is temporary. Theoretically all `Err` things coming out + // of the method should be retryable, so we could juse use `?` here. + // But since this is new, I want to be carful and first see what kind of + // errors we are seeing here. + error!( + ?err, + "internal error when trying to generate rustdoc JSON output" + ); + // at some point we also want to have stats for failed commands, but + // rustwide doesn't return them yet. + ProcessStatistics::default() + } + }; + + aggregated_build_stats += json_stats; let result = { let _span = info_span!("cargo_build", target = %target, is_default_target).entered(); @@ -1210,6 +1270,14 @@ impl RustwideBuilder { std::fs::rename(old_dir, new_dir)?; } + let main_build_stats = result + .as_ref() + .ok() + .map(ProcessStatistics::from) + .unwrap_or_default(); + + aggregated_build_stats += main_build_stats; + Ok(FullBuildResult { result: BuildResult { rustc_version: self.rustc_version()?, @@ -1220,6 +1288,7 @@ impl RustwideBuilder { cargo_metadata, build_log: storage.to_string(), target: target.to_string(), + stats: aggregated_build_stats, }) } @@ -1352,6 +1421,7 @@ struct FullBuildResult { cargo_metadata: CargoMetadata, doc_coverage: Option, build_log: String, + stats: ProcessStatistics, } impl FullBuildResult { @@ -1480,7 +1550,8 @@ mod tests { b.build_status::TEXT as build_status, b.docsrs_version, b.rustc_version, - b.documentation_size + b.documentation_size, + b.memory_peak FROM crates as c INNER JOIN releases AS r ON c.id = r.crate_id @@ -1506,6 +1577,7 @@ mod tests { assert_eq!(row.build_status.unwrap(), "success"); assert!(row.source_size > 0); assert!(row.documentation_size.unwrap() > 0); + assert!(row.memory_peak.unwrap() > 10 * 1024 * 1024); // 10 MiB, in my test it was > 100 MiB let mut targets: Vec = row .doc_targets @@ -1745,6 +1817,7 @@ mod tests { "other-version", BuildStatus::Success, None, + None, None::<&SimpleBuildError>, ) .await?; diff --git a/crates/bin/docs_rs_import_release/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/bin/docs_rs_import_release/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/bin/docs_rs_import_release/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/bin/docs_rs_import_release/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/bin/docs_rs_import_release/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/bin/docs_rs_import_release/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/bin/docs_rs_import_release/src/import.rs b/crates/bin/docs_rs_import_release/src/import.rs index 9a545a43a..a94ceb2df 100644 --- a/crates/bin/docs_rs_import_release/src/import.rs +++ b/crates/bin/docs_rs_import_release/src/import.rs @@ -251,6 +251,7 @@ async fn import_test_release_inner( BUILD_VERSION, BuildStatus::Success, Some(documentation_size), + None, None::<&SimpleBuildError>, ) .await?; diff --git a/crates/bin/docs_rs_watcher/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/bin/docs_rs_watcher/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/bin/docs_rs_watcher/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/bin/docs_rs_watcher/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/bin/docs_rs_watcher/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/bin/docs_rs_watcher/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/bin/docs_rs_web/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/bin/docs_rs_web/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/bin/docs_rs_web/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/bin/docs_rs_web/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/bin/docs_rs_web/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/bin/docs_rs_web/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/bin/docs_rs_web/src/handlers/releases.rs b/crates/bin/docs_rs_web/src/handlers/releases.rs index 2ea92f704..ca19a053c 100644 --- a/crates/bin/docs_rs_web/src/handlers/releases.rs +++ b/crates/bin/docs_rs_web/src/handlers/releases.rs @@ -861,6 +861,7 @@ mod tests { "docs.rs 4.0.0", BuildStatus::Success, None, + None, None::<&SimpleBuildError>, ) .await?; diff --git a/crates/lib/docs_rs_build_limits/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/lib/docs_rs_build_limits/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/lib/docs_rs_build_limits/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/lib/docs_rs_build_limits/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/lib/docs_rs_build_limits/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/lib/docs_rs_build_limits/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/lib/docs_rs_build_queue/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/lib/docs_rs_build_queue/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/lib/docs_rs_build_queue/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/lib/docs_rs_build_queue/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/lib/docs_rs_build_queue/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/lib/docs_rs_build_queue/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/lib/docs_rs_context/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/lib/docs_rs_context/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/lib/docs_rs_context/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/lib/docs_rs_context/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/lib/docs_rs_context/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/lib/docs_rs_context/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/lib/docs_rs_database/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/lib/docs_rs_database/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/lib/docs_rs_database/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/lib/docs_rs_database/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/lib/docs_rs_database/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/lib/docs_rs_database/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/lib/docs_rs_database/.sqlx/query-820a877a5fd6426b8429668d95dd9ef8eb67338b3e0e24818868a20684eb26bb.json b/crates/lib/docs_rs_database/.sqlx/query-9f268512c8fd05273bc1597e35c47aa4172844a87629e5f9e7acef0387308537.json similarity index 79% rename from crates/lib/docs_rs_database/.sqlx/query-820a877a5fd6426b8429668d95dd9ef8eb67338b3e0e24818868a20684eb26bb.json rename to crates/lib/docs_rs_database/.sqlx/query-9f268512c8fd05273bc1597e35c47aa4172844a87629e5f9e7acef0387308537.json index 6505a2dfb..1e7575b3f 100644 --- a/crates/lib/docs_rs_database/.sqlx/query-820a877a5fd6426b8429668d95dd9ef8eb67338b3e0e24818868a20684eb26bb.json +++ b/crates/lib/docs_rs_database/.sqlx/query-9f268512c8fd05273bc1597e35c47aa4172844a87629e5f9e7acef0387308537.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "SELECT\n rustc_version,\n docsrs_version,\n build_status as \"build_status: BuildStatus\",\n documentation_size,\n errors,\n error_kind,\n rustc_nightly_date\n FROM builds\n WHERE id = $1", + "query": "SELECT\n rustc_version,\n docsrs_version,\n build_status as \"build_status: BuildStatus\",\n documentation_size,\n memory_peak,\n errors,\n error_kind,\n rustc_nightly_date\n FROM builds\n WHERE id = $1", "describe": { "columns": [ { @@ -36,16 +36,21 @@ }, { "ordinal": 4, + "name": "memory_peak", + "type_info": "Int8" + }, + { + "ordinal": 5, "name": "errors", "type_info": "Text" }, { - "ordinal": 5, + "ordinal": 6, "name": "error_kind", "type_info": "Text" }, { - "ordinal": 6, + "ordinal": 7, "name": "rustc_nightly_date", "type_info": "Date" } @@ -62,8 +67,9 @@ true, true, true, + true, true ] }, - "hash": "820a877a5fd6426b8429668d95dd9ef8eb67338b3e0e24818868a20684eb26bb" + "hash": "9f268512c8fd05273bc1597e35c47aa4172844a87629e5f9e7acef0387308537" } diff --git a/crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.down.sql b/crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.down.sql new file mode 100644 index 000000000..41c8ea349 --- /dev/null +++ b/crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.down.sql @@ -0,0 +1,2 @@ +DROP INDEX builds_memory_peak_idx; +ALTER TABLE builds DROP COLUMN memory_peak; diff --git a/crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.up.sql b/crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.up.sql new file mode 100644 index 000000000..fdeba825d --- /dev/null +++ b/crates/lib/docs_rs_database/migrations/20260416031709_builds-memory-peak.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE builds ADD COLUMN memory_peak BIGINT; +CREATE INDEX builds_memory_peak_idx ON builds USING btree (memory_peak) ; diff --git a/crates/lib/docs_rs_database/src/releases.rs b/crates/lib/docs_rs_database/src/releases.rs index edd018532..6c78cbc26 100644 --- a/crates/lib/docs_rs_database/src/releases.rs +++ b/crates/lib/docs_rs_database/src/releases.rs @@ -220,6 +220,7 @@ pub async fn add_doc_coverage( } /// Adds a build into database +#[allow(clippy::too_many_arguments)] #[instrument(skip(conn))] pub async fn finish_build( conn: &mut sqlx::PgConnection, @@ -228,6 +229,7 @@ pub async fn finish_build( docsrs_version: &str, build_status: BuildStatus, documentation_size: Option, + memory_peak: Option, build_error: Option<&E>, ) -> Result<()> where @@ -261,9 +263,10 @@ where documentation_size = $6, rustc_nightly_date = $7, build_finished = NOW(), - error_kind = $8 + error_kind = $8, + memory_peak = $9 WHERE - id = $9 + id = $10 RETURNING rid as "rid: ReleaseId" "#, rustc_version, docsrs_version, @@ -273,6 +276,7 @@ where documentation_size.map(|v| v as i64), rustc_date, build_error.map(|err| err.kind()), + memory_peak.map(|v| v as i64), build_id as _, ) .fetch_one(&mut *conn) @@ -751,6 +755,7 @@ mod test { "docsrs_version", BuildStatus::Success, None, + None, None::<&SimpleBuildError>, ) .await?; @@ -803,6 +808,7 @@ mod test { "docsrs_version", BuildStatus::Success, Some(42), + Some(23), None::<&SimpleBuildError>, ) .await?; @@ -813,6 +819,7 @@ mod test { docsrs_version, build_status as "build_status: BuildStatus", documentation_size, + memory_peak, errors, error_kind, rustc_nightly_date @@ -827,6 +834,7 @@ mod test { assert_eq!(row.docsrs_version, Some("docsrs_version".into())); assert_eq!(row.build_status, BuildStatus::Success); assert_eq!(row.documentation_size, Some(42)); + assert_eq!(row.memory_peak, Some(23)); assert!(row.rustc_nightly_date.is_none()); assert!(row.errors.is_none()); assert!(row.error_kind.is_none()); @@ -851,6 +859,7 @@ mod test { "docsrs_version", BuildStatus::Failure, None, + None, Some(&SimpleBuildError("error message".into())), ) .await?; diff --git a/crates/lib/docs_rs_repository_stats/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/lib/docs_rs_repository_stats/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/lib/docs_rs_repository_stats/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/lib/docs_rs_repository_stats/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/lib/docs_rs_repository_stats/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/lib/docs_rs_repository_stats/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/lib/docs_rs_test_fakes/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json b/crates/lib/docs_rs_test_fakes/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json deleted file mode 100644 index ed2bfe3aa..000000000 --- a/crates/lib/docs_rs_test_fakes/.sqlx/query-5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "db_name": "PostgreSQL", - "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8\n WHERE\n id = $9\n RETURNING rid as \"rid: ReleaseId\" ", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "rid: ReleaseId", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - { - "Custom": { - "name": "build_status", - "kind": { - "Enum": [ - "in_progress", - "success", - "failure" - ] - } - } - }, - "Text", - "Text", - "Int8", - "Date", - "Text", - "Int4" - ] - }, - "nullable": [ - false - ] - }, - "hash": "5dfaa907320cdd1eb7575e1146cc2965768044997d7806bc7d61a858307cd947" -} diff --git a/crates/lib/docs_rs_test_fakes/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json b/crates/lib/docs_rs_test_fakes/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json new file mode 100644 index 000000000..53108f498 --- /dev/null +++ b/crates/lib/docs_rs_test_fakes/.sqlx/query-96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE builds\n SET\n rustc_version = $1,\n docsrs_version = $2,\n build_status = $3,\n build_server = $4,\n errors = $5,\n documentation_size = $6,\n rustc_nightly_date = $7,\n build_finished = NOW(),\n error_kind = $8,\n memory_peak = $9\n WHERE\n id = $10\n RETURNING rid as \"rid: ReleaseId\" ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "rid: ReleaseId", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + { + "Custom": { + "name": "build_status", + "kind": { + "Enum": [ + "in_progress", + "success", + "failure" + ] + } + } + }, + "Text", + "Text", + "Int8", + "Date", + "Text", + "Int8", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "96038b2acad7957be667de55421e59e078a8dd8972e65dc6223d94eecfcbf4ad" +} diff --git a/crates/lib/docs_rs_test_fakes/src/legacy.rs b/crates/lib/docs_rs_test_fakes/src/legacy.rs index 64a85fece..899ba4fd4 100644 --- a/crates/lib/docs_rs_test_fakes/src/legacy.rs +++ b/crates/lib/docs_rs_test_fakes/src/legacy.rs @@ -708,6 +708,7 @@ impl FakeBuild { &self.docsrs_version, self.build_status, Some(42), + Some(23), None::<&SimpleBuildError>, ) .await?; From 857ff217eab26eac67521a16572a93e9657a9859 Mon Sep 17 00:00:00 2001 From: Denis Cornehl Date: Mon, 20 Apr 2026 08:40:21 +0200 Subject: [PATCH 2/3] update rustwide, remove obsolete ProcessStats newtype --- Cargo.lock | 32 +++++----- .../src/docbuilder/rustwide_builder.rs | 63 +++---------------- 2 files changed, 25 insertions(+), 70 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ce176263..2d59002fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -262,7 +262,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -273,7 +273,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -1337,7 +1337,7 @@ version = "3.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "faf9468729b8cbcea668e36183cb69d317348c2e08e994829fb56ebfdfbaac34" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] @@ -2565,7 +2565,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -4794,7 +4794,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.3", + "socket2 0.5.10", "system-configuration", "tokio", "tower-service", @@ -5058,7 +5058,7 @@ dependencies = [ "portable-atomic", "portable-atomic-util", "serde_core", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -5602,7 +5602,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -6539,7 +6539,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.3", + "socket2 0.5.10", "thiserror 2.0.18", "tokio", "tracing", @@ -6577,7 +6577,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.3", + "socket2 0.5.10", "tracing", "windows-sys 0.60.2", ] @@ -6989,7 +6989,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7046,7 +7046,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -7075,9 +7075,9 @@ checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" [[package]] name = "rustwide" -version = "0.23.0" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab59e80e2a33a40593e509eeb811b5f8a7f2c575cd1a2ace806e8b3a79cfb9c9" +checksum = "7b91bb263a28b24abbbe4fbac9fa152daf5b3ed127f09eb9cf36aa2a0e82d14f" dependencies = [ "anyhow", "attohttpc", @@ -7654,7 +7654,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -8072,7 +8072,7 @@ dependencies = [ "getrandom 0.4.2", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.60.2", ] [[package]] @@ -8983,7 +8983,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] diff --git a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs index d4d3d1ed2..de5fbddf0 100644 --- a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs +++ b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs @@ -36,10 +36,7 @@ use docsrs_metadata::{BuildTargets, DEFAULT_TARGETS, HOST_TARGET, Metadata}; use regex::Regex; use rustwide::{ AlternativeRegistry, Build, Crate, Toolchain, Workspace, WorkspaceBuilder, - cmd::{ - Command, CommandError, ProcessStatistics as RustwideProcessStats, SandboxBuilder, - SandboxImage, - }, + cmd::{Command, CommandError, ProcessStatistics, SandboxBuilder, SandboxImage}, logging::{self, LogStorage}, toolchain::ToolchainError, }; @@ -47,50 +44,12 @@ use std::{ collections::{HashMap, HashSet}, fs::{self, File}, io::BufReader, - ops::AddAssign, path::Path, sync::{Arc, LazyLock}, time::Instant, }; use tracing::{debug, error, info, info_span, instrument, warn}; -#[derive(Default)] -struct ProcessStatistics(RustwideProcessStats); - -impl From<&RustwideProcessStats> for ProcessStatistics { - fn from(value: &RustwideProcessStats) -> Self { - Self(RustwideProcessStats { - memory_peak: value.memory_peak, - }) - } -} - -impl From for ProcessStatistics { - fn from(value: RustwideProcessStats) -> Self { - Self(RustwideProcessStats { - memory_peak: value.memory_peak, - }) - } -} - -impl Clone for ProcessStatistics { - fn clone(&self) -> Self { - Self(RustwideProcessStats { - memory_peak: self.0.memory_peak, - }) - } -} - -impl AddAssign for ProcessStatistics { - fn add_assign(&mut self, rhs: Self) { - self.0.memory_peak = match (self.0.memory_peak, rhs.0.memory_peak) { - (Some(lhs), Some(rhs)) => Some(lhs.max(rhs)), - (Some(v), None) | (None, Some(v)) => Some(v), - (None, None) => None, - }; - } -} - const USER_AGENT: &str = "docs.rs builder (https://github.com/rust-lang/docs.rs)"; const COMPONENTS: &[&str] = &["llvm-tools-preview", "rustc-dev", "rustfmt"]; static DUMMY_CRATE_NAME: LazyLock = LazyLock::new(|| "empty-library".parse().unwrap()); @@ -786,7 +745,7 @@ impl RustwideBuilder { collect_metrics, )?; target_build_logs.insert(target, target_res.build_log); - aggregated_build_stats += target_res.stats; + aggregated_build_stats.merge_mut(target_res.stats); } let (file_list, new_alg) = @@ -816,7 +775,7 @@ impl RustwideBuilder { BuildStatus::Failure }, documentation_size, - aggregated_build_stats.0.memory_peak, + aggregated_build_stats.memory_peak, res.result.build_error.as_ref() ))?; @@ -1095,7 +1054,7 @@ impl RustwideBuilder { } } - Ok(ProcessStatistics(stats)) + Ok(stats) } #[instrument(skip(self, build))] @@ -1133,7 +1092,7 @@ impl RustwideBuilder { .run()?; Ok(( - ProcessStatistics(stats), + stats, if coverage.total_items == 0 && coverage.documented_items == 0 { None } else { @@ -1194,7 +1153,7 @@ impl RustwideBuilder { } }; - aggregated_build_stats += coverage_stats; + aggregated_build_stats.merge_mut(coverage_stats); let json_stats = match self.execute_json_build( build_id, @@ -1222,7 +1181,7 @@ impl RustwideBuilder { } }; - aggregated_build_stats += json_stats; + aggregated_build_stats.merge_mut(json_stats); let result = { let _span = info_span!("cargo_build", target = %target, is_default_target).entered(); @@ -1270,13 +1229,9 @@ impl RustwideBuilder { std::fs::rename(old_dir, new_dir)?; } - let main_build_stats = result - .as_ref() - .ok() - .map(ProcessStatistics::from) - .unwrap_or_default(); + let main_build_stats = result.as_ref().ok().cloned().unwrap_or_default(); - aggregated_build_stats += main_build_stats; + aggregated_build_stats.merge_mut(main_build_stats); Ok(FullBuildResult { result: BuildResult { From c15d3770e1937dc31503caa4e16aea7597cacbe2 Mon Sep 17 00:00:00 2001 From: Denis Cornehl Date: Tue, 21 Apr 2026 06:53:40 +0200 Subject: [PATCH 3/3] merge logmessage --- .../bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs index de5fbddf0..3ebe436e0 100644 --- a/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs +++ b/crates/bin/docs_rs_builder/src/docbuilder/rustwide_builder.rs @@ -1147,8 +1147,10 @@ impl RustwideBuilder { match self.get_coverage(target, build, metadata, limits) { Ok((stats, cov)) => (stats, cov), Err(err) => { - info!("error when trying to get coverage: {}", err); - info!("continuing anyways."); + info!( + ?err, + "error when trying to get coverage, continuing anyways.", + ); (ProcessStatistics::default(), None) } };