You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bookkeeper.apache.org by yo...@apache.org on 2022/08/02 06:26:01 UTC

[bookkeeper] 08/22: Fix: NPE in RackawareEnsemblePlacementPolicyImpl logged by AutoRecovery (#3350)

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 <86...@users.noreply.github.com>
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.