You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by ad...@apache.org on 2022/04/25 10:31:57 UTC

[ozone] branch master updated: HDDS-6620. Gather AuditLog params for S3g (#3325)

This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new b78adc4c71 HDDS-6620. Gather AuditLog params for S3g (#3325)
b78adc4c71 is described below

commit b78adc4c71c8dd3cddefd26f75e8af78f148b820
Author: Symious <yi...@foxmail.com>
AuthorDate: Mon Apr 25 18:31:52 2022 +0800

    HDDS-6620. Gather AuditLog params for S3g (#3325)
---
 .../hadoop/ozone/s3/endpoint/BucketEndpoint.java   | 70 +++++++--------------
 .../hadoop/ozone/s3/endpoint/EndpointBase.java     | 18 ++++++
 .../hadoop/ozone/s3/endpoint/ObjectEndpoint.java   | 73 ++++++----------------
 .../org/apache/hadoop/ozone/s3/util/S3Utils.java   | 19 ------
 .../hadoop/ozone/s3/TestS3GatewayAuditLog.java     | 25 ++++++--
 5 files changed, 82 insertions(+), 123 deletions(-)

diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
index d71a99bde5..2c0cd059cf 100644
--- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
+++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/BucketEndpoint.java
@@ -38,7 +38,6 @@ import org.apache.hadoop.ozone.s3.exception.OS3Exception;
 import org.apache.hadoop.ozone.s3.exception.S3ErrorTable;
 import org.apache.hadoop.ozone.s3.util.ContinueToken;
 import org.apache.hadoop.ozone.s3.util.S3StorageType;
-import org.apache.hadoop.ozone.s3.util.S3Utils;
 import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
 import org.apache.http.HttpStatus;
 import org.slf4j.Logger;
@@ -65,7 +64,6 @@ import java.util.BitSet;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 import static org.apache.hadoop.ozone.OzoneAcl.AclScope.ACCESS;
@@ -104,16 +102,6 @@ public class BucketEndpoint extends EndpointBase {
       @QueryParam("acl") String aclMarker,
       @Context HttpHeaders hh) throws OS3Exception, IOException {
     S3GAction s3GAction = S3GAction.GET_BUCKET;
-    Map<String, String> auditParams = S3Utils.genAuditParam(
-        "bucket", bucketName,
-        "delimiter", delimiter,
-        "encoding-type", encodingType,
-        "marker", marker,
-        "max-keys", String.valueOf(maxKeys),
-        "prefix", prefix,
-        "continuation-token", continueToken,
-        "start-after", startAfter
-    );
     Iterator<? extends OzoneKey> ozoneKeyIterator;
     ContinueToken decodedToken =
         ContinueToken.decodeFromString(continueToken);
@@ -124,7 +112,7 @@ public class BucketEndpoint extends EndpointBase {
         S3BucketAcl result = getAcl(bucketName);
         getMetrics().incGetAclSuccess();
         AUDIT.logReadSuccess(
-            buildAuditMessageForSuccess(s3GAction, auditParams));
+            buildAuditMessageForSuccess(s3GAction, getAuditParameters()));
         return Response.ok(result, MediaType.APPLICATION_XML_TYPE).build();
       }
 
@@ -156,7 +144,7 @@ public class BucketEndpoint extends EndpointBase {
       }
     } catch (OMException ex) {
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       getMetrics().incGetBucketFailure();
       if (ex.getResult() == ResultCodes.PERMISSION_DENIED) {
         throw newError(S3ErrorTable.ACCESS_DENIED, bucketName, ex);
@@ -166,7 +154,7 @@ public class BucketEndpoint extends EndpointBase {
     } catch (Exception ex) {
       getMetrics().incGetBucketFailure();
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
 
@@ -238,7 +226,8 @@ public class BucketEndpoint extends EndpointBase {
       response.setTruncated(false);
     }
 
-    AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction, auditParams));
+    AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction,
+        getAuditParameters()));
     getMetrics().incGetBucketSuccess();
     response.setKeyCount(
         response.getCommonPrefixes().size() + response.getContents().size());
@@ -251,10 +240,6 @@ public class BucketEndpoint extends EndpointBase {
                       @Context HttpHeaders httpHeaders,
                       InputStream body) throws IOException, OS3Exception {
     S3GAction s3GAction = S3GAction.CREATE_BUCKET;
-    Map<String, String> auditParams = S3Utils.genAuditParam(
-        "bucket", bucketName,
-        "acl", aclMarker
-    );
 
     try {
       if (aclMarker != null) {
@@ -264,13 +249,14 @@ public class BucketEndpoint extends EndpointBase {
       String location = createS3Bucket(bucketName);
       LOG.info("Location is {}", location);
       AUDIT.logWriteSuccess(
-          buildAuditMessageForSuccess(s3GAction, auditParams));
+          buildAuditMessageForSuccess(s3GAction, getAuditParameters()));
       getMetrics().incCreateBucketSuccess();
       return Response.status(HttpStatus.SC_OK).header("Location", location)
           .build();
     } catch (OMException exception) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, exception));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(),
+              exception));
       getMetrics().incCreateBucketFailure();
       if (exception.getResult() == ResultCodes.INVALID_BUCKET_NAME) {
         throw newError(S3ErrorTable.INVALID_BUCKET_NAME, bucketName, exception);
@@ -280,7 +266,7 @@ public class BucketEndpoint extends EndpointBase {
       throw exception;
     } catch (Exception ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
   }
@@ -290,10 +276,6 @@ public class BucketEndpoint extends EndpointBase {
       @QueryParam("prefix") String prefix)
       throws OS3Exception, IOException {
     S3GAction s3GAction = S3GAction.LIST_MULTIPART_UPLOAD;
-    Map<String, String> auditParams = S3Utils.genAuditParam(
-        "bucket", bucketName,
-        "prefix", prefix
-    );
 
     OzoneBucket bucket = getBucket(bucketName);
 
@@ -311,12 +293,14 @@ public class BucketEndpoint extends EndpointBase {
               upload.getCreationTime(),
               S3StorageType.fromReplicationConfig(upload.getReplicationConfig())
           )));
