Skip to content

Commit 15e702d

Browse files
Nemo157Joshua Nelson
authored and
Joshua Nelson
committed
Move index API failure handling to docbuilder
1 parent 478d153 commit 15e702d

File tree

3 files changed

+36
-22
lines changed

3 files changed

+36
-22
lines changed

src/bin/cratesfyi.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ impl DatabaseSubcommand {
463463
db::update_crate_data_in_database(
464464
&*ctx.conn()?,
465465
&name,
466-
&index.api().get_crate_data(&name),
466+
&index.api().get_crate_data(&name)?,
467467
)?;
468468
}
469469

src/docbuilder/rustwide_builder.rs

+15-6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use crate::db::{
77
};
88
use crate::docbuilder::{crates::crates_from_path, Limits};
99
use crate::error::Result;
10+
use crate::index::api::ReleaseData;
1011
use crate::storage::CompressionAlgorithms;
1112
use crate::storage::Storage;
1213
use crate::utils::{copy_doc_dir, parse_rustc_version, CargoMetadata};
@@ -399,6 +400,15 @@ impl RustwideBuilder {
399400
} else {
400401
crate::web::metrics::NON_LIBRARY_BUILDS.inc();
401402
}
403+
404+
let release_data = match doc_builder.index.api().get_release_data(name, version) {
405+
Ok(data) => data,
406+
Err(err) => {
407+
warn!("{:#?}", err);
408+
ReleaseData::default()
409+
}
410+
};
411+
402412
let release_id = add_package_into_database(
403413
&conn,
404414
res.cargo_metadata.root(),
@@ -407,7 +417,7 @@ impl RustwideBuilder {
407417
&res.target,
408418
files_list,
409419
successful_targets,
410-
&doc_builder.index.api().get_release_data(name, version),
420+
&release_data,
411421
has_docs,
412422
has_examples,
413423
algs,
@@ -416,11 +426,10 @@ impl RustwideBuilder {
416426
add_build_into_database(&conn, release_id, &res.result)?;
417427

418428
// Some crates.io crate data is mutable, so we proactively update it during a release
419-
update_crate_data_in_database(
420-
&conn,
421-
name,
422-
&doc_builder.index.api().get_crate_data(name),
423-
)?;
429+
match doc_builder.index.api().get_crate_data(name) {
430+
Ok(crate_data) => update_crate_data_in_database(&conn, name, &crate_data)?,
431+
Err(err) => warn!("{:#?}", err),
432+
}
424433

425434
doc_builder.add_to_cache(name, version);
426435
Ok(res)

src/index/api.rs

+20-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use chrono::{DateTime, Utc};
2-
use failure::err_msg;
3-
use log::warn;
2+
use failure::{err_msg, ResultExt};
43
use reqwest::header::{HeaderValue, ACCEPT, USER_AGENT};
54
use semver::Version;
65
use serde::Deserialize;
@@ -32,6 +31,16 @@ pub(crate) struct ReleaseData {
3231
pub(crate) downloads: i32,
3332
}
3433

34+
impl Default for ReleaseData {
35+
fn default() -> ReleaseData {
36+
ReleaseData {
37+
release_time: Utc::now(),
38+
yanked: false,
39+
downloads: 0,
40+
}
41+
}
42+
}
43+
3544
#[derive(Debug)]
3645
pub struct CrateOwner {
3746
pub(crate) avatar: String,
@@ -62,28 +71,24 @@ impl Api {
6271
.ok_or_else(|| err_msg("index is missing an api base url"))
6372
}
6473

65-
pub fn get_crate_data(&self, name: &str) -> CrateData {
66-
let owners = self.get_owners(name).unwrap_or_else(|err| {
67-
warn!("Failed to get owners for {}: {}", name, err);
68-
Vec::new()
69-
});
74+
pub fn get_crate_data(&self, name: &str) -> Result<CrateData> {
75+
let owners = self
76+
.get_owners(name)
77+
.context(format!("Failed to get owners for {}", name))?;
7078

71-
CrateData { owners }
79+
Ok(CrateData { owners })
7280
}
7381

74-
pub(crate) fn get_release_data(&self, name: &str, version: &str) -> ReleaseData {
82+
pub(crate) fn get_release_data(&self, name: &str, version: &str) -> Result<ReleaseData> {
7583
let (release_time, yanked, downloads) = self
7684
.get_release_time_yanked_downloads(name, version)
77-
.unwrap_or_else(|err| {
78-
warn!("Failed to get crate data for {}-{}: {}", name, version, err);
79-
(Utc::now(), false, 0)
80-
});
85+
.context(format!("Failed to get crate data for {}-{}", name, version))?;
8186

82-
ReleaseData {
87+
Ok(ReleaseData {
8388
release_time,
8489
yanked,
8590
downloads,
86-
}
91+
})
8792
}
8893

8994
/// Get release_time, yanked and downloads from the registry's API

0 commit comments

Comments
 (0)