You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2022/06/28 16:03:29 UTC
[pulsar] branch master updated: [improve][broker] Use LinkedHashSet for config items of type Set to preserve elements order (#16138)
This is an automated email from the ASF dual-hosted git repository.
penghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new ca9e4bd6186 [improve][broker] Use LinkedHashSet for config items of type Set to preserve elements order (#16138)
ca9e4bd6186 is described below
commit ca9e4bd6186bdf35280177987ad439492ef5fc55
Author: Yang Yang <yy...@streamnative.io>
AuthorDate: Wed Jun 29 00:03:21 2022 +0800
[improve][broker] Use LinkedHashSet for config items of type Set to preserve elements order (#16138)
---
.../src/main/java/org/apache/pulsar/common/util/FieldParser.java | 6 +++---
.../org/apache/pulsar/common/util/collections/FieldParserTest.java | 5 +++++
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java
index 1968e66a4dc..40450584764 100644
--- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java
+++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java
@@ -31,7 +31,7 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -212,7 +212,7 @@ public final class FieldParser {
if (field.getType().equals(List.class)) {
field.set(obj, new ArrayList<>());
} else if (field.getType().equals(Set.class)) {
- field.set(obj, new HashSet<>());
+ field.set(obj, new LinkedHashSet<>());
} else if (field.getType().equals(Optional.class)) {
field.set(obj, Optional.empty());
} else {
@@ -333,7 +333,7 @@ public final class FieldParser {
String[] tokens = trim(val).split(",");
return Arrays.stream(tokens).map(t -> {
return convert(trim(t), type);
- }).collect(Collectors.toSet());
+ }).collect(Collectors.toCollection(LinkedHashSet::new));
}
private static <K, V> Map<K, V> stringToMap(String strValue, Class<K> keyType, Class<V> valueType) {
diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/FieldParserTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/FieldParserTest.java
index a614f8a3ef5..59cfb2f5f0d 100644
--- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/FieldParserTest.java
+++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/FieldParserTest.java
@@ -32,6 +32,7 @@ import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -54,6 +55,10 @@ public class FieldParserTest {
assertEquals(integerToString(1), String.valueOf(1));
assertEquals(stringToList("1,2,3", Integer.class).get(2), Integer.valueOf(3));
assertTrue(stringToSet("1,2,3", Integer.class).contains(3));
+ // the order of values should be preserved for a Set configuration item
+ assertEquals(new ArrayList<>(stringToSet("1,2,3", Integer.class)), Arrays.asList(1, 2, 3));
+ assertEquals(new ArrayList<>(stringToSet("2,3,1", Integer.class)), Arrays.asList(2, 3, 1));
+ assertEquals(new ArrayList<>(stringToSet("3,2,1", Integer.class)), Arrays.asList(3, 2, 1));
assertEquals(stringToBoolean("true"), Boolean.TRUE);
assertEquals(stringToDouble("2.2"), Double.valueOf(2.2));
assertEquals(stringToLong("2"), Long.valueOf(2));