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 d74e813c764b..a55ba95d8f02 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 @@ -473,7 +473,7 @@ public class HRegionServer extends HBaseServerBase private FileSystemUtilizationChore fsUtilizationChore; - 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 @@ -3729,7 +3729,10 @@ public List getBackupMasters() { @Override public Iterator getBootstrapNodes() { - return bootstrapNodeManager.getBootstrapNodes().iterator(); + BootstrapNodeManager manager = bootstrapNodeManager; + return manager != null + ? manager.getBootstrapNodes().iterator() + : Collections. emptyList().iterator(); } @Override 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 40056c70cf20..d140a7e2f689 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 @@ 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; @@ -87,6 +88,13 @@ private void assertListEquals(List expected, List actual 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 regionServers =