This is an automated email from the ASF dual-hosted git repository.
zhangmingao 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 0eed84203b2 [fix][broker]fix npe when invoke replaceBookie. (#16239)
0eed84203b2 is described below
commit 0eed84203b23e325ac15d7dc50e1ed6dbdf4fa2a
Author: lixinyang <[email protected]>
AuthorDate: Tue Jun 28 20:07:38 2022 +0800
[fix][broker]fix npe when invoke replaceBookie. (#16239)
* fix npe when invoke replaceBookie.
* fix npe when invoke replaceBookie.
* fix npe when invoke replaceBookie.
Co-authored-by: nicklixinyang <[email protected]>
---
.../IsolatedBookieEnsemblePlacementPolicy.java | 4 +++
.../IsolatedBookieEnsemblePlacementPolicyTest.java | 33 ++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git
a/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicy.java
b/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicy.java
index f5648157694..b1c08801cae 100644
---
a/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicy.java
+++
b/pulsar-broker-common/src/main/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicy.java
@@ -206,9 +206,13 @@ public class IsolatedBookieEnsemblePlacementPolicy extends
RackawareEnsemblePlac
castToString(properties.getOrDefault(SECONDARY_ISOLATION_BOOKIE_GROUPS, ""));
if (!primaryIsolationGroupString.isEmpty()) {
pair.setLeft(new
HashSet(Arrays.asList(primaryIsolationGroupString.split(","))));
+ } else {
+ pair.setLeft(Collections.emptySet());
}
if (!secondaryIsolationGroupString.isEmpty()) {
pair.setRight(new
HashSet(Arrays.asList(secondaryIsolationGroupString.split(","))));
+ } else {
+ pair.setRight(Collections.emptySet());
}
}
return pair;
diff --git
a/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java
b/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java
index 87fac391bb6..d0f9b410904 100644
---
a/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java
+++
b/pulsar-broker-common/src/test/java/org/apache/pulsar/bookie/rackawareness/IsolatedBookieEnsemblePlacementPolicyTest.java
@@ -298,6 +298,39 @@ public class IsolatedBookieEnsemblePlacementPolicyTest {
isolationPolicy.onClusterChanged(writableBookies, readOnlyBookies);
isolationPolicy.newEnsemble(4, 4, 4, Collections.emptyMap(), new
HashSet<>());
+
+ BookieId bookie1Id = new BookieSocketAddress(BOOKIE1).toBookieId();
+ BookieId bookie2Id = new BookieSocketAddress(BOOKIE2).toBookieId();
+ BookieId bookie3Id = new BookieSocketAddress(BOOKIE3).toBookieId();
+ BookieId bookie4Id = new BookieSocketAddress(BOOKIE4).toBookieId();
+ // when we set strictBookieAffinityEnabled=true and some namespace not
set ISOLATION_BOOKIE_GROUPS there will set "" by default.
+ Map<String, Object> placementPolicyProperties1 = new HashMap<>();
+ placementPolicyProperties1.put(
+ IsolatedBookieEnsemblePlacementPolicy.ISOLATION_BOOKIE_GROUPS,
"");
+ placementPolicyProperties1.put(
+
IsolatedBookieEnsemblePlacementPolicy.SECONDARY_ISOLATION_BOOKIE_GROUPS, "");
+ EnsemblePlacementPolicyConfig policyConfig = new
EnsemblePlacementPolicyConfig(
+ IsolatedBookieEnsemblePlacementPolicy.class,
+ placementPolicyProperties1
+ );
+ Map<String, byte[]> customMetadata1 = new HashMap<>();
+
customMetadata1.put(EnsemblePlacementPolicyConfig.ENSEMBLE_PLACEMENT_POLICY_CONFIG,
policyConfig.encode());
+
+ BookieId replaceBookie1 = isolationPolicy.replaceBookie(3, 3, 3,
customMetadata1,
+ Arrays.asList(bookie1Id,bookie2Id,bookie3Id), bookie3Id,
null).getResult();
+ assertEquals(replaceBookie1, bookie4Id);
+
+ // when ISOLATION_BOOKIE_GROUPS miss.
+ Map<String, Object> placementPolicyProperties2 = new HashMap<>();
+ EnsemblePlacementPolicyConfig policyConfig2 = new
EnsemblePlacementPolicyConfig(
+ IsolatedBookieEnsemblePlacementPolicy.class,
+ placementPolicyProperties2
+ );
+ Map<String, byte[]> customMetadata2 = new HashMap<>();
+
customMetadata2.put(EnsemblePlacementPolicyConfig.ENSEMBLE_PLACEMENT_POLICY_CONFIG,
policyConfig.encode());
+ BookieId replaceBookie2 = isolationPolicy.replaceBookie(3, 3, 3,
customMetadata2,
+ Arrays.asList(bookie1Id,bookie2Id,bookie3Id), bookie3Id,
null).getResult();
+ assertEquals(replaceBookie2, bookie4Id);
}
/**