From ce43a2189d9e3197f78d567615aaa7fc967024bf Mon Sep 17 00:00:00 2001 From: houseme Date: Sun, 28 Jun 2026 07:29:40 +0800 Subject: [PATCH] feat(get): SF06 - conditional lifecycle check Only call resolve_put_object_expiration when the object has an x-amz-expiration metadata marker. This avoids unnecessary lifecycle configuration reads on every GET request. Expected impact: 50-100us reduction per GET request. Closes rustfs/backlog#771 Co-Authored-By: heihutu --- rustfs/src/app/object_usecase.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rustfs/src/app/object_usecase.rs b/rustfs/src/app/object_usecase.rs index 24fe2bf3f..c2ceb15c3 100644 --- a/rustfs/src/app/object_usecase.rs +++ b/rustfs/src/app/object_usecase.rs @@ -3294,7 +3294,12 @@ impl DefaultObjectUsecase { }); // x-amz-expiration: predict from lifecycle configuration - let expiration = resolve_put_object_expiration(bucket, &info).await; + // Only resolve if the object has an expiration marker + let expiration = if info.user_defined.contains_key("x-amz-expiration") { + resolve_put_object_expiration(bucket, &info).await + } else { + None + }; let storage_class = response_storage_class(&info, &info.user_defined); let content_disposition = info.user_defined.get("content-disposition").cloned();