This is an automated email from the ASF dual-hosted git repository.
petersomogyi pushed a commit to branch branch-2.6
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.6 by this push:
new 645fc1d7905 HBASE-30099 Avoid NPE when GetBootstrapNodes RPC arrives
during startup (#8483)
645fc1d7905 is described below
commit 645fc1d7905905cef949cbaa6af3d4da695659ab
Author: Ma Zhengxuan <[email protected]>
AuthorDate: Thu Aug 27 21:19:38 2026 +0800
HBASE-30099 Avoid NPE when GetBootstrapNodes RPC arrives during startup
(#8483)
Co-authored-by: mazhengxuan <[email protected]>
Signed-off-by: Peter Somogyi <[email protected]>
(cherry picked from commit df76c46e8ed7c2f81948b254a68ae98ebe064ed3)
---
.../java/org/apache/hadoop/hbase/regionserver/HRegionServer.java | 5 +++--
.../hadoop/hbase/regionserver/TestBootstrapNodeManager.java | 8 ++++++++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
index d59b1b222fd..8539396dadd 100644
---
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
+++
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java
@@ -593,7 +593,7 @@ public class HRegionServer extends Thread
*/
private NamedQueueRecorder namedQueueRecorder = null;
- private BootstrapNodeManager bootstrapNodeManager;
+ private volatile BootstrapNodeManager bootstrapNodeManager;
/**
* True if this RegionServer is coming up in a cluster where there is no
Master; means it needs to
@@ -4239,7 +4239,8 @@ public class HRegionServer extends Thread
}
public Iterator<ServerName> getBootstrapNodes() {
- return bootstrapNodeManager.getBootstrapNodes().iterator();
+ BootstrapNodeManager manager = bootstrapNodeManager;
+ return manager != null ? manager.getBootstrapNodes().iterator() :
Collections.emptyIterator();
}
public MetaRegionLocationCache getMetaRegionLocationCache() {
diff --git
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBootstrapNodeManager.java
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBootstrapNodeManager.java
index 657d99ae32a..ec9f0bca9f7 100644
---
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBootstrapNodeManager.java
+++
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestBootstrapNodeManager.java
@@ -20,6 +20,7 @@ package org.apache.hadoop.hbase.regionserver;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.atLeast;
@@ -84,6 +85,13 @@ public class TestBootstrapNodeManager {
assertThat(actual, hasItems(expected.toArray(new ServerName[0])));
}
+ @Test
+ public void testGetBootstrapNodesBeforeInitialization() {
+ HRegionServer regionServer = mock(HRegionServer.class);
+ when(regionServer.getBootstrapNodes()).thenCallRealMethod();
+ assertFalse(regionServer.getBootstrapNodes().hasNext());
+ }
+
@Test
public void testNormal() throws Exception {
List<ServerName> regionServers =