From 4e6c52c31954f9e30d7e3257cf0901322efed081 Mon Sep 17 00:00:00 2001 From: XinSun Date: Thu, 15 Oct 2020 01:08:54 +0800 Subject: [PATCH] HBASE-25117 ReplicationSourceShipper thread can not be finished (#2521) Signed-off-by: Wellington Chevreuil Signed-off-by: stack Signed-off-by: Guanghao Zhang Signed-off-by: Duo Zhang (cherry picked from commit 78b7244091f294d7e2f59a563d34dac7cf722cd7) --- .../regionserver/HBaseInterClusterReplicationEndpoint.java | 5 +++-- .../hbase/replication/regionserver/ReplicationSource.java | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.java index 7287c61167a..c4e1d967b04 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.java @@ -238,7 +238,7 @@ public class HBaseInterClusterReplicationEndpoint extends HBaseReplicationEndpoi * @param sleepMultiplier by how many times the default sleeping time is augmented * @return True if sleepMultiplier is < maxRetriesMultiplier */ - protected boolean sleepForRetries(String msg, int sleepMultiplier) { + private boolean sleepForRetries(String msg, int sleepMultiplier) { try { if (LOG.isTraceEnabled()) { LOG.trace("{} {}, sleeping {} times {}", @@ -246,8 +246,9 @@ public class HBaseInterClusterReplicationEndpoint extends HBaseReplicationEndpoi } Thread.sleep(this.sleepForRetries * sleepMultiplier); } catch (InterruptedException e) { + Thread.currentThread().interrupt(); if (LOG.isDebugEnabled()) { - LOG.debug("{} Interrupted while sleeping between retries", logPeerId()); + LOG.debug("{} {} Interrupted while sleeping between retries", msg, logPeerId()); } } return sleepMultiplier < maxRetriesMultiplier; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java index b5c92fd910f..645c14d8510 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java @@ -714,6 +714,9 @@ public class ReplicationSource implements ReplicationSourceInterface { } } + if (this.replicationEndpoint != null) { + this.replicationEndpoint.stop(); + } for (ReplicationSourceShipper worker : workers) { if (worker.isAlive() || worker.entryReader.isAlive()) { try { @@ -734,9 +737,6 @@ public class ReplicationSource implements ReplicationSourceInterface { } } - if (this.replicationEndpoint != null) { - this.replicationEndpoint.stop(); - } if (join) { for (ReplicationSourceShipper worker : workers) { Threads.shutdown(worker, this.sleepForRetries);