This is an automated email from the ASF dual-hosted git repository.

mattisonchao pushed a commit to branch branch-2.9
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-2.9 by this push:
     new c3fd77de35a [fix][broker]fix npe when invoke replaceBookie. (#16239)
c3fd77de35a is described below

commit c3fd77de35ac3eda3cf0a5093a31f24f035cdfd7
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]>
    (cherry picked from commit 0eed84203b23e325ac15d7dc50e1ed6dbdf4fa2a)
---
 .../ZkIsolatedBookieEnsemblePlacementPolicy.java   |  4 +++
 ...kIsolatedBookieEnsemblePlacementPolicyTest.java | 33 ++++++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git 
a/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicy.java
 
b/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicy.java
index 93202963adb..4a50a6f61b3 100644
--- 
a/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicy.java
+++ 
b/pulsar-zookeeper-utils/src/main/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicy.java
@@ -205,9 +205,13 @@ public class ZkIsolatedBookieEnsemblePlacementPolicy 
extends RackawareEnsemblePl
             String secondaryIsolationGroupString = 
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-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicyTest.java
 
b/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicyTest.java
index 02df09b64e2..9269117361f 100644
--- 
a/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicyTest.java
+++ 
b/pulsar-zookeeper-utils/src/test/java/org/apache/pulsar/zookeeper/ZkIsolatedBookieEnsemblePlacementPolicyTest.java
@@ -306,6 +306,39 @@ public class ZkIsolatedBookieEnsemblePlacementPolicyTest {
         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);
     }
 
     /**

Reply via email to