From 5370adb83ea8f507feee4bcb5814e30f15a93f7b Mon Sep 17 00:00:00 2001 From: Josh Elser Date: Tue, 10 Sep 2019 15:39:01 -0400 Subject: [PATCH] HBASE-23011 Gracefully handle an AP for a region in a table that doesn't exist. --- .../org/apache/hadoop/hbase/master/TableStateManager.java | 6 ++++++ .../hadoop/hbase/master/assignment/AssignProcedure.java | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java index 580e726b87..997a4349c2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/TableStateManager.java @@ -205,6 +205,12 @@ public class TableStateManager { } } + /** + * Returns the state of the given table or throws {@link TableStateNotFoundException} + * if, by some means, that table no longer exists. + * + * @throws TableStateNotFoundException if the table does not exist + */ @NonNull public TableState getTableState(TableName tableName) throws IOException { ReadWriteLock lock = tnLock.getLock(tableName); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java index f2b967afa7..ad71ddfa33 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/assignment/AssignProcedure.java @@ -192,6 +192,11 @@ public class AssignProcedure extends RegionTransitionProcedure { // Don't assign if table is in disabling or disabled state. TableStateManager tsm = masterServices.getTableStateManager(); TableName tn = regionNode.getRegionInfo().getTable(); + if (!tsm.isTablePresent(tn)) { + LOG.info("{} does not exist anymore, SKIPPING assign of {}", tn, + regionNode.getRegionInfo().getEncodedName()); + return false; + } TableState ts = tsm.getTableState(tn); if (ts.isDisabledOrDisabling()) { LOG.info("{} so SKIPPING assign of {}", ts, regionNode.getRegionInfo().getEncodedName()); -- 2.18.0