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 om...@apache.org on 2022/03/14 17:42:49 UTC
[hadoop] 05/08: HADOOP-18003. Add a method appendIfAbsent for CallerContext (#3644)
This is an automated email from the ASF dual-hosted git repository.
omalley pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git
commit 0029f22d7dfc77d64aad4202e23a1fc90517fd2a
Author: litao <to...@gmail.com>
AuthorDate: Mon Nov 15 21:44:49 2021 +0800
HADOOP-18003. Add a method appendIfAbsent for CallerContext (#3644)
Cherry-picked from 573b358f by Owen O'Malley
---
.../java/org/apache/hadoop/ipc/CallerContext.java | 20 ++++++++++++++
.../org/apache/hadoop/ipc/TestCallerContext.java | 31 ++++++++++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
index 378b83d..9f9c974 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/CallerContext.java
@@ -228,6 +228,26 @@ public final class CallerContext {
return this;
}
+ /**
+ * Append new field which contains key and value to the context
+ * if the key("key:") is absent.
+ * @param key the key of field.
+ * @param value the value of field.
+ * @return the builder.
+ */
+ public Builder appendIfAbsent(String key, String value) {
+ if (sb.toString().contains(key + KEY_VALUE_SEPARATOR)) {
+ return this;
+ }
+ if (isValid(key) && isValid(value)) {
+ if (sb.length() > 0) {
+ sb.append(fieldSeparator);
+ }
+ sb.append(key).append(KEY_VALUE_SEPARATOR).append(value);
+ }
+ return this;
+ }
+
public CallerContext build() {
return new CallerContext(this);
}
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallerContext.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallerContext.java
index fc1057b..bb4a119 100644
--- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallerContext.java
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestCallerContext.java
@@ -42,6 +42,37 @@ public class TestCallerContext {
builder.build().getContext());
}
+ @Test
+ public void testBuilderAppendIfAbsent() {
+ Configuration conf = new Configuration();
+ conf.set(HADOOP_CALLER_CONTEXT_SEPARATOR_KEY, "$");
+ CallerContext.Builder builder = new CallerContext.Builder(null, conf);
+ builder.append("key1", "value1");
+ Assert.assertEquals("key1:value1",
+ builder.build().getContext());
+
+ // Append an existed key with different value.
+ builder.appendIfAbsent("key1", "value2");
+ String[] items = builder.build().getContext().split("\\$");
+ Assert.assertEquals(1, items.length);
+ Assert.assertEquals("key1:value1",
+ builder.build().getContext());
+
+ // Append an absent key.
+ builder.appendIfAbsent("key2", "value2");
+ String[] items2 = builder.build().getContext().split("\\$");
+ Assert.assertEquals(2, items2.length);
+ Assert.assertEquals("key1:value1$key2:value2",
+ builder.build().getContext());
+
+ // Append a key that is a substring of an existing key.
+ builder.appendIfAbsent("key", "value");
+ String[] items3 = builder.build().getContext().split("\\$");
+ Assert.assertEquals(3, items3.length);
+ Assert.assertEquals("key1:value1$key2:value2$key:value",
+ builder.build().getContext());
+ }
+
@Test(expected = IllegalArgumentException.class)
public void testNewBuilder() {
Configuration conf = new Configuration();
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org