diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/updater.rs | 16 |
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, ®, &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); } |
