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

yong pushed a commit to branch branch-4.15
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git

commit eee3cc804a1c2c55c9bff4d9bb2c73cfae1b7d34
Author: Andrey Yegorov <[email protected]>
AuthorDate: Tue Jul 5 17:57:52 2022 -0700

    Fix: NPE in RackawareEnsemblePlacementPolicyImpl logged by AutoRecovery 
(#3350)
    
    ### Motivation
    
    AR keeps on logging NPE during rereplication:
    
    ```
    [ReplicationWorker] WARN  
org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicyImpl - Received 
exception while trying to get network location of bookie: ...
    java.lang.NullPointerException: null
    ```
    
    The NPE seems to be easily avoidable, no need to throw exception and log it 
just to ignore.
    
    ### Changes
    
    Added check for bookie being present in the knownBookies map before 
accessing it.
    
    (cherry picked from commit 04efcca7ebbdf22395ac905e0f3a79f41ac3217e)
---
 .../client/RackawareEnsemblePlacementPolicyImpl.java         | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
index 46c5a10786..1647deb666 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java
@@ -1026,7 +1026,11 @@ public class RackawareEnsemblePlacementPolicyImpl 
extends TopologyAwareEnsembleP
             for (int j = 0; j < writeQuorumSize; j++) {
                 bookie = ensembleList.get((i + j) % ensembleSize);
                 try {
-                    
racksInQuorum.add(knownBookies.get(bookie).getNetworkLocation());
+                    if (knownBookies.containsKey(bookie)) {
+                        
racksInQuorum.add(knownBookies.get(bookie).getNetworkLocation());
+                    } else {
+                        LOG.debug("bookie {} is not in the list of 
knownBookies", bookie);
+                    }
                 } catch (Exception e) {
                     /*
                      * any issue/exception in analyzing whether ensemble is
@@ -1055,7 +1059,11 @@ public class RackawareEnsemblePlacementPolicyImpl 
extends TopologyAwareEnsembleP
         readLock.lock();
         try {
             for (BookieId bookie : ackedBookies) {
-                rackCounter.add(knownBookies.get(bookie).getNetworkLocation());
+                if (knownBookies.containsKey(bookie)) {
+                    
rackCounter.add(knownBookies.get(bookie).getNetworkLocation());
+                } else {
+                    LOG.debug("bookie {} is not in the list of knownBookies", 
bookie);
+                }
             }
 
             // Check to make sure that ensemble is writing to 
`minNumberOfRacks`'s number of racks at least.

Reply via email to