refactor(app): reuse put object request context (#2456)

This commit is contained in:
安正超
2026-04-10 07:08:27 +08:00
committed by GitHub
parent 33b50a5366
commit 8acf2a51b9
+9 -17
View File
@@ -636,8 +636,6 @@ impl DefaultObjectUsecase {
} else { } else {
(EventName::ObjectCreatedPut, QuotaOperation::PutObject) (EventName::ObjectCreatedPut, QuotaOperation::PutObject)
}; };
let helper = OperationHelper::new(&req, event_name, S3Operation::PutObject);
if request_context.is_post_object && is_post_object_sse_kms_requested(&req.input, &request_context.headers) { if request_context.is_post_object && is_post_object_sse_kms_requested(&req.input, &request_context.headers) {
return Err(s3_error!(NotImplemented, "SSE-KMS is not supported for POST object uploads")); return Err(s3_error!(NotImplemented, "SSE-KMS is not supported for POST object uploads"));
} }
@@ -647,9 +645,11 @@ impl DefaultObjectUsecase {
return Err(s3_error!(InvalidStorageClass)); return Err(s3_error!(InvalidStorageClass));
} }
if is_put_object_extract_requested(&request_context.headers) { if is_put_object_extract_requested(&request_context.headers) {
return self.execute_put_object_extract(req).await; return self.execute_put_object_extract(req, request_context).await;
} }
let helper = OperationHelper::new(&req, event_name, S3Operation::PutObject);
let resolved_size = resolve_put_body_size(req.input.content_length, &request_context.headers)?; let resolved_size = resolve_put_body_size(req.input.content_length, &request_context.headers)?;
self.check_bucket_quota(&req.input.bucket, quota_operation, resolved_size as u64) self.check_bucket_quota(&req.input.bucket, quota_operation, resolved_size as u64)
.await?; .await?;
@@ -3075,20 +3075,12 @@ impl DefaultObjectUsecase {
))) )))
} }
#[instrument(level = "debug", skip(self, req))] #[instrument(level = "debug", skip(self, req, request_context))]
pub async fn execute_put_object_extract(&self, req: S3Request<PutObjectInput>) -> S3Result<S3Response<PutObjectOutput>> { async fn execute_put_object_extract(
let request_context = PutObjectRequestContext { &self,
headers: req.headers.clone(), req: S3Request<PutObjectInput>,
trailing_headers: req.trailing_headers.clone(), request_context: PutObjectRequestContext,
uri_query: req.uri.query().map(str::to_string), ) -> S3Result<S3Response<PutObjectOutput>> {
is_post_object: req.extensions.get::<PostObjectRequestMarker>().is_some(),
method: req.method.clone(),
uri: req.uri.clone(),
extensions: req.extensions.clone(),
credentials: req.credentials.clone(),
region: req.region.clone(),
service: req.service.clone(),
};
let helper = OperationHelper::new(&req, EventName::ObjectCreatedPut, S3Operation::PutObject).suppress_event(); let helper = OperationHelper::new(&req, EventName::ObjectCreatedPut, S3Operation::PutObject).suppress_event();
if is_sse_kms_requested(&req.input, &request_context.headers) { if is_sse_kms_requested(&req.input, &request_context.headers) {
return Err(s3_error!(NotImplemented, "SSE-KMS is not supported for extract uploads")); return Err(s3_error!(NotImplemented, "SSE-KMS is not supported for extract uploads"));