-      AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction, auditParams));
+      AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction,
+          getAuditParameters()));
       getMetrics().incListMultipartUploadsSuccess();
       return Response.ok(result).build();
     } catch (OMException exception) {
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, exception));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(),
+              exception));
       getMetrics().incListMultipartUploadsFailure();
       if (exception.getResult() == ResultCodes.PERMISSION_DENIED) {
         throw newError(S3ErrorTable.ACCESS_DENIED, prefix, exception);
@@ -324,7 +308,7 @@ public class BucketEndpoint extends EndpointBase {
       throw exception;
     } catch (Exception ex) {
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
   }
@@ -339,17 +323,15 @@ public class BucketEndpoint extends EndpointBase {
   public Response head(@PathParam("bucket") String bucketName)
       throws OS3Exception, IOException {
     S3GAction s3GAction = S3GAction.HEAD_BUCKET;
-    Map<String, String> auditParams = S3Utils.genAuditParam(
-        "bucket", bucketName);
     try {
       getBucket(bucketName);
       AUDIT.logReadSuccess(
-          buildAuditMessageForSuccess(s3GAction, auditParams));
+          buildAuditMessageForSuccess(s3GAction, getAuditParameters()));
       getMetrics().incHeadBucketSuccess();
       return Response.ok().build();
     } catch (Exception e) {
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, e));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), e));
       throw e;
     }
   }
