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.
