From c6715259b1df3d2d6ab00b346d3b3f34a4feef5a Mon Sep 17 00:00:00 2001 From: weisd Date: Thu, 19 Mar 2026 01:02:34 +0800 Subject: [PATCH] fix(ecstore): keep bucket created time when metadata is epoch (#2220) Co-authored-by: momoda693 Co-authored-by: houseme --- crates/ecstore/src/store/bucket.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/crates/ecstore/src/store/bucket.rs b/crates/ecstore/src/store/bucket.rs index f40dbfc7f..ff1fec359 100644 --- a/crates/ecstore/src/store/bucket.rs +++ b/crates/ecstore/src/store/bucket.rs @@ -14,6 +14,10 @@ use super::*; +fn should_override_created_from_metadata(created: OffsetDateTime) -> bool { + created != OffsetDateTime::UNIX_EPOCH +} + impl ECStore { #[instrument(skip(self))] pub(super) async fn handle_make_bucket(&self, bucket: &str, opts: &MakeBucketOptions) -> Result<()> { @@ -68,7 +72,9 @@ impl ECStore { let mut info = self.peer_sys.get_bucket_info(bucket, opts).await?; if let Ok(sys) = metadata_sys::get(bucket).await { - info.created = Some(sys.created); + if should_override_created_from_metadata(sys.created) { + info.created = Some(sys.created); + } info.versioning = sys.versioning(); info.object_locking = sys.object_locking(); } @@ -84,7 +90,9 @@ impl ECStore { if !opts.no_metadata { for bucket in buckets.iter_mut() { - if let Ok(created) = metadata_sys::created_at(&bucket.name).await { + if let Ok(created) = metadata_sys::created_at(&bucket.name).await + && should_override_created_from_metadata(created) + { bucket.created = Some(created); } } @@ -148,3 +156,20 @@ impl ECStore { Ok(()) } } + +#[cfg(test)] +mod tests { + use super::should_override_created_from_metadata; + use time::OffsetDateTime; + + #[test] + fn should_not_override_when_metadata_created_is_unix_epoch() { + assert!(!should_override_created_from_metadata(OffsetDateTime::UNIX_EPOCH)); + } + + #[test] + fn should_override_when_metadata_created_is_valid_time() { + let created = OffsetDateTime::from_unix_timestamp(1704067200).expect("valid timestamp"); + assert!(should_override_created_from_metadata(created)); + } +}