diff --git a/ecstore/src/sets.rs b/ecstore/src/sets.rs index 203e3a3ad..b65ddb213 100644 --- a/ecstore/src/sets.rs +++ b/ecstore/src/sets.rs @@ -448,6 +448,10 @@ impl StorageAPI for Sets { self.get_disks_by_key(object).get_object_info(bucket, object, opts).await } + async fn put_object_metadata(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result { + self.get_disks_by_key(object).put_object_metadata(bucket, object, opts).await + } + async fn get_object_tags(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result { self.get_disks_by_key(object).get_object_tags(bucket, object, opts).await } diff --git a/ecstore/src/store.rs b/ecstore/src/store.rs index a6d90f72b..c2ca44fc7 100644 --- a/ecstore/src/store.rs +++ b/ecstore/src/store.rs @@ -1381,6 +1381,21 @@ impl StorageAPI for ECStore { Ok(oi.user_tags) } + + async fn put_object_metadata(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result { + let object = encode_dir_object(object); + if self.single_pool() { + return self.pools[0].put_object_metadata(bucket, object.as_str(), opts).await; + } + + let mut opts = opts.clone(); + opts.metadata_chg = true; + + let idx = self.get_pool_idx_existing_with_opts(bucket, object.as_str(), &opts).await?; + + self.pools[idx].put_object_metadata(bucket, object.as_str(), &opts).await + } + #[tracing::instrument(level = "debug", skip(self))] async fn put_object_tags(&self, bucket: &str, object: &str, tags: &str, opts: &ObjectOptions) -> Result { let object = encode_dir_object(object); diff --git a/ecstore/src/store_api.rs b/ecstore/src/store_api.rs index 483ce7170..3402ab7c5 100644 --- a/ecstore/src/store_api.rs +++ b/ecstore/src/store_api.rs @@ -977,6 +977,7 @@ pub trait StorageAPI: ObjectIO { // CheckAbandonedParts // Health // PutObjectMetadata + async fn put_object_metadata(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result; // DecomTieredObject async fn get_object_tags(&self, bucket: &str, object: &str, opts: &ObjectOptions) -> Result; async fn put_object_tags(&self, bucket: &str, object: &str, tags: &str, opts: &ObjectOptions) -> Result;