]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: exclude logging of request payer for 403 requests 56868/head
authorSeena Fallah <seenafallah@gmail.com>
Fri, 12 Apr 2024 23:54:38 +0000 (01:54 +0200)
committerSeena Fallah <seenafallah@gmail.com>
Thu, 18 Apr 2024 17:22:19 +0000 (19:22 +0200)
As per AWS doc (https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html#ChargeDetails), request payer should not incur charges for 403 requests.

Fixes: https://tracker.ceph.com/issues/65473
Signed-off-by: Seena Fallah <seenafallah@gmail.com>
src/rgw/rgw_log.cc

index 5d7e3678f8fd3dc549169574cc963a37ad0d4442..6c2f54d291db88dc3707f99bc3647ae0c9f762e3 100644 (file)
@@ -200,21 +200,23 @@ static void log_usage(req_state *s, const string& op_name)
   if (!usage_logger)
     return;
 
-  std::string user;
+  std::string user = to_string(s->owner.id);
   std::string payer;
-  string bucket_name;
-
-  bucket_name = s->bucket_name;
+  string bucket_name = s->bucket_name;
 
   if (!bucket_name.empty()) {
-    bucket_name = s->bucket_name;
     user = to_string(s->bucket_owner.id);
+
+    // As per https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html#ChargeDetails
+    // If the bucket has requester pays enabled,
+    // and the requerster includes x-amz-request-payer in the header (this is checked by verify_requester_payer_permission and results in 403 if not present),
+    // and the status code isn't 403,
+    // then the requester is the payer.
     if (!rgw::sal::Bucket::empty(s->bucket.get()) &&
-       s->bucket->get_info().requester_pays) {
+        s->bucket->get_info().requester_pays &&
+        s->err.http_ret != 403) {
       payer = s->user->get_id().to_str();
     }
-  } else {
-    user = to_string(s->owner.id);
   }
 
   bool error = s->err.is_err();