Skip to content

Commit 9884ae5

Browse files
committed
consistency: warn & continue when errors happen while fixing inconsistencies
1 parent 93356f0 commit 9884ae5

File tree

4 files changed

+41
-19
lines changed

4 files changed

+41
-19
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ percent-encoding = "2.2.0"
9797

9898
# NOTE: if you change this, also double-check that the comment in `queue_builder::remove_tempdirs` is still accurate.
9999
tempfile = "3.1.0"
100+
fn-error-context = "0.2.0"
100101

101102
# Templating
102103
tera = { version = "1.5.0", features = ["builtins"] }
@@ -122,7 +123,6 @@ kuchiki = "0.8"
122123
rand = "0.8"
123124
mockito = "0.31.0"
124125
test-case = "2.0.0"
125-
fn-error-context = "0.2.0"
126126
aws-smithy-client = { version = "0.52.0", features = ["test-util"]}
127127
aws-smithy-http = "0.52.0"
128128
indoc = "1.0.7"

src/build_queue.rs

+20-12
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::storage::Storage;
66
use crate::utils::{get_config, get_crate_priority, report_error, set_config, ConfigName};
77
use crate::{Config, Index, Metrics, RustwideBuilder};
88
use anyhow::Context;
9+
use fn_error_context::context;
910

1011
use tracing::{debug, error, info, instrument, warn};
1112

@@ -72,6 +73,7 @@ impl BuildQueue {
7273
Ok(())
7374
}
7475

76+
#[context("error trying to add {name}-{version} to build queue")]
7577
pub fn add_crate(
7678
&self,
7779
name: &str,
@@ -266,22 +268,25 @@ fn retry<T>(mut f: impl FnMut() -> Result<T>, max_attempts: u32) -> Result<T> {
266268
}
267269

268270
#[instrument(skip(conn))]
269-
pub fn set_yanked(conn: &mut postgres::Client, name: &str, version: &str, yanked: bool) {
271+
#[context("error trying to set {name}-{version} to yanked: {yanked}")]
272+
pub fn set_yanked(
273+
conn: &mut postgres::Client,
274+
name: &str,
275+
version: &str,
276+
yanked: bool,
277+
) -> Result<()> {
270278
let activity = if yanked { "yanked" } else { "unyanked" };
271279

272-
match conn
273-
.execute(
274-
"UPDATE releases
280+
match conn.execute(
281+
"UPDATE releases
275282
SET yanked = $3
276283
FROM crates
277284
WHERE crates.id = releases.crate_id
278285
AND name = $1
279286
AND version = $2
280287
",
281-
&[&name, &version, &yanked],
282-
)
283-
.with_context(|| format!("error while setting {}-{} to {}", name, version, activity))
284-
{
288+
&[&name, &version, &yanked],
289+
) {
285290
Ok(rows) => {
286291
if rows != 1 {
287292
error!(
@@ -290,9 +295,10 @@ pub fn set_yanked(conn: &mut postgres::Client, name: &str, version: &str, yanked
290295
);
291296
} else {
292297
debug!("{}-{} {}", name, version, activity);
293-
}
298+
};
299+
Ok(())
294300
}
295-
Err(err) => report_error(&err),
301+
Err(err) => Err(err.into()),
296302
}
297303
}
298304

@@ -359,12 +365,14 @@ impl BuildQueue {
359365
if let Some(release) = yanked.or(unyanked) {
360366
// FIXME: delay yanks of crates that have not yet finished building
361367
// https://github.com/rust-lang/docs.rs/issues/1934
362-
set_yanked(
368+
if let Err(err) = set_yanked(
363369
&mut conn,
364370
release.name.as_str(),
365371
release.version.as_str(),
366372
yanked.is_some(),
367-
);
373+
) {
374+
report_error(&err);
375+
}
368376

369377
if let Err(err) = cdn::invalidate_crate(&self.config, &self.cdn, &release.name) {
370378
report_error(&err);

src/db/delete.rs

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use crate::error::Result;
22
use crate::storage::{rustdoc_archive_path, source_archive_path, Storage};
33
use crate::{Config, Context};
44
use anyhow::Context as _;
5+
use fn_error_context::context;
56
use postgres::Client;
67
use std::fs;
78

@@ -16,6 +17,7 @@ enum CrateDeletionError {
1617
MissingCrate(String),
1718
}
1819

20+
#[context("error trying to delete crate {name} from database")]
1921
pub fn delete_crate(
2022
conn: &mut Client,
2123
storage: &Storage,
@@ -52,6 +54,7 @@ pub fn delete_crate(
5254
Ok(())
5355
}
5456

57+
#[context("error trying to delete release {name}-{version} from database")]
5558
pub fn delete_version(ctx: &dyn Context, name: &str, version: &str) -> Result<()> {
5659
let conn = &mut ctx.pool()?.get()?;
5760
let storage = ctx.storage()?;

src/utils/consistency/mod.rs

+17-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{build_queue, db::delete, Context};
22
use anyhow::{Context as _, Result};
33
use itertools::Itertools;
4-
use tracing::info;
4+
use tracing::{info, warn};
55

66
mod data;
77
mod db;
@@ -92,33 +92,44 @@ where
9292
match difference {
9393
diff::Difference::CrateNotInIndex(name) => {
9494
if !dry_run {
95-
delete::delete_crate(&mut conn, &storage, &config, name)?;
95+
if let Err(err) = delete::delete_crate(&mut conn, &storage, &config, name) {
96+
warn!("{:?}", err);
97+
}
9698
}
9799
result.crates_deleted += 1;
98100
}
99101
diff::Difference::CrateNotInDb(name, versions) => {
100102
for version in versions {
101103
if !dry_run {
102-
build_queue.add_crate(name, version, BUILD_PRIORITY, None)?;
104+
if let Err(err) = build_queue.add_crate(name, version, BUILD_PRIORITY, None)
105+
{
106+
warn!("{:?}", err);
107+
}
103108
}
104109
result.builds_queued += 1;
105110
}
106111
}
107112
diff::Difference::ReleaseNotInIndex(name, version) => {
108113
if !dry_run {
109-
delete::delete_version(ctx, name, version)?;
114+
if let Err(err) = delete::delete_version(ctx, name, version) {
115+
warn!("{:?}", err);
116+
}
110117
}
111118
result.releases_deleted += 1;
112119
}
113120
diff::Difference::ReleaseNotInDb(name, version) => {
114121
if !dry_run {
115-
build_queue.add_crate(name, version, BUILD_PRIORITY, None)?;
122+
if let Err(err) = build_queue.add_crate(name, version, BUILD_PRIORITY, None) {
123+
warn!("{:?}", err);
124+
}
116125
}
117126
result.builds_queued += 1;
118127
}
119128
diff::Difference::ReleaseYank(name, version, yanked) => {
120129
if !dry_run {
121-
build_queue::set_yanked(&mut conn, name, version, *yanked);
130+
if let Err(err) = build_queue::set_yanked(&mut conn, name, version, *yanked) {
131+
warn!("{:?}", err);
132+
}
122133
}
123134
result.yanks_corrected += 1;
124135
}

0 commit comments

Comments
 (0)