From f56f265a7e91bbc93d289d234cab1b821498a92b Mon Sep 17 00:00:00 2001 From: Duo Zhang Date: Sat, 16 Apr 2022 20:22:04 +0800 Subject: [PATCH] HBASE-26941 LocalHBaseCluster.waitOnRegionServer should not call join while interrupted --- .../org/apache/hadoop/hbase/LocalHBaseCluster.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 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 329b1d050f6c..2dca089f0bd3 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 @@ -310,16 +310,20 @@ public String waitOnRegionServer(int serverNumber) { * @return Name of region server that just went down. */ public String waitOnRegionServer(JVMClusterUtil.RegionServerThread rst) { + boolean interrupted = false; while (rst.isAlive()) { try { LOG.info("Waiting on " + rst.getRegionServer().toString()); rst.join(); } catch (InterruptedException e) { LOG.error("Interrupted while waiting for {} to finish. Retrying join", rst.getName(), e); - Thread.currentThread().interrupt(); + interrupted = true; } } regionThreads.remove(rst); + if (interrupted) { + Thread.currentThread().interrupt(); + } return rst.getName(); } @@ -383,6 +387,7 @@ public String waitOnMaster(int serverNumber) { * @return Name of master that just went down. */ public String waitOnMaster(JVMClusterUtil.MasterThread masterThread) { + boolean interrupted = false; while (masterThread.isAlive()) { try { LOG.info("Waiting on " + masterThread.getMaster().getServerName().toString()); @@ -390,10 +395,13 @@ public String waitOnMaster(JVMClusterUtil.MasterThread masterThread) { } catch (InterruptedException e) { LOG.error("Interrupted while waiting for {} to finish. Retrying join", masterThread.getName(), e); - Thread.currentThread().interrupt(); + interrupted = true; } } masterThreads.remove(masterThread); + if (interrupted) { + Thread.currentThread().interrupt(); + } return masterThread.getName(); }