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/03/31 05:42:41 UTC

[bookkeeper] branch master updated: catch onBookieRackChange exception (#3060)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new f55ac1e  catch onBookieRackChange exception (#3060)
f55ac1e is described below

commit f55ac1ed55336c3ba461c57a3428430309118344
Author: Hang Chen <ch...@apache.org>
AuthorDate: Thu Mar 31 13:42:34 2022 +0800

    catch onBookieRackChange exception (#3060)
    
    ### Motivation
    When we update the bookie rack info, it will use all the bookie list to update rack topology. However If one bookie update failed and throw exception out, it will throw the exception out and the remains bookie info won't be updated into the rack topology, which will affect the ledger ensemble selection.
    
    ### Changes
    
    Catch the bookie topology update exception to ensure the remaining bookies' info can be updated into the rack topology.
---
 .../TopologyAwareEnsemblePlacementPolicy.java      | 23 +++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TopologyAwareEnsemblePlacementPolicy.java b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TopologyAwareEnsemblePlacementPolicy.java
index 438053f..59bc893 100644
--- a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TopologyAwareEnsemblePlacementPolicy.java
+++ b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/TopologyAwareEnsemblePlacementPolicy.java
@@ -47,6 +47,7 @@ import org.apache.bookkeeper.net.BookieSocketAddress;
 import org.apache.bookkeeper.net.DNSToSwitchMapping;
 import org.apache.bookkeeper.net.NetUtils;
 import org.apache.bookkeeper.net.NetworkTopology;
+import org.apache.bookkeeper.net.NetworkTopologyImpl;
 import org.apache.bookkeeper.net.Node;
 import org.apache.bookkeeper.net.NodeBase;
 import org.apache.bookkeeper.proto.BookieAddressResolver;
@@ -740,16 +741,20 @@ abstract class TopologyAwareEnsemblePlacementPolicy implements
     public void onBookieRackChange(List<BookieId> bookieAddressList) {
         rwLock.writeLock().lock();
         try {
-            for (BookieId bookieAddress : bookieAddressList) {
-                BookieNode node = knownBookies.get(bookieAddress);
-                if (node != null) {
-                    // refresh the rack info if its a known bookie
-                    BookieNode newNode = createBookieNode(bookieAddress);
-                    topology.remove(node);
-                    topology.add(newNode);
-                    knownBookies.put(bookieAddress, newNode);
+            bookieAddressList.forEach(bookieAddress -> {
+                try {
+                    BookieNode node = knownBookies.get(bookieAddress);
+                    if (node != null) {
+                        // refresh the rack info if its a known bookie
+                        BookieNode newNode = createBookieNode(bookieAddress);
+                        topology.remove(node);
+                        topology.add(newNode);
+                        knownBookies.put(bookieAddress, newNode);
+                    }
+                } catch (IllegalArgumentException | NetworkTopologyImpl.InvalidTopologyException e) {
+                    LOG.error("Failed to update bookie rack info: {} ", bookieAddress, e);
                 }
-            }
+            });
         } finally {
             rwLock.writeLock().unlock();
         }