Skip to content

Commit 09556fc

Browse files
Merge pull request #883 from rylev/fix-triage-500
Fix 500 on triage endpoint when end bound does not have data
2 parents 54e3858 + fb08393 commit 09556fc

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

site/src/comparison.rs

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,32 @@ pub async fn handle_triage(
3232
data,
3333
&master_commits,
3434
)
35-
.await?;
35+
.await?
36+
.unwrap();
3637
let mut after = Bound::Commit(comparison.next(&master_commits).unwrap()); // TODO: handle no next commit
3738

3839
let mut report = HashMap::new();
3940
let mut before = start.clone();
4041

4142
loop {
42-
let comparison = compare(
43+
let comparison = match compare(
4344
before,
4445
after.clone(),
4546
"instructions:u".to_owned(),
4647
data,
4748
&master_commits,
4849
)
49-
.await?;
50+
.await?
51+
{
52+
Some(c) => c,
53+
None => {
54+
log::info!(
55+
"No data found for end bound {:?}. Ending comparison...",
56+
after
57+
);
58+
break;
59+
}
60+
};
5061
log::info!(
5162
"Comparing {} to {}",
5263
comparison.b.commit,
@@ -77,8 +88,10 @@ pub async fn handle_compare(
7788
data: &InputData,
7889
) -> Result<api::days::Response, BoxedError> {
7990
let commits = collector::master_commits().await?;
80-
let comparison =
81-
crate::comparison::compare(body.start, body.end, body.stat, data, &commits).await?;
91+
let end = body.end;
92+
let comparison = crate::comparison::compare(body.start, end.clone(), body.stat, data, &commits)
93+
.await?
94+
.ok_or_else(|| format!("could not find end commit for bound {:?}", end))?;
8295

8396
let conn = data.conn().await;
8497
let prev = comparison.prev(&commits);
@@ -196,19 +209,22 @@ impl ComparisonSummary<'_> {
196209
}
197210

198211
/// Compare two bounds on a given stat
212+
///
213+
/// Returns Ok(None) when no data for the end bound is present
199214
pub async fn compare(
200215
start: Bound,
201216
end: Bound,
202217
stat: String,
203218
data: &InputData,
204219
master_commits: &[collector::MasterCommit],
205-
) -> Result<Comparison, BoxedError> {
220+
) -> Result<Option<Comparison>, BoxedError> {
206221
let a = data
207222
.data_for(true, start.clone())
208223
.ok_or(format!("could not find start commit for bound {:?}", start))?;
209-
let b = data
210-
.data_for(false, end.clone())
211-
.ok_or(format!("could not find end commit for bound {:?}", end))?;
224+
let b = match data.data_for(false, end.clone()) {
225+
Some(b) => b,
226+
None => return Ok(None),
227+
};
212228
let cids = Arc::new(vec![a.clone().into(), b.clone().into()]);
213229

214230
let query = selector::Query::new()
@@ -221,12 +237,12 @@ pub async fn compare(
221237

222238
let conn = data.conn().await;
223239

224-
Ok(Comparison {
240+
Ok(Some(Comparison {
225241
a: DateData::consume_one(&*conn, a.clone(), &mut responses, master_commits).await,
226242
a_id: a,
227243
b: DateData::consume_one(&*conn, b.clone(), &mut responses, master_commits).await,
228244
b_id: b,
229-
})
245+
}))
230246
}
231247

232248
/// Data associated with a specific date

0 commit comments

Comments
 (0)