From a5b68303bc0d52f31a12d4db846a5ec727b77229 Mon Sep 17 00:00:00 2001 From: xiangying Date: Thu, 14 Aug 2025 20:04:56 +0800 Subject: [PATCH 1/9] Refactor addDefaultRackBookiesIfMinNumRacksIsEnforced to Remove Redundant Logic and Improve Robustness ### Motivation The current implementation of `addDefaultRackBookiesIfMinNumRacksIsEnforced` has the following issues: - **Redundant logic**: The initialization and merging process for collecting Bookie nodes on the default rack involves unnecessary data copying and checks. - **Potential robustness issue**: There is no null check for the address returned by `BookieNode.getAddr()`, which may result in `null` values being included in the exclusion set. - **Incorrect logging**: The log claims to print only the defaultRack Bookies that are being excluded, while it actually prints all the nodes, including those already in `excludeBookies`. ```java LOG.info("enforceMinNumRacksPerWriteQuorum is enabled, so Excluding bookies of defaultRack: {}", bookiesInDefaultRack); ``` --- ### Modification - When creating `bookiesInDefaultRack`, do not copy elements from `excludeBookies`. - Add a null check for the address returned by `BookieNode.getAddr()`. - Remove unnecessary null checks for `bookiesInDefaultRack`. --- .../client/RackawareEnsemblePlacementPolicyImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 be90ceab94d..797527ce370 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 @@ -364,16 +364,16 @@ protected Set addDefaultRackBookiesIfMinNumRacksIsEnforced( Set bookiesInDefaultRack = null; Set defaultRackLeaves = topology.getLeaves(getDefaultRack()); for (Node node : defaultRackLeaves) { - if (node instanceof BookieNode) { + if (node instanceof BookieNode && ((BookieNode) node).getAddr() != null) { if (bookiesInDefaultRack == null) { - bookiesInDefaultRack = new HashSet(excludeBookies); + bookiesInDefaultRack = new HashSet<>(); } bookiesInDefaultRack.add(((BookieNode) node).getAddr()); } else { LOG.error("found non-BookieNode: {} as leaf of defaultrack: {}", node, getDefaultRack()); } } - if ((bookiesInDefaultRack == null) || bookiesInDefaultRack.isEmpty()) { + if (bookiesInDefaultRack == null) { comprehensiveExclusionBookiesSet = excludeBookies; } else { comprehensiveExclusionBookiesSet = new HashSet(excludeBookies); From df80f899eac548fcbbf9919e590e54ff5aa918ab Mon Sep 17 00:00:00 2001 From: xiangying Date: Fri, 15 Aug 2025 10:45:43 +0800 Subject: [PATCH 2/9] delete `addr` check --- .../bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 797527ce370..d5e80e09938 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 @@ -364,7 +364,7 @@ protected Set addDefaultRackBookiesIfMinNumRacksIsEnforced( Set bookiesInDefaultRack = null; Set defaultRackLeaves = topology.getLeaves(getDefaultRack()); for (Node node : defaultRackLeaves) { - if (node instanceof BookieNode && ((BookieNode) node).getAddr() != null) { + if (node instanceof BookieNode) { if (bookiesInDefaultRack == null) { bookiesInDefaultRack = new HashSet<>(); } From 28ebafd4571f4e289c30fcbb39d1aedf8efb2c81 Mon Sep 17 00:00:00 2001 From: xiangying Date: Wed, 24 Sep 2025 15:02:49 +0800 Subject: [PATCH 3/9] add test --- ...kawareEnsemblePlacementPolicyImplTest.java | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java new file mode 100644 index 00000000000..0981c4049bf --- /dev/null +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java @@ -0,0 +1,134 @@ +package org.apache.bookkeeper.client; + +import static org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy.REPP_DNS_RESOLVER_CLASS; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; + +import org.apache.bookkeeper.conf.ClientConfiguration; +import org.apache.bookkeeper.feature.FeatureProvider; +import org.apache.bookkeeper.net.BookieId; +import org.apache.bookkeeper.net.BookieNode; +import org.apache.bookkeeper.net.Node; +import org.apache.bookkeeper.net.NetworkTopology; +import org.apache.bookkeeper.net.ScriptBasedMapping; +import org.apache.bookkeeper.proto.BookieAddressResolver; +import org.apache.bookkeeper.test.TestStatsProvider; +import org.apache.bookkeeper.util.StaticDNSResolver; +import org.junit.Before; +import org.junit.Test; + +public class RackawareEnsemblePlacementPolicyImplTest { + + private RackawareEnsemblePlacementPolicyImpl policy; + private NetworkTopology topology; + private Set excludeBookies; + private BookieId bookie1; + private BookieId bookie2; + + String DEFAULT_RACK = "/default-rack"; + + @Before + public void setUp() { + TestStatsProvider provider = new TestStatsProvider(); + policy = new RackawareEnsemblePlacementPolicyImpl(); + ClientConfiguration clientConfiguration = mock(ClientConfiguration.class); + when(clientConfiguration.getEnforceMinNumRacksPerWriteQuorum()).thenReturn(true); + when(clientConfiguration.getString(REPP_DNS_RESOLVER_CLASS, + ScriptBasedMapping.class.getName())).thenReturn(StaticDNSResolver.class.getName()); + policy.initialize(clientConfiguration, + Optional.empty(), + mock(io.netty.util.HashedWheelTimer.class), + mock(FeatureProvider.class), + provider.getStatsLogger(""), + mock(BookieAddressResolver.class)); + topology = mock(NetworkTopology.class); + excludeBookies = new HashSet<>(); + bookie1 = BookieId.parse("bookie1:3181"); + bookie2 = BookieId.parse("bookie2:3181"); + + // Set the default rack + when(topology.getLeaves(DEFAULT_RACK)) + .thenReturn(Collections.emptySet()); + + // Use reflection to inject the mock topology into the policy + TestUtils.setField(TopologyAwareEnsemblePlacementPolicy.class, policy, "topology", topology); + } + + @Test + public void testWithDefaultRackBookies() { + // Scenario: bookie nodes exist in the default rack + BookieNode node1 = new BookieNode(bookie1, DEFAULT_RACK); + BookieNode node2 = new BookieNode(bookie2, DEFAULT_RACK); + + Set defaultRackNodes = new HashSet<>(); + defaultRackNodes.add(node1); + defaultRackNodes.add(node2); + + when(topology.getLeaves(DEFAULT_RACK)) + .thenReturn(defaultRackNodes); + + // Add some bookies to be excluded + excludeBookies.add(BookieId.parse("other:3181")); + + Set result = policy.addDefaultRackBookiesIfMinNumRacksIsEnforced(excludeBookies); + + // Verify: the result should contain the original exclusion set + all bookies from the default rack + assertEquals(3, result.size()); + assertTrue(result.contains(bookie1)); + assertTrue(result.contains(bookie2)); + assertTrue(result.containsAll(excludeBookies)); + } + + @Test + public void testMixedNodesInDefaultRack() { + // Scenario: default rack contains mixed BookieNode and non-BookieNode nodes + BookieNode bookieNode = new BookieNode(bookie1, DEFAULT_RACK); + Node nonBookieNode = mock(Node.class); + + Set defaultRackNodes = new HashSet<>(); + defaultRackNodes.add(bookieNode); + defaultRackNodes.add(nonBookieNode); + + when(topology.getLeaves(DEFAULT_RACK)) + .thenReturn(defaultRackNodes); + + Set result = policy.addDefaultRackBookiesIfMinNumRacksIsEnforced(excludeBookies); + + // Verify: the result should include the BookieNode but not the non-BookieNode + assertEquals(1, result.size()); + assertTrue(result.contains(bookie1)); + } + + @Test + public void testEmptyDefaultRackBookies() { + // Scenario: the collection in default rack is empty + Set emptySet = Collections.emptySet(); + when(topology.getLeaves(DEFAULT_RACK)) + .thenReturn(emptySet); + + // Add some bookies to be excluded + excludeBookies.add(BookieId.parse("other:3181")); + Set result = policy.addDefaultRackBookiesIfMinNumRacksIsEnforced(excludeBookies); + + // Verify: should return the original exclusion set + assertSame(excludeBookies, result); + } +} + +// Utility class for setting private fields +class TestUtils { + public static void setField(Class tclass , Object target, String fieldName, Object value) { + try { + java.lang.reflect.Field field = tclass.getDeclaredField(fieldName); + field.setAccessible(true); + field.set(target, value); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} From 061bb2edaf57e5829ded31ffe63b2c48d3e32272 Mon Sep 17 00:00:00 2001 From: xiangying Date: Wed, 24 Sep 2025 19:42:48 +0800 Subject: [PATCH 4/9] license --- ...kawareEnsemblePlacementPolicyImplTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java index 0981c4049bf..5ddbefeb5a5 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java @@ -1,3 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + package org.apache.bookkeeper.client; import static org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy.REPP_DNS_RESOLVER_CLASS; From de0836f271b7c6f4a8e90af9426a8c6b3aa1514f Mon Sep 17 00:00:00 2001 From: xiangying Date: Thu, 25 Sep 2025 10:44:24 +0800 Subject: [PATCH 5/9] checkstyle --- ...kawareEnsemblePlacementPolicyImplTest.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java index 5ddbefeb5a5..0eec655ffae 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java @@ -20,20 +20,22 @@ package org.apache.bookkeeper.client; import static org.apache.bookkeeper.client.TopologyAwareEnsemblePlacementPolicy.REPP_DNS_RESOLVER_CLASS; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.Collections; import java.util.HashSet; import java.util.Optional; import java.util.Set; - import org.apache.bookkeeper.conf.ClientConfiguration; import org.apache.bookkeeper.feature.FeatureProvider; import org.apache.bookkeeper.net.BookieId; import org.apache.bookkeeper.net.BookieNode; -import org.apache.bookkeeper.net.Node; import org.apache.bookkeeper.net.NetworkTopology; +import org.apache.bookkeeper.net.Node; import org.apache.bookkeeper.net.ScriptBasedMapping; import org.apache.bookkeeper.proto.BookieAddressResolver; import org.apache.bookkeeper.test.TestStatsProvider; @@ -49,7 +51,7 @@ public class RackawareEnsemblePlacementPolicyImplTest { private BookieId bookie1; private BookieId bookie2; - String DEFAULT_RACK = "/default-rack"; + String defaultRack = "/default-rack"; @Before public void setUp() { @@ -71,7 +73,7 @@ public void setUp() { bookie2 = BookieId.parse("bookie2:3181"); // Set the default rack - when(topology.getLeaves(DEFAULT_RACK)) + when(topology.getLeaves(defaultRack)) .thenReturn(Collections.emptySet()); // Use reflection to inject the mock topology into the policy @@ -81,14 +83,14 @@ public void setUp() { @Test public void testWithDefaultRackBookies() { // Scenario: bookie nodes exist in the default rack - BookieNode node1 = new BookieNode(bookie1, DEFAULT_RACK); - BookieNode node2 = new BookieNode(bookie2, DEFAULT_RACK); + BookieNode node1 = new BookieNode(bookie1, defaultRack); + BookieNode node2 = new BookieNode(bookie2, defaultRack); Set defaultRackNodes = new HashSet<>(); defaultRackNodes.add(node1); defaultRackNodes.add(node2); - when(topology.getLeaves(DEFAULT_RACK)) + when(topology.getLeaves(defaultRack)) .thenReturn(defaultRackNodes); // Add some bookies to be excluded @@ -106,14 +108,14 @@ public void testWithDefaultRackBookies() { @Test public void testMixedNodesInDefaultRack() { // Scenario: default rack contains mixed BookieNode and non-BookieNode nodes - BookieNode bookieNode = new BookieNode(bookie1, DEFAULT_RACK); + BookieNode bookieNode = new BookieNode(bookie1, defaultRack); Node nonBookieNode = mock(Node.class); Set defaultRackNodes = new HashSet<>(); defaultRackNodes.add(bookieNode); defaultRackNodes.add(nonBookieNode); - when(topology.getLeaves(DEFAULT_RACK)) + when(topology.getLeaves(defaultRack)) .thenReturn(defaultRackNodes); Set result = policy.addDefaultRackBookiesIfMinNumRacksIsEnforced(excludeBookies); @@ -127,7 +129,7 @@ public void testMixedNodesInDefaultRack() { public void testEmptyDefaultRackBookies() { // Scenario: the collection in default rack is empty Set emptySet = Collections.emptySet(); - when(topology.getLeaves(DEFAULT_RACK)) + when(topology.getLeaves(defaultRack)) .thenReturn(emptySet); // Add some bookies to be excluded From 1160da43dc8d4f27decb4de007beb28f26c8f4d2 Mon Sep 17 00:00:00 2001 From: xiangying Date: Tue, 14 Oct 2025 20:26:58 +0800 Subject: [PATCH 6/9] improve --- .../RackawareEnsemblePlacementPolicyImpl.java | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 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 d5e80e09938..62849d7f2f2 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 @@ -359,30 +359,22 @@ public void uninitalize() { */ protected Set addDefaultRackBookiesIfMinNumRacksIsEnforced( Set excludeBookies) { - Set comprehensiveExclusionBookiesSet; - if (enforceMinNumRacksPerWriteQuorum) { - Set bookiesInDefaultRack = null; - Set defaultRackLeaves = topology.getLeaves(getDefaultRack()); - for (Node node : defaultRackLeaves) { - if (node instanceof BookieNode) { - if (bookiesInDefaultRack == null) { - bookiesInDefaultRack = new HashSet<>(); - } - bookiesInDefaultRack.add(((BookieNode) node).getAddr()); - } else { - LOG.error("found non-BookieNode: {} as leaf of defaultrack: {}", node, getDefaultRack()); - } - } - if (bookiesInDefaultRack == null) { - comprehensiveExclusionBookiesSet = excludeBookies; + if (!enforceMinNumRacksPerWriteQuorum) { + return excludeBookies; + } + + Set comprehensiveExclusionBookiesSet = new HashSet<>(excludeBookies); + Set defaultRackLeaves = topology.getLeaves(getDefaultRack()); + for (Node node : defaultRackLeaves) { + if (node instanceof BookieNode) { + comprehensiveExclusionBookiesSet.add(((BookieNode) node).getAddr()); } else { - comprehensiveExclusionBookiesSet = new HashSet(excludeBookies); - comprehensiveExclusionBookiesSet.addAll(bookiesInDefaultRack); - LOG.info("enforceMinNumRacksPerWriteQuorum is enabled, so Excluding bookies of defaultRack: {}", - bookiesInDefaultRack); + LOG.error("found non-BookieNode: {} as leaf of defaultrack: {}", node, getDefaultRack()); } - } else { - comprehensiveExclusionBookiesSet = excludeBookies; + } + if (!comprehensiveExclusionBookiesSet.isEmpty()) { + LOG.info("enforceMinNumRacksPerWriteQuorum is enabled, so Excluding bookies of defaultRack: {}", + comprehensiveExclusionBookiesSet); } return comprehensiveExclusionBookiesSet; } From cfce8f86a0999129a83a4a7779ca4a8f95c54f4a Mon Sep 17 00:00:00 2001 From: xiangying Date: Wed, 15 Oct 2025 10:43:36 +0800 Subject: [PATCH 7/9] improve --- .../RackawareEnsemblePlacementPolicyImpl.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 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 62849d7f2f2..d552b4f1dc2 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 @@ -363,20 +363,27 @@ protected Set addDefaultRackBookiesIfMinNumRacksIsEnforced( return excludeBookies; } - Set comprehensiveExclusionBookiesSet = new HashSet<>(excludeBookies); + Set bookiesInDefaultRack = null; Set defaultRackLeaves = topology.getLeaves(getDefaultRack()); for (Node node : defaultRackLeaves) { if (node instanceof BookieNode) { - comprehensiveExclusionBookiesSet.add(((BookieNode) node).getAddr()); + if (bookiesInDefaultRack == null) { + bookiesInDefaultRack = new HashSet<>(); + } + bookiesInDefaultRack.add(((BookieNode) node).getAddr()); } else { LOG.error("found non-BookieNode: {} as leaf of defaultrack: {}", node, getDefaultRack()); } } - if (!comprehensiveExclusionBookiesSet.isEmpty()) { + if ((bookiesInDefaultRack == null) || bookiesInDefaultRack.isEmpty()) { + return excludeBookies; + } else { + Set comprehensiveExclusionBookiesSet = new HashSet<>(excludeBookies); + comprehensiveExclusionBookiesSet.addAll(bookiesInDefaultRack); LOG.info("enforceMinNumRacksPerWriteQuorum is enabled, so Excluding bookies of defaultRack: {}", - comprehensiveExclusionBookiesSet); + bookiesInDefaultRack); + return comprehensiveExclusionBookiesSet; } - return comprehensiveExclusionBookiesSet; } @Override From 44fbe3f39acbd3d7cd2655b695b5104074d6c4d6 Mon Sep 17 00:00:00 2001 From: xiangying Date: Wed, 15 Oct 2025 18:02:42 +0800 Subject: [PATCH 8/9] use FieldUtils --- ...kawareEnsemblePlacementPolicyImplTest.java | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java index 0eec655ffae..8cbba944b7b 100644 --- a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java +++ b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImplTest.java @@ -40,6 +40,7 @@ import org.apache.bookkeeper.proto.BookieAddressResolver; import org.apache.bookkeeper.test.TestStatsProvider; import org.apache.bookkeeper.util.StaticDNSResolver; +import org.apache.commons.lang3.reflect.FieldUtils; import org.junit.Before; import org.junit.Test; @@ -54,7 +55,7 @@ public class RackawareEnsemblePlacementPolicyImplTest { String defaultRack = "/default-rack"; @Before - public void setUp() { + public void setUp() throws IllegalAccessException { TestStatsProvider provider = new TestStatsProvider(); policy = new RackawareEnsemblePlacementPolicyImpl(); ClientConfiguration clientConfiguration = mock(ClientConfiguration.class); @@ -77,7 +78,7 @@ public void setUp() { .thenReturn(Collections.emptySet()); // Use reflection to inject the mock topology into the policy - TestUtils.setField(TopologyAwareEnsemblePlacementPolicy.class, policy, "topology", topology); + FieldUtils.writeField(policy, "topology", topology, true); } @Test @@ -139,17 +140,4 @@ public void testEmptyDefaultRackBookies() { // Verify: should return the original exclusion set assertSame(excludeBookies, result); } -} - -// Utility class for setting private fields -class TestUtils { - public static void setField(Class tclass , Object target, String fieldName, Object value) { - try { - java.lang.reflect.Field field = tclass.getDeclaredField(fieldName); - field.setAccessible(true); - field.set(target, value); - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} +} \ No newline at end of file From f7ec524f3be1da02950b29f5a9ea10c61daec805 Mon Sep 17 00:00:00 2001 From: Xiangying Meng <55571188+liangyepianzhou@users.noreply.github.com> Date: Thu, 16 Oct 2025 20:02:26 +0800 Subject: [PATCH 9/9] Update bookkeeper-server/src/main/java/org/apache/bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../bookkeeper/client/RackawareEnsemblePlacementPolicyImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d552b4f1dc2..d0574e6562a 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 @@ -372,7 +372,7 @@ protected Set addDefaultRackBookiesIfMinNumRacksIsEnforced( } bookiesInDefaultRack.add(((BookieNode) node).getAddr()); } else { - LOG.error("found non-BookieNode: {} as leaf of defaultrack: {}", node, getDefaultRack()); + LOG.error("found non-BookieNode: {} as leaf of defaultRack: {}", node, getDefaultRack()); } } if ((bookiesInDefaultRack == null) || bookiesInDefaultRack.isEmpty()) {