summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2026-02-08 18:42:26 +0100
committerJesper Jensen <jesper@jnsn.dev>2026-02-08 18:42:26 +0100
commit692fbe3b19f6bac8a8e52d60c5ee9f43ad17dbcf (patch)
tree6d92cdc8d6c65ab709c63ac145029685fe37b7cb /src
parentb12254e3bc034faed6c917d12cd33399022ed10c (diff)
Separate the cache refresh from apply
Woops, I didn't want to let that stay
Diffstat (limited to 'src')
-rw-r--r--src/updater.rs16
1 files changed, 6 insertions, 10 deletions
diff --git a/src/updater.rs b/src/updater.rs
index a828e57..38c666c 100644
--- a/src/updater.rs
+++ b/src/updater.rs
@@ -53,9 +53,7 @@ pub fn update_images(now: &DateTime<Utc>, db: &dyn Db, reg: &dyn Registries, fil
}
}
- // Cache refresh loop: refresh all expired images in the database
- let mut image_errors: std::collections::HashMap<i64, String> = std::collections::HashMap::new();
- let mut refreshed_images: std::collections::HashSet<i64> = std::collections::HashSet::new();
+ // Refresh all expired images in the database
for expired in db.get_expired_images(now) {
let cache_max_age = reg.get_cache_ttl(&expired.registry);
let cached_tags = db.get_tags_sorted(expired.id);
@@ -80,12 +78,10 @@ pub fn update_images(now: &DateTime<Utc>, db: &dyn Db, reg: &dyn Registries, fil
}
let new_expires_at = *now + cache_max_age;
db.set_expires_at(expired.id, &new_expires_at);
- refreshed_images.insert(expired.id);
}
None => {
let new_expires_at = *now + cache_max_age;
db.set_expires_at(expired.id, &new_expires_at);
- image_errors.insert(expired.id, format!("image not found: {}", expired.image));
}
}
}
@@ -116,14 +112,15 @@ pub fn update_images(now: &DateTime<Utc>, db: &dyn Db, reg: &dyn Registries, fil
println!("Checking image {}", &file.content[image_ranges[i].clone()]);
metrics::get().images_checked.with_label_values(&[registry]).inc();
- if let Some(err) = image_errors.get(&image_id) {
- file_errors[file_idx] = Some(err.clone());
+ let tags = db.get_tags_sorted(image_id);
+
+ if image_record.expires_at <= *now && tags.is_empty() {
+ file_errors[file_idx] = Some(format!("{}/{} was not refreshed", image_record.registry, image_record.image));
continue;
}
- let tags = db.get_tags_sorted(image_id);
let tag_for_digest = tag.as_deref().unwrap_or("latest");
- let cached_digest = if refreshed_images.contains(&image_id) {
+ let cached_digest = if image_record.expires_at <= *now {
None // Cache was stale, ignore cached digest
} else {
db.get_tag_digest(image_id, tag_for_digest)
@@ -475,7 +472,6 @@ mod tests {
update_images(&now, &db, &reg, &files, &mut outcomes);
assert!(outcomes[0].is_err());
- assert!(outcomes[0].as_ref().unwrap_err().contains("image not found"));
let got = db.get_image("registry.hub.docker.com", "nginx").unwrap();
assert!(got.expires_at > now);
}