You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ae...@apache.org on 2018/09/28 21:06:14 UTC

hadoop git commit: HDDS-391. Simplify Audit Framework to make audit logging easier to use. Contributed by Dinesh Chitlangia.

Repository: hadoop
Updated Branches:
  refs/heads/trunk 35c7351f4 -> 0da03f8b1


HDDS-391. Simplify Audit Framework to make audit logging easier to use.
Contributed by Dinesh Chitlangia.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/0da03f8b
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/0da03f8b
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/0da03f8b

Branch: refs/heads/trunk
Commit: 0da03f8b14ed90c22137260d7e4029057421f0d8
Parents: 35c7351
Author: Anu Engineer <ae...@apache.org>
Authored: Fri Sep 28 14:00:24 2018 -0700
Committer: Anu Engineer <ae...@apache.org>
Committed: Fri Sep 28 14:00:24 2018 -0700

----------------------------------------------------------------------
 .../apache/hadoop/ozone/audit/AuditLogger.java  | 44 ++--------
 .../apache/hadoop/ozone/audit/AuditMessage.java | 77 +++++++++++++++--
 .../org/apache/hadoop/ozone/audit/Auditor.java  | 33 +++++++
 .../apache/hadoop/ozone/audit/package-info.java | 16 ++--
 .../ozone/audit/TestOzoneAuditLogger.java       | 89 +++++++++----------
 .../common/src/test/resources/log4j2.properties |  4 +-
 .../apache/hadoop/ozone/om/OzoneManager.java    | 90 +++++++++++---------
 7 files changed, 213 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/0da03f8b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
