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.