This is an automated email from the ASF dual-hosted git repository. penghui pushed a commit to branch branch-2.10 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit aa0294d984f27938237aecc98135264c2a4aaad0 Author: Yang Yang <[email protected]> AuthorDate: Wed Jun 29 00:03:21 2022 +0800 [improve][broker] Use LinkedHashSet for config items of type Set to preserve elements order (#16138) (cherry picked from commit ca9e4bd6186bdf35280177987ad439492ef5fc55) --- .../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 c8a46cb0a15..12d579bd8cd 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));
