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 c07e72aabd Fix no known bookies after reset racks for all BKs (#4128)
c07e72aabd is described below
commit c07e72aabd68abec18ac761e61aec289814390c4
Author: fengyubiao <[email protected]>
AuthorDate: Mon Nov 20 09:39:52 2023 +0800
Fix no known bookies after reset racks for all BKs (#4128)
* Fix no known bookies after reset racks for all BKs
---
.../apache/bookkeeper/net/NetworkTopologyImpl.java | 3 ++
.../bookkeeper/net/NetworkTopologyImplTest.java | 40 ++++++++++++++++++++++
2 files changed, 43 insertions(+)
diff --git
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/NetworkTopologyImpl.java
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/NetworkTopologyImpl.java
index d4f0c4fd03..ff5704407a 100644
---
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/NetworkTopologyImpl.java
+++
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/net/NetworkTopologyImpl.java
@@ -505,6 +505,9 @@ public class NetworkTopologyImpl implements NetworkTopology
{
if (rack == null) {
numOfRacks--;
}
+ if (clusterMap.numOfLeaves == 0) {
+ depthOfAllLeaves = -1;
+ }
}
if (LOG.isDebugEnabled()) {
LOG.debug("NetworkTopology became:\n" + this);
diff --git
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/net/NetworkTopologyImplTest.java
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/net/NetworkTopologyImplTest.java
index 6122e51f0c..e9ed1577e7 100644
---
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/net/NetworkTopologyImplTest.java
+++
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/net/NetworkTopologyImplTest.java
@@ -65,6 +65,46 @@ public class NetworkTopologyImplTest {
assertTrue(leavesScopeRack1.contains(bookieRack1ScopeNode));
}
+ @Test
+ public void testRestartBKWithNewRackDepth() {
+ NetworkTopologyImpl networkTopology = new NetworkTopologyImpl();
+ String dp1Rack = "/rack-1";
+ String dp2Rack = "/dp/rack-1";
+ BookieId bkId1 = BookieId.parse("bookieIdScopeRack0");
+ BookieId bkId2 = BookieId.parse("bookieIdScopeRack1");
+
+ // Register 2 BKs with depth 1 rack.
+ BookieNode dp1BkNode1 = new BookieNode(bkId1, dp1Rack);
+ BookieNode dp1BkNode2 = new BookieNode(bkId2, dp1Rack);
+ networkTopology.add(dp1BkNode1);
+ networkTopology.add(dp1BkNode2);
+
+ // Update one BK with depth 2 rack.
+ // Assert it can not be added due to different depth.
+ networkTopology.remove(dp1BkNode1);
+ BookieNode dp2BkNode1 = new BookieNode(bkId1, dp2Rack);
+ try {
+ networkTopology.add(dp2BkNode1);
+ fail("Expected add node failed caused by different depth of rack");
+ } catch (NetworkTopologyImpl.InvalidTopologyException ex) {
+ // Expected ex.
+ }
+ Set<Node> leaves = networkTopology.getLeaves(dp1Rack);
+ assertEquals(leaves.size(), 1);
+ assertTrue(leaves.contains(dp1BkNode2));
+
+ // Update all Bks with depth 2 rack.
+ // Verify update success.
+ networkTopology.remove(dp1BkNode2);
+ BookieNode dp2BkNode2 = new BookieNode(bkId2, dp2Rack);
+ networkTopology.add(dp2BkNode1);
+ networkTopology.add(dp2BkNode2);
+ leaves = networkTopology.getLeaves(dp2Rack);
+ assertEquals(leaves.size(), 2);
+ assertTrue(leaves.contains(dp2BkNode1));
+ assertTrue(leaves.contains(dp2BkNode2));
+ }
+
@Test
public void getLeavesShouldReturnLeavesThatAreNotInExcludedScope() {
// GIVEN