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();