index ee20c66..9357774 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditLogger.java
@@ -56,53 +56,21 @@ public class AuditLogger {
   }
 
   public void logWriteSuccess(AuditMessage msg) {
-    logWriteSuccess(Level.INFO, msg);
-  }
-
-  public void logWriteSuccess(Level level, AuditMessage msg) {
-    this.logger.logIfEnabled(FQCN, level, WRITE_MARKER, msg, null);
+    this.logger.logIfEnabled(FQCN, Level.INFO, WRITE_MARKER, msg, null);
   }
 
   public void logWriteFailure(AuditMessage msg) {
-    logWriteFailure(Level.ERROR, msg);
-  }
-
-  public void logWriteFailure(Level level, AuditMessage msg) {
-    logWriteFailure(level, msg, null);
-  }
-
-  public void logWriteFailure(AuditMessage msg, Throwable exception) {
-    logWriteFailure(Level.ERROR, msg, exception);
-  }
-
-  public void logWriteFailure(Level level, AuditMessage msg,
-      Throwable exception) {
-    this.logger.logIfEnabled(FQCN, level, WRITE_MARKER, msg, exception);
+    this.logger.logIfEnabled(FQCN, Level.ERROR, WRITE_MARKER, msg,
+        msg.getThrowable());
   }
 
   public void logReadSuccess(AuditMessage msg) {
-    logReadSuccess(Level.INFO, msg);
-  }
-
-  public void logReadSuccess(Level level, AuditMessage msg) {
-    this.logger.logIfEnabled(FQCN, level, READ_MARKER, msg, null);
+    this.logger.logIfEnabled(FQCN, Level.INFO, READ_MARKER, msg, null);
   }
 
   public void logReadFailure(AuditMessage msg) {
-    logReadFailure(Level.ERROR, msg);
-  }
-
-  public void logReadFailure(Level level, AuditMessage msg) {
-    logReadFailure(level, msg, null);
-  }
-
-  public void logReadFailure(AuditMessage msg, Throwable exception) {
-    logReadFailure(Level.ERROR, msg, exception);
-  }
-
-  public void logReadFailure(Level level, AuditMessage msg,
-      Throwable exception) {
-    this.logger.logIfEnabled(FQCN, level, READ_MARKER, msg, exception);
+    this.logger.logIfEnabled(FQCN, Level.ERROR, READ_MARKER, msg,
+        msg.getThrowable());
   }
 
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/0da03f8b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
index 858695a..1569ffe 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/AuditMessage.java
@@ -26,12 +26,13 @@ import java.util.Map;
 public class AuditMessage implements Message {
 
   private String message;
+  private Throwable throwable;
 
-  public AuditMessage(String user, String ip, String op,
-      Map<String, String> params, String ret){
+  private static final String MSG_PATTERN =
+      "user=%s | ip=%s | op=%s %s | ret=%s";
+
+  public AuditMessage(){
 
-    this.message = String.format("user=%s ip=%s op=%s %s ret=%s",
-                                  user, ip, op, params, ret);
   }
 
   @Override
@@ -51,7 +52,7 @@ public class AuditMessage implements Message {
 
   @Override
   public Throwable getThrowable() {
-    return null;
+    return throwable;
   }
 
   /**
@@ -61,4 +62,70 @@ public class AuditMessage implements Message {
   private void appendMessage(String customMessage) {
     this.message += customMessage;
   }
+
+  public String getMessage() {
+    return message;
+  }
+
+  public void setMessage(String message) {
+    this.message = message;
+  }
+
+  public void setThrowable(Throwable throwable) {
+    this.throwable = throwable;
+  }
+
+  /**
+   * Builder class for AuditMessage.
+   */
+  public static class Builder {
+    private Throwable throwable;
+    private String user;
+    private String ip;
+    private String op;
+    private Map<String, String> params;
+    private String ret;
+
+    public Builder(){
+
+    }
+
+    public Builder setUser(String usr){
+      this.user = usr;
+      return this;
+    }
+
+    public Builder atIp(String ipAddr){
+      this.ip = ipAddr;
+      return this;
+    }
+
+    public Builder forOperation(String operation){
+      this.op = operation;
+      return this;
+    }
+
+    public Builder withParams(Map<String, String> args){
+      this.params = args;
+      return this;
+    }
+
+    public Builder withResult(String result){
+      this.ret = result;
+      return this;
+    }
+
+    public Builder withException(Throwable ex){
+      this.throwable = ex;
+      return this;
+    }
+
+    public AuditMessage build(){
+      AuditMessage auditMessage = new AuditMessage();
+      auditMessage.message = String.format(MSG_PATTERN,
+          this.user, this.ip, this.op, this.params, this.ret);
+      auditMessage.throwable = this.throwable;
+      return auditMessage;
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/hadoop/blob/0da03f8b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/Auditor.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/Auditor.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/Auditor.java
new file mode 100644
index 0000000..51c0298
--- /dev/null
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/Auditor.java
@@ -0,0 +1,33 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership.  The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.hadoop.ozone.audit;
+
+import java.util.Map;
+
+/**
+ * Interface to mark an actor as Auditor.
+ */
+public interface Auditor {
+
+  AuditMessage buildAuditMessageForSuccess(
+      AuditAction op, Map<String, String> auditMap);
+
+  AuditMessage buildAuditMessageForFailure(
+      AuditAction op, Map<String, String> auditMap, Throwable throwable);
+
+}

http://git-wip-us.apache.org/repos/asf/hadoop/blob/0da03f8b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/package-info.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/package-info.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/package-info.java
index 9c00ef7..c8284fd 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/package-info.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/ozone/audit/package-info.java
@@ -88,6 +88,12 @@ package org.apache.hadoop.ozone.audit;
  * It will generate a message formatted as:
  * user=xxx ip=xxx op=XXXX_XXXX {key=val, key1=val1..} ret=XXXXXX
  *
+ * *** Auditor ***
+ * Interface to mark an actor class as Auditor
+ * Must be implemented by class where we want to log audit events
+ * Implementing class must override and implement methods
+ * buildAuditMessageForSuccess and buildAuditMessageForFailure.
+ *
  * ****************************************************************************
  *                              Usage
  * ****************************************************************************
@@ -99,12 +105,12 @@ package org.apache.hadoop.ozone.audit;
  *
  * 3. Log Read/Write and Success/Failure event as needed.
  * Example
- * AUDIT.logWriteSuccess(Level level, AuditMessage msg)
+ * AUDIT.logWriteSuccess(buildAuditMessageForSuccess(params))
  *
- * If logging is done without specifying Level, then Level implicitly
- * defaults to INFO for xxxxSuccess() and ERROR for xxxxFailure()
- * AUDIT.logWriteSuccess(AuditMessage msg)
- * AUDIT.logWriteFailure(AuditMessage msg)
+ * 4. Log Level implicitly defaults to INFO for xxxxSuccess() and ERROR for
+ * xxxxFailure()
+ * AUDIT.logWriteSuccess(buildAuditMessageForSuccess(params))
+ * AUDIT.logWriteFailure(buildAuditMessageForSuccess(params))
  *
  * See sample invocations in src/test in the following class:
  * org.apache.hadoop.ozone.audit.TestOzoneAuditLogger

http://git-wip-us.apache.org/repos/asf/hadoop/blob/0da03f8b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/audit/TestOzoneAuditLogger.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/audit/TestOzoneAuditLogger.java b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/audit/TestOzoneAuditLogger.java
index 6c59de6..77a6c0b 100644
--- a/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/audit/TestOzoneAuditLogger.java
+++ b/hadoop-hdds/common/src/test/java/org/apache/hadoop/ozone/audit/TestOzoneAuditLogger.java
@@ -18,7 +18,6 @@
 package org.apache.hadoop.ozone.audit;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.logging.log4j.Level;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -49,17 +48,41 @@ public class TestOzoneAuditLogger {
   private static final Map<String, String> PARAMS =
       new DummyEntity().toAuditMap();
 
-  private static final AuditMessage WRITE_FAIL_MSG = new AuditMessage("john",
-      "192.168.0.1", DummyAction.CREATE_VOLUME.name(), PARAMS, FAILURE);
-
-  private static final AuditMessage WRITE_SUCCESS_MSG = new AuditMessage("john",
-      "192.168.0.1", DummyAction.CREATE_VOLUME.name(), PARAMS, SUCCESS);
-
-  private static final AuditMessage READ_FAIL_MSG = new AuditMessage("john",
-      "192.168.0.1", DummyAction.READ_VOLUME.name(), PARAMS, FAILURE);
-
-  private static final AuditMessage READ_SUCCESS_MSG = new AuditMessage("john",
-      "192.168.0.1", DummyAction.READ_VOLUME.name(), PARAMS, SUCCESS);
+  private static final AuditMessage WRITE_FAIL_MSG =
+      new AuditMessage.Builder()
+          .setUser("john")
+          .atIp("192.168.0.1")
+          .forOperation(DummyAction.CREATE_VOLUME.name())
+          .withParams(PARAMS)
+          .withResult(FAILURE)
+          .withException(null).build();
+
+  private static final AuditMessage WRITE_SUCCESS_MSG =
+      new AuditMessage.Builder()
+          .setUser("john")
+          .atIp("192.168.0.1")
+          .forOperation(DummyAction.CREATE_VOLUME.name())
+          .withParams(PARAMS)
+          .withResult(SUCCESS)
+          .withException(null).build();
+
+  private static final AuditMessage READ_FAIL_MSG =
+      new AuditMessage.Builder()
+          .setUser("john")
+          .atIp("192.168.0.1")
+          .forOperation(DummyAction.READ_VOLUME.name())
+          .withParams(PARAMS)
+          .withResult(FAILURE)
+          .withException(null).build();
+
+  private static final AuditMessage READ_SUCCESS_MSG =
+      new AuditMessage.Builder()
+          .setUser("john")
+          .atIp("192.168.0.1")
+          .forOperation(DummyAction.READ_VOLUME.name())
+          .withParams(PARAMS)
+          .withResult(SUCCESS)
+          .withException(null).build();
 
   @BeforeClass
   public static void setUp(){
@@ -78,24 +101,13 @@ public class TestOzoneAuditLogger {
   }
 
   /**
-   * Ensures WriteSuccess events are logged @ INFO and above.
-   */
-  @Test
-  public void logInfoWriteSuccess() throws IOException {
-    AUDIT.logWriteSuccess(Level.INFO, WRITE_SUCCESS_MSG);
-    String expected =
-        "[INFO ] OMAudit - " + WRITE_SUCCESS_MSG.getFormattedMessage();
-    verifyLog(expected);
-  }
-
-  /**
    * Test to verify default log level is INFO when logging success events.
    */
   @Test
   public void verifyDefaultLogLevelForSuccess() throws IOException {
     AUDIT.logWriteSuccess(WRITE_SUCCESS_MSG);
     String expected =
-        "[INFO ] OMAudit - " + WRITE_SUCCESS_MSG.getFormattedMessage();
+        "INFO  | OMAudit | " + WRITE_SUCCESS_MSG.getFormattedMessage();
     verifyLog(expected);
   }
 
@@ -106,18 +118,7 @@ public class TestOzoneAuditLogger {
   public void verifyDefaultLogLevelForFailure() throws IOException {
     AUDIT.logWriteFailure(WRITE_FAIL_MSG);
     String expected =
-        "[ERROR] OMAudit - " + WRITE_FAIL_MSG.getFormattedMessage();
-    verifyLog(expected);
-  }
-
-  /**
-   * Test to verify WriteFailure events are logged as ERROR.
-   */
-  @Test
-  public void logErrorWriteFailure() throws IOException {
-    AUDIT.logWriteFailure(Level.ERROR, WRITE_FAIL_MSG);
-    String expected =
-        "[ERROR] OMAudit - " + WRITE_FAIL_MSG.getFormattedMessage();
+        "ERROR | OMAudit | " + WRITE_FAIL_MSG.getFormattedMessage();
     verifyLog(expected);
   }
 
@@ -126,20 +127,8 @@ public class TestOzoneAuditLogger {
    */
   @Test
   public void notLogReadEvents() throws IOException {
-    AUDIT.logReadSuccess(Level.INFO, READ_SUCCESS_MSG);
-    AUDIT.logReadFailure(Level.INFO, READ_FAIL_MSG);
-    AUDIT.logReadFailure(Level.ERROR, READ_FAIL_MSG);
-    AUDIT.logReadFailure(Level.ERROR, READ_FAIL_MSG, new Exception("test"));
-    verifyNoLog();
-  }
-
-  /**
-   * Test to ensure DEBUG level messages are not logged when INFO is enabled.
-   */
-  @Test
-  public void notLogDebugEvents() throws IOException {
-    AUDIT.logWriteSuccess(Level.DEBUG, WRITE_SUCCESS_MSG);
-    AUDIT.logReadSuccess(Level.DEBUG, READ_SUCCESS_MSG);
+    AUDIT.logReadSuccess(READ_SUCCESS_MSG);
+    AUDIT.logReadFailure(READ_FAIL_MSG);
     verifyNoLog();
   }
 

http://git-wip-us.apache.org/repos/asf/hadoop/blob/0da03f8b/hadoop-hdds/common/src/test/resources/log4j2.properties
----------------------------------------------------------------------
diff --git a/hadoop-hdds/common/src/test/resources/log4j2.properties b/hadoop-hdds/common/src/test/resources/log4j2.properties
index d60df18..cef69e1 100644
--- a/hadoop-hdds/common/src/test/resources/log4j2.properties
+++ b/hadoop-hdds/common/src/test/resources/log4j2.properties
@@ -56,13 +56,13 @@ appenders = console, audit
 appender.console.type = Console
 appender.console.name = STDOUT
 appender.console.layout.type = PatternLayout
-appender.console.layout.pattern = [%-5level] %c{1} - %msg%n
+appender.console.layout.pattern = %-5level | %c{1} | %msg%n
 
 appender.audit.type = File
 appender.audit.name = AUDITLOG
 appender.audit.fileName=audit.log
 appender.audit.layout.type=PatternLayout
-appender.audit.layout.pattern= [%-5level] %c{1} - %msg%n
+appender.audit.layout.pattern= %-5level | %c{1} | %msg%n
 
 loggers=audit
 logger.audit.type=AsyncLogger

http://git-wip-us.apache.org/repos/asf/hadoop/blob/0da03f8b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
----------------------------------------------------------------------
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
index 6ea0fe7..7d07fcb 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneManager.java
@@ -46,6 +46,7 @@ import org.apache.hadoop.ozone.audit.AuditEventStatus;
 import org.apache.hadoop.ozone.audit.AuditLogger;
 import org.apache.hadoop.ozone.audit.AuditLoggerType;
 import org.apache.hadoop.ozone.audit.AuditMessage;
+import org.apache.hadoop.ozone.audit.Auditor;
 import org.apache.hadoop.ozone.audit.OMAction;
 import org.apache.hadoop.ozone.common.Storage.StorageState;
 import org.apache.hadoop.ozone.om.exceptions.OMException;
@@ -66,7 +67,6 @@ import org.apache.hadoop.ozone.protocolPB.OzoneManagerProtocolServerSideTranslat
 import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.util.GenericOptionsParser;
 import org.apache.hadoop.util.StringUtils;
-import org.apache.logging.log4j.Level;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -98,7 +98,7 @@ import static org.apache.hadoop.util.ExitUtil.terminate;
  */
 @InterfaceAudience.LimitedPrivate({"HDFS", "CBLOCK", "OZONE", "HBASE"})
 public final class OzoneManager extends ServiceRuntimeInfoImpl
-    implements OzoneManagerProtocol, OMMXBean {
+    implements OzoneManagerProtocol, OMMXBean, Auditor {
   private static final Logger LOG =
       LoggerFactory.getLogger(OzoneManager.class);
 
@@ -498,9 +498,10 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
           (args == null) ? null : args.toAuditMap()));
     } catch (Exception ex) {
       metrics.incNumVolumeCreateFails();
-      AUDIT.logWriteFailure(Level.ERROR,
+      AUDIT.logWriteFailure(
           buildAuditMessageForFailure(OMAction.CREATE_VOLUME,
-              (args == null) ? null : args.toAuditMap()), ex);
+              (args == null) ? null : args.toAuditMap(), ex)
+      );
       throw ex;
     }
   }
@@ -524,7 +525,8 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumVolumeUpdateFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.SET_OWNER,
-          auditMap), ex);
+          auditMap, ex)
+      );
       throw ex;
     }
   }
