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