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 6ed190c6eb HDDS-9822. Format audit log message lazily (#5718)
6ed190c6eb is described below
commit 6ed190c6eb3e06013567b247f7a26adaacf14392
Author: XiChen <[email protected]>
AuthorDate: Mon Dec 4 15:31:22 2023 +0800
HDDS-9822. Format audit log message lazily (#5718)
---
.../org/apache/hadoop/ozone/audit/AuditLogger.java | 10 +++++--
.../apache/hadoop/ozone/audit/AuditMessage.java | 32 ++++++++++------------
.../hadoop/ozone/s3/endpoint/BucketEndpoint.java | 2 +-
.../hadoop/ozone/s3/endpoint/EndpointBase.java | 3 +-
.../hadoop/ozone/s3/endpoint/ObjectEndpoint.java | 8 +++---
5 files changed, 30 insertions(+), 25 deletions(-)
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
index f4f8ba7853..33ad708698 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
@@ -29,7 +29,9 @@ import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.HashSet;
import java.util.Locale;
+import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
@@ -52,6 +54,7 @@ public class AuditLogger {
public static final String AUDIT_LOG_DEBUG_CMD_LIST_PREFIX =
"ozone.audit.log.debug.cmd.list.";
private AuditLoggerType type;
+ private final Map<String, String> opNameCache = new ConcurrentHashMap<>();
/**
* Parametrized Constructor to initialize logger.
@@ -130,8 +133,11 @@ public class AuditLogger {
}
private boolean shouldLogAtDebug(AuditMessage auditMessage) {
- return debugCmdSetRef.get()
- .contains(auditMessage.getOp().toLowerCase(Locale.ROOT));
+ return debugCmdSetRef.get().contains(getLowerCaseOp(auditMessage.getOp()));
+ }
+
+ private String getLowerCaseOp(String op) {
+ return opNameCache.computeIfAbsent(op, k -> k.toLowerCase(Locale.ROOT));
}
/**
diff --git
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
index bff05f024d..b8156d58d9 100644
---
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
+++
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
@@ -16,38 +16,36 @@
*/
package org.apache.hadoop.ozone.audit;
+import org.apache.hadoop.ozone.audit.AuditLogger.PerformanceStringBuilder;
import org.apache.logging.log4j.message.Message;
+import org.apache.ratis.util.MemoizedSupplier;
import java.util.Map;
+import java.util.function.Supplier;
/**
* Defines audit message structure.
*/
public final class AuditMessage implements Message {
- private final String message;
- private final String user;
- private final String ip;
+ private static final long serialVersionUID = 1L;
+
+ private final transient Supplier<String> messageSupplier;
private final String op;
- private final Map<String, String> params;
- private final String ret;
private final Throwable throwable;
private AuditMessage(String user, String ip, String op,
Map<String, String> params, String ret, Throwable throwable,
- String performance) {
- this.user = user;
- this.ip = ip;
+ PerformanceStringBuilder performance) {
this.op = op;
- this.params = params;
- this.ret = ret;
- this.message = formMessage(user, ip, op, params, ret, performance);
+ this.messageSupplier = MemoizedSupplier.valueOf(
+ () -> formMessage(user, ip, op, params, ret, performance));
this.throwable = throwable;
}
@Override
public String getFormattedMessage() {
- return message;
+ return messageSupplier.get();
}
@Override
@@ -79,7 +77,7 @@ public final class AuditMessage implements Message {
private String op;
private Map<String, String> params;
private String ret;
- private String performance;
+ private PerformanceStringBuilder performance;
public Builder setUser(String usr) {
this.user = usr;
@@ -111,7 +109,7 @@ public final class AuditMessage implements Message {
return this;
}
- public Builder setPerformance(String perf) {
+ public Builder setPerformance(PerformanceStringBuilder perf) {
this.performance = perf;
return this;
}
@@ -124,9 +122,9 @@ public final class AuditMessage implements Message {
private String formMessage(String userStr, String ipStr, String opStr,
Map<String, String> paramsMap, String retStr,
- String performanceMap) {
- String perf = performanceMap != null && !performanceMap.isEmpty()
- ? " | perf=" + performanceMap : "";
+ PerformanceStringBuilder performanceMap) {
+ String perf = performanceMap != null
+ ? " | perf=" + performanceMap.build() : "";
return "user=" + userStr + " | ip=" + ipStr + " | " + "op=" + opStr
+ " " + paramsMap + " | ret=" + retStr + perf;
}
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 910b0026e3..f7ec7130ea 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
@@ -275,7 +275,7 @@ public class BucketEndpoint extends EndpointBase {
perf.appendCount(keyCount);
perf.appendOpLatencyNanos(opLatencyNs);
AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction,
- getAuditParameters(), perf.build()));
+ getAuditParameters(), perf));
response.setKeyCount(keyCount);
return Response.ok(response).build();
}
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 abda4678dc..6f0f3c4847 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
@@ -40,6 +40,7 @@ import org.apache.hadoop.ozone.OzoneConsts;
import org.apache.hadoop.ozone.audit.AuditAction;
import org.apache.hadoop.ozone.audit.AuditEventStatus;
import org.apache.hadoop.ozone.audit.AuditLogger;
+import org.apache.hadoop.ozone.audit.AuditLogger.PerformanceStringBuilder;
import org.apache.hadoop.ozone.audit.AuditLoggerType;
import org.apache.hadoop.ozone.audit.AuditMessage;
import org.apache.hadoop.ozone.audit.Auditor;
@@ -354,7 +355,7 @@ public abstract class EndpointBase implements Auditor {
}
public AuditMessage buildAuditMessageForSuccess(AuditAction op,
- Map<String, String> auditMap, String performance) {
+ Map<String, String> auditMap, PerformanceStringBuilder performance) {
AuditMessage.Builder builder = auditMessageBaseBuilder(op, auditMap)
.withResult(AuditEventStatus.SUCCESS);
builder.setPerformance(performance);
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 b607b1c5cf..1e247c8eb8 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
@@ -370,7 +370,7 @@ public class ObjectEndpoint extends EndpointBase {
long opLatencyNs =
getMetrics().updateCreateKeySuccessStats(startNanos);
perf.appendOpLatencyNanos(opLatencyNs);
AUDIT.logWriteSuccess(buildAuditMessageForSuccess(s3GAction,
- getAuditParameters(), perf.build()));
+ getAuditParameters(), perf));
}
}
}
@@ -405,7 +405,7 @@ public class ObjectEndpoint extends EndpointBase {
Response response = listParts(bucketName, keyPath, uploadId,
partMarker, maxParts, perf);
AUDIT.logReadSuccess(buildAuditMessageForSuccess(s3GAction,
- getAuditParameters(), perf.build()));
+ getAuditParameters(), perf));
return response;
}
@@ -444,7 +444,7 @@ public class ObjectEndpoint extends EndpointBase {
long opLatencyNs =
getMetrics().updateGetKeySuccessStats(startNanos);
perf.appendOpLatencyNanos(opLatencyNs);
AUDIT.logReadSuccess(buildAuditMessageForSuccess(S3GAction.GET_KEY,
- getAuditParameters(), perf.build()));
+ getAuditParameters(), perf));
};
responseBuilder = Response
.ok(output)
@@ -468,7 +468,7 @@ public class ObjectEndpoint extends EndpointBase {
long opLatencyNs = getMetrics().updateGetKeySuccessStats(startNanos);
perf.appendOpLatencyNanos(opLatencyNs);
AUDIT.logReadSuccess(buildAuditMessageForSuccess(S3GAction.GET_KEY,
- getAuditParameters(), perf.build()));
+ getAuditParameters(), perf));
};
responseBuilder = Response
.status(Status.PARTIAL_CONTENT)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]