@@ -548,7 +550,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumVolumeUpdateFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.SET_QUOTA,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     }
   }
@@ -576,7 +578,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumVolumeCheckAccessFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(
-          OMAction.CHECK_VOLUME_ACCESS, auditMap), ex);
+          OMAction.CHECK_VOLUME_ACCESS, auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -604,7 +606,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumVolumeInfoFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(OMAction.READ_VOLUME,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -630,7 +632,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumVolumeDeleteFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.DELETE_VOLUME,
-          buildAuditMap(volume)), ex);
+          buildAuditMap(volume), ex));
       throw ex;
     }
   }
@@ -662,7 +664,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumVolumeListFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(OMAction.LIST_VOLUMES,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -698,7 +700,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumVolumeListFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(OMAction.LIST_VOLUMES,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -724,7 +726,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumBucketCreateFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.CREATE_BUCKET,
-          (bucketInfo == null) ? null : bucketInfo.toAuditMap()), ex);
+          (bucketInfo == null) ? null : bucketInfo.toAuditMap(), ex));
       throw ex;
     }
   }
@@ -750,7 +752,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumBucketListFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(OMAction.LIST_BUCKETS,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -781,7 +783,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumBucketInfoFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(OMAction.READ_BUCKET,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -808,7 +810,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumKeyAllocateFails();
       auditSuccess = false;
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.ALLOCATE_KEY,
-          (args == null) ? null : args.toAuditMap()), ex);
+          (args == null) ? null : args.toAuditMap(), ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -832,7 +834,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumKeyCommitFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.COMMIT_KEY,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     }
   }
