From c10e4bd330ebc1feb1d8614b66107edcab445dfe Mon Sep 17 00:00:00 2001 From: Duo Zhang Date: Wed, 13 Apr 2022 10:49:40 +0800 Subject: [PATCH] HBASE-26941 LocalHBaseCluster.waitOnRegionServer should quit while thread is interrupted (#4333) Signed-off-by: Xin Sun (cherry picked from commit 8247b7c722f95f94afd5cb9d9b80c9ce5f61a7de) --- .../hadoop/hbase/LocalHBaseCluster.java | 25 +++++++------------ .../apache/hadoop/hbase/MiniHBaseCluster.java | 17 ++++++++++--- .../master/TestMasterMetricsWrapper.java | 2 +- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/LocalHBaseCluster.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/LocalHBaseCluster.java index ca7e82a60715..6ddae5fc4cd0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/LocalHBaseCluster.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/LocalHBaseCluster.java @@ -300,7 +300,7 @@ public Configuration getConfiguration() { * Wait for the specified region server to stop. Removes this thread from list of running threads. * @return Name of region server that just went down. */ - public String waitOnRegionServer(int serverNumber) { + public String waitOnRegionServer(int serverNumber) throws InterruptedException { JVMClusterUtil.RegionServerThread regionServerThread = this.regionThreads.get(serverNumber); return waitOnRegionServer(regionServerThread); } @@ -309,14 +309,11 @@ public String waitOnRegionServer(int serverNumber) { * Wait for the specified region server to stop. Removes this thread from list of running threads. * @return Name of region server that just went down. */ - public String waitOnRegionServer(JVMClusterUtil.RegionServerThread rst) { + public String waitOnRegionServer(JVMClusterUtil.RegionServerThread rst) + throws InterruptedException { while (rst.isAlive()) { - try { - LOG.info("Waiting on " + rst.getRegionServer().toString()); - rst.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } + LOG.info("Waiting on " + rst.getRegionServer().toString()); + rst.join(); } regionThreads.remove(rst); return rst.getName(); @@ -372,7 +369,7 @@ public List getLiveMasters() { * Wait for the specified master to stop. Removes this thread from list of running threads. * @return Name of master that just went down. */ - public String waitOnMaster(int serverNumber) { + public String waitOnMaster(int serverNumber) throws InterruptedException { JVMClusterUtil.MasterThread masterThread = this.masterThreads.get(serverNumber); return waitOnMaster(masterThread); } @@ -381,14 +378,10 @@ public String waitOnMaster(int serverNumber) { * Wait for the specified master to stop. Removes this thread from list of running threads. * @return Name of master that just went down. */ - public String waitOnMaster(JVMClusterUtil.MasterThread masterThread) { + public String waitOnMaster(JVMClusterUtil.MasterThread masterThread) throws InterruptedException { while (masterThread.isAlive()) { - try { - LOG.info("Waiting on " + masterThread.getMaster().getServerName().toString()); - masterThread.join(); - } catch (InterruptedException e) { - e.printStackTrace(); - } + LOG.info("Waiting on " + masterThread.getMaster().getServerName().toString()); + masterThread.join(); } masterThreads.remove(masterThread); return masterThread.getName(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java index 4942dc868f4f..b182baab7dc6 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/MiniHBaseCluster.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hbase; import java.io.IOException; +import java.io.InterruptedIOException; import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.HashSet; @@ -308,7 +309,11 @@ public void resumeRegionServer(ServerName serverName) throws IOException { @Override public void waitForRegionServerToStop(ServerName serverName, long timeout) throws IOException { //ignore timeout for now - waitOnRegionServer(getRegionServerIndex(serverName)); + try { + waitOnRegionServer(getRegionServerIndex(serverName)); + } catch (InterruptedException e) { + throw (InterruptedIOException) new InterruptedIOException().initCause(e); + } } @Override @@ -404,7 +409,11 @@ public void stopMaster(ServerName serverName) throws IOException { @Override public void waitForMasterToStop(ServerName serverName, long timeout) throws IOException { //ignore timeout for now - waitOnMaster(getMasterIndex(serverName)); + try { + waitOnMaster(getMasterIndex(serverName)); + } catch (InterruptedException e) { + throw (InterruptedIOException) new InterruptedIOException().initCause(e); + } } /** @@ -535,7 +544,7 @@ public JVMClusterUtil.RegionServerThread resumeRegionServer(int serverNumber) { * @param serverNumber * @return Name of region server that just went down. */ - public String waitOnRegionServer(final int serverNumber) { + public String waitOnRegionServer(final int serverNumber) throws InterruptedException { return this.hbaseCluster.waitOnRegionServer(serverNumber); } @@ -646,7 +655,7 @@ public JVMClusterUtil.MasterThread stopMaster(int serverNumber, * @param serverNumber * @return Name of master that just went down. */ - public String waitOnMaster(final int serverNumber) { + public String waitOnMaster(final int serverNumber) throws InterruptedException { return this.hbaseCluster.waitOnMaster(serverNumber); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java index 920fd2d59c65..871d0f154617 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.java @@ -59,7 +59,7 @@ public static void teardown() throws Exception { } @Test - public void testInfo() { + public void testInfo() throws InterruptedException { HMaster master = TEST_UTIL.getHBaseCluster().getMaster(); MetricsMasterWrapperImpl info = new MetricsMasterWrapperImpl(master); assertEquals(