@@ -364,15 +346,12 @@ public class BucketEndpoint extends EndpointBase {
   public Response delete(@PathParam("bucket") String bucketName)
       throws IOException, OS3Exception {
     S3GAction s3GAction = S3GAction.DELETE_BUCKET;
-    Map<String, String> auditParams = S3Utils.genAuditParam(
-        "bucket", bucketName
-    );
 
     try {
       deleteS3Bucket(bucketName);
     } catch (OMException ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       getMetrics().incDeleteBucketFailure();
       if (ex.getResult() == ResultCodes.BUCKET_NOT_EMPTY) {
         throw newError(S3ErrorTable.BUCKET_NOT_EMPTY, bucketName, ex);
@@ -385,11 +364,12 @@ public class BucketEndpoint extends EndpointBase {
       }
     } catch (Exception ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
 
-    AUDIT.logWriteSuccess(buildAuditMessageForSuccess(s3GAction, auditParams));
+    AUDIT.logWriteSuccess(buildAuditMessageForSuccess(s3GAction,
+        getAuditParameters()));
     getMetrics().incDeleteBucketSuccess();
     return Response
         .status(HttpStatus.SC_NO_CONTENT)
@@ -410,10 +390,6 @@ public class BucketEndpoint extends EndpointBase {
                                          MultiDeleteRequest request)
       throws OS3Exception, IOException {
     S3GAction s3GAction = S3GAction.MULTI_DELETE;
-    Map<String, String> auditParams = S3Utils.genAuditParam(
-        "bucket", bucketName,
-        "delete", delete
-    );
 
     OzoneBucket bucket = getBucket(bucketName);
     MultiDeleteResponse result = new MultiDeleteResponse();
@@ -445,11 +421,11 @@ public class BucketEndpoint extends EndpointBase {
       }
     }
     if (result.getErrors().size() != 0) {
-      AUDIT.logWriteFailure(buildAuditMessageForFailure(s3GAction, auditParams,
-          new Exception("MultiDelete Exception")));
+      AUDIT.logWriteFailure(buildAuditMessageForFailure(s3GAction,
+          getAuditParameters(), new Exception("MultiDelete Exception")));
     } else {
       AUDIT.logWriteSuccess(
-          buildAuditMessageForSuccess(s3GAction, auditParams));
+          buildAuditMessageForSuccess(s3GAction, getAuditParameters()));
     }
     return result;
   }
diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java
index b6a928f289..9a0efc7d15 100644
--- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java
+++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/EndpointBase.java
@@ -23,7 +23,9 @@ import javax.ws.rs.container.ContainerRequestContext;
 import javax.ws.rs.core.Context;
 import java.io.IOException;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
 
@@ -259,4 +261,20 @@ public abstract class EndpointBase implements Auditor {
   public String getClientIpAddress() {
     return context.getHeaderString(CLIENT_IP_HEADER);
   }
+
+  protected Map<String, String> getAuditParameters() {
+    Map<String, String> res = new HashMap<>();
+    if (context != null) {
+      for (Map.Entry<String, List<String>> entry :
+          context.getUriInfo().getPathParameters().entrySet()) {
+        res.put(entry.getKey(), entry.getValue().toString());
+
+      }
+      for (Map.Entry<String, List<String>> entry :
+          context.getUriInfo().getQueryParameters().entrySet()) {
+        res.put(entry.getKey(), entry.getValue().toString());
+      }
+    }
+    return res;
+  }
 }
diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
index 8824e98fdd..6f4aff7d8b 100644
--- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
+++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/endpoint/ObjectEndpoint.java
@@ -111,7 +111,6 @@ import static org.apache.hadoop.ozone.s3.util.S3Consts.COPY_SOURCE_IF_UNMODIFIED
 import static org.apache.hadoop.ozone.s3.util.S3Consts.RANGE_HEADER;
 import static org.apache.hadoop.ozone.s3.util.S3Consts.RANGE_HEADER_SUPPORTED_UNIT;
 import static org.apache.hadoop.ozone.s3.util.S3Consts.STORAGE_CLASS_HEADER;
-import static org.apache.hadoop.ozone.s3.util.S3Utils.genAuditParam;
 import static org.apache.hadoop.ozone.s3.util.S3Utils.urlDecode;
 
 import org.apache.http.HttpStatus;
@@ -170,15 +169,6 @@ public class ObjectEndpoint extends EndpointBase {
 
     S3GAction s3GAction = S3GAction.CREATE_KEY;
     boolean auditSuccess = true;
-    Map<String, String> auditParams = genAuditParam(
-        "bucket", bucketName,
-        "path", keyPath,
-        "Content-Length", String.valueOf(length),
-        "partNumber", String.valueOf(partNumber)
-    );
-    if (partNumber != 0) {
-      auditParams.put("uploadId", uploadID);
-    }
 
     OzoneOutputStream output = null;
 
@@ -225,7 +215,7 @@ public class ObjectEndpoint extends EndpointBase {
     } catch (OMException ex) {
       auditSuccess = false;
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       if (copyHeader != null) {
         getMetrics().incCopyObjectFailure();
       } else {
@@ -247,12 +237,12 @@ public class ObjectEndpoint extends EndpointBase {
     } catch (Exception ex) {
       auditSuccess = false;
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     } finally {
       if (auditSuccess) {
         AUDIT.logWriteSuccess(
-            buildAuditMessageForSuccess(s3GAction, auditParams));
+            buildAuditMessageForSuccess(s3GAction, getAuditParameters()));
       }
       if (output != null) {
         output.close();
@@ -280,13 +270,6 @@ public class ObjectEndpoint extends EndpointBase {
 
     S3GAction s3GAction = S3GAction.GET_KEY;
     boolean auditSuccess = true;
-    Map<String, String> auditParams = genAuditParam(
-        "bucket", bucketName,
-        "path", keyPath,
-        "uploadId", uploadId,
-        "max-parts", String.valueOf(maxParts),
-        "part-number-marker", partNumberMarker
-    );
 
     try {
       if (uploadId != null) {
@@ -368,7 +351,7 @@ public class ObjectEndpoint extends EndpointBase {
     } catch (OMException ex) {
       auditSuccess = false;
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex)
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex)
       );
       if (uploadId != null) {
         getMetrics().incListPartsFailure();
@@ -385,13 +368,13 @@ public class ObjectEndpoint extends EndpointBase {
     } catch (Exception ex) {
       auditSuccess = false;
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex)
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex)
       );
       throw ex;
     } finally {
       if (auditSuccess) {
         AUDIT.logReadSuccess(
-            buildAuditMessageForSuccess(s3GAction, auditParams)
+            buildAuditMessageForSuccess(s3GAction, getAuditParameters())
         );
       }
     }
@@ -420,10 +403,6 @@ public class ObjectEndpoint extends EndpointBase {
       @PathParam("path") String keyPath) throws IOException, OS3Exception {
 
     S3GAction s3GAction = S3GAction.HEAD_KEY;
-    Map<String, String> auditParams = genAuditParam(
-        "bucket", bucketName,
-        "keyPath", keyPath
-    );
 
     OzoneKey key;
     try {
@@ -431,7 +410,7 @@ public class ObjectEndpoint extends EndpointBase {
       // TODO: return the specified range bytes of this object.
     } catch (OMException ex) {
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       getMetrics().incHeadKeyFailure();
       if (ex.getResult() == ResultCodes.KEY_NOT_FOUND) {
         // Just return 404 with no content
@@ -443,7 +422,7 @@ public class ObjectEndpoint extends EndpointBase {
       }
     } catch (Exception ex) {
       AUDIT.logReadFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
 
@@ -453,7 +432,8 @@ public class ObjectEndpoint extends EndpointBase {
         .header("Content-Type", "binary/octet-stream");
     addLastModifiedDate(response, key);
     getMetrics().incHeadKeySuccess();
-    AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction, auditParams));
+    AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction,
+        getAuditParameters()));
     return response.build();
   }
 
@@ -501,11 +481,6 @@ public class ObjectEndpoint extends EndpointBase {
       IOException, OS3Exception {
 
     S3GAction s3GAction = S3GAction.DELETE_KEY;
-    Map<String, String> auditParams = genAuditParam(
-        "bucket", bucketName,
-        "path", keyPath,
-        "uploadId", uploadId
-    );
 
     try {
       if (uploadId != null && !uploadId.equals("")) {
@@ -517,7 +492,7 @@ public class ObjectEndpoint extends EndpointBase {
       bucket.deleteKey(keyPath);
     } catch (OMException ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       if (uploadId != null && !uploadId.equals("")) {
         getMetrics().incAbortMultiPartUploadFailure();
       } else {
@@ -540,11 +515,12 @@ public class ObjectEndpoint extends EndpointBase {
       }
     } catch (Exception ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
     getMetrics().incDeleteKeySuccess();
-    AUDIT.logWriteSuccess(buildAuditMessageForSuccess(s3GAction, auditParams));
+    AUDIT.logWriteSuccess(buildAuditMessageForSuccess(s3GAction,
+        getAuditParameters()));
     return Response
         .status(Status.NO_CONTENT)
         .build();
@@ -564,10 +540,6 @@ public class ObjectEndpoint extends EndpointBase {
   )
       throws IOException, OS3Exception {
     S3GAction s3GAction = S3GAction.INIT_MULTIPART_UPLOAD;
-    Map<String, String> auditParams = genAuditParam(
-        "bucket", bucket,
-        "path", key
-    );
 
     try {
       OzoneBucket ozoneBucket = getBucket(bucket);
@@ -587,13 +559,13 @@ public class ObjectEndpoint extends EndpointBase {
       multipartUploadInitiateResponse.setUploadID(multipartInfo.getUploadID());
 
       AUDIT.logWriteSuccess(
-          buildAuditMessageForSuccess(s3GAction, auditParams));
+          buildAuditMessageForSuccess(s3GAction, getAuditParameters()));
       getMetrics().incInitMultiPartUploadSuccess();
       return Response.status(Status.OK).entity(
           multipartUploadInitiateResponse).build();
     } catch (OMException ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       getMetrics().incInitMultiPartUploadFailure();
       if (ex.getResult() == ResultCodes.PERMISSION_DENIED) {
         throw newError(S3ErrorTable.ACCESS_DENIED, key, ex);
@@ -603,7 +575,7 @@ public class ObjectEndpoint extends EndpointBase {
       throw ex;
     } catch (Exception ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
   }
@@ -633,11 +605,6 @@ public class ObjectEndpoint extends EndpointBase {
       CompleteMultipartUploadRequest multipartUploadRequest)
       throws IOException, OS3Exception {
     S3GAction s3GAction = S3GAction.COMPLETE_MULTIPART_UPLOAD;
-    Map<String, String> auditParams = genAuditParam(
-        "bucket", bucket,
-        "path", key,
-        "uploadId", uploadID
-    );
     OzoneBucket ozoneBucket = getBucket(bucket);
     // Using LinkedHashMap to preserve ordering of parts list.
     Map<Integer, String> partsMap = new LinkedHashMap<>();
@@ -664,13 +631,13 @@ public class ObjectEndpoint extends EndpointBase {
       // Location also setting as bucket name.
       completeMultipartUploadResponse.setLocation(bucket);
       AUDIT.logWriteSuccess(
-          buildAuditMessageForSuccess(s3GAction, auditParams));
+          buildAuditMessageForSuccess(s3GAction, getAuditParameters()));
       getMetrics().incCompleteMultiPartUploadSuccess();
       return Response.status(Status.OK).entity(completeMultipartUploadResponse)
           .build();
     } catch (OMException ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       getMetrics().incCompleteMultiPartUploadFailure();
       if (ex.getResult() == ResultCodes.INVALID_PART) {
         throw newError(S3ErrorTable.INVALID_PART, key, ex);
@@ -700,7 +667,7 @@ public class ObjectEndpoint extends EndpointBase {
       throw ex;
     } catch (Exception ex) {
       AUDIT.logWriteFailure(
-          buildAuditMessageForFailure(s3GAction, auditParams, ex));
+          buildAuditMessageForFailure(s3GAction, getAuditParameters(), ex));
       throw ex;
     }
   }
diff --git a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java
index 5f110e8409..d644162a8e 100644
--- a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java
+++ b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java
@@ -22,13 +22,10 @@ import org.apache.hadoop.hdds.client.ReplicationFactor;
 import org.apache.hadoop.hdds.client.ReplicationType;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.ozone.s3.exception.OS3Exception;
-import org.apache.commons.lang3.StringUtils;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
-import java.util.Map;
-import java.util.TreeMap;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.apache.hadoop.ozone.s3.exception.S3ErrorTable.INVALID_ARGUMENT;
@@ -49,22 +46,6 @@ public final class S3Utils {
     return URLEncoder.encode(str, UTF_8.name());
   }
 
-  public static Map<String, String> genAuditParam(String... strs) {
-    if (strs.length % 2 == 1) {
-      throw new IllegalArgumentException("Unexpected number of parameters: "
-          + strs.length);
-    }
-    Map<String, String> auditParams = new TreeMap<>();
-    for (int i = 0; i < strs.length; i++) {
-      if (StringUtils.isEmpty(strs[i]) || StringUtils.isEmpty(strs[i + 1])) {
-        ++i;
-        continue;
-      }
-      auditParams.put(strs[i], strs[++i]);
-    }
-    return auditParams;
-  }
-
   private S3Utils() {
     // no instances
   }
diff --git a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestS3GatewayAuditLog.java b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestS3GatewayAuditLog.java
index a598bdea60..7b18b08a2d 100644
--- a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestS3GatewayAuditLog.java
+++ b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/TestS3GatewayAuditLog.java
@@ -42,6 +42,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.Assert.assertEquals;
@@ -66,21 +67,33 @@ public class TestS3GatewayAuditLog {
   private RootEndpoint rootEndpoint;
   private ObjectEndpoint keyEndpoint;
   private OzoneBucket bucket;
+  private Map<String, String> parametersMap = new HashMap<>();
 
   @Before
   public void setup() throws Exception {
 
+    parametersMap.clear();
     clientStub = new OzoneClientStub();
     clientStub.getObjectStore().createS3Bucket(bucketName);
     bucket = clientStub.getObjectStore().getS3Bucket(bucketName);
 
-    bucketEndpoint = new BucketEndpoint();
+    bucketEndpoint = new BucketEndpoint() {
+      @Override
+      protected Map<String, String> getAuditParameters() {
+        return parametersMap;
+      }
+    };
     bucketEndpoint.setClient(clientStub);
 
     rootEndpoint = new RootEndpoint();
     rootEndpoint.setClient(clientStub);
 
-    keyEndpoint = new ObjectEndpoint();
+    keyEndpoint = new ObjectEndpoint() {
+      @Override
+      protected Map<String, String> getAuditParameters() {
+        return parametersMap;
+      }
+    };
     keyEndpoint.setClient(clientStub);
     keyEndpoint.setOzoneConfiguration(new OzoneConfiguration());
 
@@ -99,9 +112,11 @@ public class TestS3GatewayAuditLog {
 
   @Test
   public void testHeadBucket() throws Exception {
+    parametersMap.put("bucket", "[bucket]");
+
     bucketEndpoint.head(bucketName);
     String expected = "INFO  | S3GAudit | ? | user=null | ip=null | " +
-        "op=HEAD_BUCKET {bucket=bucket} | ret=SUCCESS";
+        "op=HEAD_BUCKET {bucket=[bucket]} | ret=SUCCESS";
     verifyLog(expected);
   }
 
@@ -123,10 +138,12 @@ public class TestS3GatewayAuditLog {
     out.write(value.getBytes(UTF_8));
     out.close();
 
+    parametersMap.put("bucket", "[bucket]");
+    parametersMap.put("path", "[key1]");
 
     keyEndpoint.head(bucketName, "key1");
     String expected = "INFO  | S3GAudit | ? | user=null | ip=null | " +
-        "op=HEAD_KEY {bucket=bucket, keyPath=key1} | ret=SUCCESS";
+        "op=HEAD_KEY {bucket=[bucket], path=[key1]} | ret=SUCCESS";
     verifyLog(expected);
 
   }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org