From 35aa57e4452c6f0a7f5037371edca64163913345 Mon Sep 17 00:00:00 2001 From: Duo Zhang Date: Sun, 17 Apr 2022 22:56:52 +0800 Subject: [PATCH] HBASE-26941 LocalHBaseCluster.waitOnRegionServer should not call join while interrupted (#4352) Signed-off-by: Xin Sun --- .../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 329b1d050f6..2dca089f0bd 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 class LocalHBaseCluster { * @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 class LocalHBaseCluster { * @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 class LocalHBaseCluster { } 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(); }