@@ -851,7 +853,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumBlockAllocateCallFails();
       auditSuccess = false;
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.ALLOCATE_BLOCK,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -878,7 +880,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumKeyLookupFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(OMAction.READ_KEY,
-          (args == null) ? null : args.toAuditMap()), ex);
+          (args == null) ? null : args.toAuditMap(), ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -901,7 +903,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (IOException e) {
       metrics.incNumKeyRenameFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.RENAME_KEY,
-          auditMap), e);
+          auditMap, e));
       throw e;
     }
   }
@@ -922,7 +924,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumKeyDeleteFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.DELETE_KEY,
-          (args == null) ? null : args.toAuditMap()), ex);
+          (args == null) ? null : args.toAuditMap(), ex));
       throw ex;
     }
   }
@@ -944,7 +946,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
       metrics.incNumKeyListFails();
       auditSuccess = false;
       AUDIT.logReadFailure(buildAuditMessageForFailure(OMAction.LIST_KEYS,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     } finally {
       if(auditSuccess){
@@ -971,7 +973,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumBucketUpdateFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.UPDATE_BUCKET,
-          (args == null) ? null : args.toAuditMap()), ex);
+          (args == null) ? null : args.toAuditMap(), ex));
       throw ex;
     }
   }
@@ -994,7 +996,7 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     } catch (Exception ex) {
       metrics.incNumBucketDeleteFails();
       AUDIT.logWriteFailure(buildAuditMessageForFailure(OMAction.DELETE_BUCKET,
-          auditMap), ex);
+          auditMap, ex));
       throw ex;
     }
   }
