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