From b19e8070a29d9ab886c88495657897fa06ff9007 Mon Sep 17 00:00:00 2001 From: 0xdx2 Date: Thu, 1 Jan 2026 17:38:37 +0800 Subject: [PATCH] fix(tagging): fix e2e test_object_tagging failure (#1327) --- .github/workflows/ci.yml | 2 +- crates/ecstore/src/client/api_remove.rs | 2 +- crates/filemeta/src/filemeta.rs | 22 ++++++++++++++++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae3a308c..72d79c57 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -160,7 +160,7 @@ jobs: with: tool: s3s-e2e git: https://github.com/Nugine/s3s.git - rev: b7714bfaa17ddfa9b23ea01774a1e7bbdbfc2ca3 + rev: 9e41304ed549b89cfb03ede98e9c0d2ac7522051 - name: Build debug binary run: | diff --git a/crates/ecstore/src/client/api_remove.rs b/crates/ecstore/src/client/api_remove.rs index beacd550..07bad116 100644 --- a/crates/ecstore/src/client/api_remove.rs +++ b/crates/ecstore/src/client/api_remove.rs @@ -41,7 +41,7 @@ use crate::{ use rustfs_utils::hash::EMPTY_STRING_SHA256_HASH; pub struct RemoveBucketOptions { - _forced_elete: bool, + _forced_delete: bool, } #[derive(Debug)] diff --git a/crates/filemeta/src/filemeta.rs b/crates/filemeta/src/filemeta.rs index ad3b0f9e..d878967c 100644 --- a/crates/filemeta/src/filemeta.rs +++ b/crates/filemeta/src/filemeta.rs @@ -473,12 +473,30 @@ impl FileMeta { match version.header.version_type { VersionType::Invalid | VersionType::Legacy => (), VersionType::Object => { - if version.header.version_id == fi.version_id { + // For non-versioned buckets, treat None as Uuid::nil() + let fi_vid = fi.version_id.or(Some(Uuid::nil())); + let ver_vid = version.header.version_id.or(Some(Uuid::nil())); + + if ver_vid == fi_vid { let mut ver = FileMetaVersion::try_from(version.meta.as_slice())?; if let Some(ref mut obj) = ver.object { for (k, v) in fi.metadata.iter() { - obj.meta_user.insert(k.clone(), v.clone()); + // Split metadata into meta_user and meta_sys based on prefix + // This logic must match From for MetaObject + if k.len() > RESERVED_METADATA_PREFIX.len() + && (k.starts_with(RESERVED_METADATA_PREFIX) || k.starts_with(RESERVED_METADATA_PREFIX_LOWER)) + { + // Skip internal flags that shouldn't be persisted + if k == headers::X_RUSTFS_HEALING || k == headers::X_RUSTFS_DATA_MOV { + continue; + } + // Insert into meta_sys + obj.meta_sys.insert(k.clone(), v.as_bytes().to_vec()); + } else { + // Insert into meta_user + obj.meta_user.insert(k.clone(), v.clone()); + } } if let Some(mod_time) = fi.mod_time {