@@ -1005,26 +1007,34 @@ public final class OzoneManager extends ServiceRuntimeInfoImpl
     return auditMap;
   }
 
-  // TODO: Temporary method until AuditMessage is simplified
-  private AuditMessage buildAuditMessageForSuccess(AuditAction op,
+  @Override
+  public AuditMessage buildAuditMessageForSuccess(AuditAction op,
       Map<String, String> auditMap) {
-    return new AuditMessage(
-      (Server.getRemoteUser() == null) ? null :
-              Server.getRemoteUser().getUserName(),
-      (Server.getRemoteIp() == null) ? null :
-          Server.getRemoteIp().getHostAddress(), op.toString(), auditMap,
-      AuditEventStatus.SUCCESS.toString());
+    return new AuditMessage.Builder()
+        .setUser((Server.getRemoteUser() == null) ? null :
+            Server.getRemoteUser().getUserName())
+        .atIp((Server.getRemoteIp() == null) ? null :
+            Server.getRemoteIp().getHostAddress())
+        .forOperation(op.getAction())
+        .withParams(auditMap)
+        .withResult(AuditEventStatus.SUCCESS.toString())
+        .withException(null)
+        .build();
   }
 
-  // TODO: Temporary method until AuditMessage is simplified
-  private AuditMessage buildAuditMessageForFailure(AuditAction op,
-      Map<String, String> auditMap) {
-    return new AuditMessage(
-      (Server.getRemoteUser() == null) ? null :
-              Server.getRemoteUser().getUserName(),
-      (Server.getRemoteIp() == null) ? null :
-          Server.getRemoteIp().getHostAddress(), op.toString(), auditMap,
-      AuditEventStatus.FAILURE.toString());
+  @Override
+  public AuditMessage buildAuditMessageForFailure(AuditAction op,
+      Map<String, String> auditMap, Throwable throwable) {
+    return new AuditMessage.Builder()
+        .setUser((Server.getRemoteUser() == null) ? null :
+            Server.getRemoteUser().getUserName())
+        .atIp((Server.getRemoteIp() == null) ? null :
+            Server.getRemoteIp().getHostAddress())
+        .forOperation(op.getAction())
+        .withParams(auditMap)
+        .withResult(AuditEventStatus.FAILURE.toString())
+        .withException(throwable)
+        .build();
   }
 
   private void registerMXBean() {


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