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 xk...@apache.org on 2019/09/06 17:13:41 UTC

[hadoop] branch trunk updated: HDFS-4819. [Dynamometer] Fix parsing of audit logs which contain = in path names. Contributed by Soya Miyoshi.

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

xkrogen pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new ae42c8c  HDFS-4819. [Dynamometer] Fix parsing of audit logs which contain = in path names. Contributed by Soya Miyoshi.
ae42c8c is described below

commit ae42c8cb61edcf69d0d6a9cf20ee9f936b0722fb
Author: Erik Krogen <xk...@apache.org>
AuthorDate: Fri Sep 6 10:13:12 2019 -0700

    HDFS-4819. [Dynamometer] Fix parsing of audit logs which contain = in path names. Contributed by Soya Miyoshi.
---
 .../workloadgenerator/audit/AuditLogDirectParser.java | 19 +++++++++++++++----
 .../audit/TestAuditLogDirectParser.java               |  9 +++++++++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/main/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/AuditLogDirectParser.java b/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/main/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/AuditLogDirectParser.java
index f07d9ed..f632d6a 100644
--- a/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/main/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/AuditLogDirectParser.java
+++ b/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/main/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/AuditLogDirectParser.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.TimeZone;
 import java.util.function.Function;
@@ -81,8 +82,6 @@ public class AuditLogDirectParser implements AuditCommandParser {
   public static final String AUDIT_LOG_PARSE_REGEX_DEFAULT =
       "^(?<timestamp>.+?) INFO [^:]+: (?<message>.+)$";
 
-  private static final Splitter.MapSplitter AUDIT_SPLITTER = Splitter.on("\t")
-      .trimResults().omitEmptyStrings().withKeyValueSeparator("=");
   private static final Splitter SPACE_SPLITTER = Splitter.on(" ").trimResults()
       .omitEmptyStrings();
 
@@ -132,8 +131,20 @@ public class AuditLogDirectParser implements AuditCommandParser {
     // Sanitize the = in the rename options field into a : so we can split on =
     String auditMessageSanitized =
         m.group("message").replace("(options=", "(options:");
-    Map<String, String> parameterMap = AUDIT_SPLITTER
-        .split(auditMessageSanitized);
+
+    Map<String, String> parameterMap = new HashMap<String, String>();
+    String[] auditMessageSanitizedList = auditMessageSanitized.split("\t");
+
+    for (String auditMessage : auditMessageSanitizedList) {
+      String[] splitMessage = auditMessage.split("=", 2);
+      try {
+        parameterMap.put(splitMessage[0], splitMessage[1]);
+      } catch (ArrayIndexOutOfBoundsException e) {
+        throw new IOException(
+            "Exception while parsing a message from audit log", e);
+      }
+    }
+
     return new AuditReplayCommand(relativeToAbsolute.apply(relativeTimestamp),
         // Split the UGI on space to remove the auth and proxy portions of it
         SPACE_SPLITTER.split(parameterMap.get("ugi")).iterator().next(),
diff --git a/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/test/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/TestAuditLogDirectParser.java b/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/test/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/TestAuditLogDirectParser.java
index f3a6eed..a98b5c4 100644
--- a/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/test/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/TestAuditLogDirectParser.java
+++ b/hadoop-tools/hadoop-dynamometer/hadoop-dynamometer-workload/src/test/java/org/apache/hadoop/tools/dynamometer/workloadgenerator/audit/TestAuditLogDirectParser.java
@@ -59,6 +59,15 @@ public class TestAuditLogDirectParser {
   }
 
   @Test
+  public void testInputWithEquals() throws Exception {
+    Text in = getAuditString("1970-01-01 00:00:11,000", "fakeUser",
+            "listStatus", "day=1970", "null");
+    AuditReplayCommand expected = new AuditReplayCommand(1000, "fakeUser",
+            "listStatus", "day=1970", "null", "0.0.0.0");
+    assertEquals(expected, parser.parse(in, Function.identity()));
+  }
+
+  @Test
   public void testInputWithRenameOptions() throws Exception {
     Text in = getAuditString("1970-01-01 00:00:11,000", "fakeUser",
         "rename (options=[TO_TRASH])", "sourcePath", "destPath");


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