Skip to content

Commit 202bcaa

Browse files
authored
Merge pull request #2294 from Kobzol/job-queue-empty-db
Remove cutoff dates for inserting benchmark requests
2 parents bfbfe92 + 0d12f89 commit 202bcaa

File tree

2 files changed

+61
-43
lines changed

2 files changed

+61
-43
lines changed

site/src/comparison.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,7 +1136,7 @@ impl HistoricalData {
11361136
fn quartiles(&self) -> (f64, f64) {
11371137
let pcs = self.percent_changes();
11381138
fn median(data: &[f64]) -> f64 {
1139-
if data.len() % 2 == 0 {
1139+
if data.len().is_multiple_of(2) {
11401140
(data[(data.len() - 1) / 2] + data[data.len() / 2]) / 2.0
11411141
} else {
11421142
data[data.len() / 2]
@@ -1146,7 +1146,7 @@ impl HistoricalData {
11461146
let len = pcs.len();
11471147
let (h1_end, h2_begin) = if len <= 2 {
11481148
(0, std::cmp::min(len, 1))
1149-
} else if len % 2 == 0 {
1149+
} else if len.is_multiple_of(2) {
11501150
(len / 2 - 2, len / 2 + 1)
11511151
} else {
11521152
(len / 2 - 1, len / 2 + 1)

site/src/job_queue/mod.rs

Lines changed: 59 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use database::{
1111
Target,
1212
};
1313
use parking_lot::RwLock;
14-
use std::{str::FromStr, sync::Arc};
14+
use std::sync::Arc;
1515
use tokio::time::{self, Duration, MissedTickBehavior};
1616

1717
pub fn is_job_queue_enabled() -> bool {
@@ -21,6 +21,14 @@ pub fn is_job_queue_enabled() -> bool {
2121
.unwrap_or(true)
2222
}
2323

24+
/// Should master and release artifacts be automatically inserted into the job queue?
25+
pub fn is_job_queue_insertion_enabled() -> bool {
26+
std::env::var("INSERT_REQUESTS_INTO_JOB_QUEUE")
27+
.ok()
28+
.and_then(|x| x.parse().ok())
29+
.unwrap_or(false)
30+
}
31+
2432
/// rust-lang/rust PR that will be used for testing the job queue.
2533
const TEST_PR_FOR_JOB_QUEUE: u32 = 147039;
2634

@@ -33,7 +41,7 @@ pub fn should_use_job_queue(pr: u32) -> bool {
3341
/// Returns `true` if at least one benchmark request was inserted.
3442
async fn create_benchmark_request_master_commits(
3543
ctxt: &SiteCtxt,
36-
_conn: &dyn database::pool::Connection,
44+
conn: &dyn database::pool::Connection,
3745
index: &BenchmarkRequestIndex,
3846
) -> anyhow::Result<bool> {
3947
let now = Utc::now();
@@ -45,29 +53,23 @@ async fn create_benchmark_request_master_commits(
4553
.iter()
4654
.filter(|c| now.signed_duration_since(c.time) < chrono::Duration::days(29));
4755

48-
// TODO; delete at some point in the future
49-
let cutoff: chrono::DateTime<Utc> = chrono::DateTime::from_str("2025-08-27T00:00:00.000Z")?;
50-
51-
let inserted = false;
56+
let mut inserted = false;
5257
for master_commit in master_commits {
53-
// We don't want to add masses of obsolete data
54-
if master_commit.time >= cutoff && !index.contains_tag(&master_commit.sha) {
55-
// let pr = master_commit.pr.unwrap_or(0);
56-
// let benchmark = BenchmarkRequest::create_master(
57-
// &master_commit.sha,
58-
// &master_commit.parent_sha,
59-
// pr,
60-
// master_commit.time,
61-
// );
62-
// log::info!("Inserting master benchmark request {benchmark:?}");
63-
64-
// Do not create benchmark requests on production, to allow running in parallel with
65-
// the old system.
66-
// if let Err(error) = conn.insert_benchmark_request(&benchmark).await {
67-
// log::error!("Failed to insert master benchmark request: {error:?}");
68-
// } else {
69-
// inserted = true;
70-
// }
58+
if !index.contains_tag(&master_commit.sha) {
59+
let pr = master_commit.pr.unwrap_or(0);
60+
let benchmark = BenchmarkRequest::create_master(
61+
&master_commit.sha,
62+
&master_commit.parent_sha,
63+
pr,
64+
master_commit.time,
65+
);
66+
log::info!("Inserting master benchmark request {benchmark:?}");
67+
68+
if let Err(error) = conn.insert_benchmark_request(&benchmark).await {
69+
log::error!("Failed to insert master benchmark request: {error:?}");
70+
} else {
71+
inserted = true;
72+
}
7173
}
7274
}
7375
Ok(inserted)
@@ -77,35 +79,31 @@ async fn create_benchmark_request_master_commits(
7779
/// already in the database
7880
/// Returns `true` if at least one benchmark request was inserted.
7981
async fn create_benchmark_request_releases(
80-
_conn: &dyn database::pool::Connection,
82+
conn: &dyn database::pool::Connection,
8183
index: &BenchmarkRequestIndex,
8284
) -> anyhow::Result<bool> {
8385
let releases: String = reqwest::get("https://static.rust-lang.org/manifests.txt")
8486
.await?
8587
.text()
8688
.await?;
87-
// TODO; delete at some point in the future
88-
let cutoff: chrono::DateTime<Utc> = chrono::DateTime::from_str("2025-08-27T00:00:00.000Z")?;
8989

9090
let releases = releases
9191
.lines()
9292
.rev()
9393
.filter_map(parse_release_string)
9494
.take(20);
9595

96-
let inserted = false;
96+
let mut inserted = false;
9797
for (name, commit_date) in releases {
98-
if commit_date >= cutoff && !index.contains_tag(&name) {
99-
// let release_request = BenchmarkRequest::create_release(&name, commit_date);
100-
// log::info!("Inserting release benchmark request {release_request:?}");
101-
102-
// Do not create benchmark requests on production, to allow running in parallel with
103-
// the old system.
104-
// if let Err(error) = conn.insert_benchmark_request(&release_request).await {
105-
// log::error!("Failed to insert release benchmark request: {error}");
106-
// } else {
107-
// inserted = true;
108-
// }
98+
if !index.contains_tag(&name) {
99+
let release_request = BenchmarkRequest::create_release(&name, commit_date);
100+
log::info!("Inserting release benchmark request {release_request:?}");
101+
102+
if let Err(error) = conn.insert_benchmark_request(&release_request).await {
103+
log::error!("Failed to insert release benchmark request: {error}");
104+
} else {
105+
inserted = true;
106+
}
109107
}
110108
}
111109
Ok(inserted)
@@ -388,11 +386,31 @@ async fn perform_queue_tick(ctxt: &SiteCtxt) -> anyhow::Result<()> {
388386

389387
let index = ctxt.known_benchmark_requests.load();
390388

389+
let insertion_enabled = is_job_queue_insertion_enabled();
390+
391391
let mut requests_inserted = false;
392392
// Put the master commits into the `benchmark_requests` queue
393-
requests_inserted |= create_benchmark_request_master_commits(ctxt, &*conn, &index).await?;
393+
if insertion_enabled {
394+
match create_benchmark_request_master_commits(ctxt, &*conn, &index).await {
395+
Ok(inserted) => requests_inserted |= inserted,
396+
Err(error) => {
397+
log::error!(
398+
"Could not insert master benchmark requests into the database: {error:?}"
399+
);
400+
}
401+
}
402+
}
394403
// Put the releases into the `benchmark_requests` queue
395-
requests_inserted |= create_benchmark_request_releases(&*conn, &index).await?;
404+
if insertion_enabled {
405+
match create_benchmark_request_releases(&*conn, &index).await {
406+
Ok(inserted) => requests_inserted |= inserted,
407+
Err(error) => {
408+
log::error!(
409+
"Could not insert release benchmark requests into the database: {error:?}"
410+
);
411+
}
412+
}
413+
}
396414
// Enqueue waiting requests and try to complete in-progress ones
397415
let completed_reqs = process_benchmark_requests(&mut *conn).await?;
398416

0 commit comments

Comments
 (0)