From d71bbdb2d150536fee8d06631b54f8d4a7887906 Mon Sep 17 00:00:00 2001 From: Wellington Chevreuil Date: Tue, 14 May 2019 17:13:36 +0100 Subject: [PATCH] DeleteTableProcedure.deleteFromMeta method should remove table from Master's table descriptors cache Change-Id: I8a5867d6df61abf293bd87d676bf478e95f24691 --- .../procedure/DeleteTableProcedure.java | 2 ++ .../procedure/TestDeleteTableProcedure.java | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java index 4325d19569..8f62034ab2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java @@ -389,6 +389,8 @@ public class DeleteTableProcedure if (fnm != null) { fnm.deleteFavoredNodesForRegions(regions); } + + env.getMasterServices().getTableDescriptors().remove(tableName); } protected static void deleteAssignmentState(final MasterProcedureEnv env, diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java index 88159662bf..165351c542 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/TestDeleteTableProcedure.java @@ -17,8 +17,11 @@ */ package org.apache.hadoop.hbase.master.procedure; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -51,6 +54,7 @@ import org.junit.rules.TestName; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; @Category({MasterTests.class, MediumTests.class}) public class TestDeleteTableProcedure extends TestTableDDLProcedureBase { @@ -133,6 +137,21 @@ public class TestDeleteTableProcedure extends TestTableDDLProcedureBase { testSimpleDelete(tableName, splitKeys); } + @Test + public void testDeleteFromMeta() throws Exception { + final TableName tableName = TableName.valueOf(name.getMethodName()); + RegionInfo[] regions = MasterProcedureTestingUtility.createTable( + getMasterProcedureExecutor(), tableName, null, "f1", "f2"); + List regionsList = new ArrayList<>(); + UTIL.getAdmin().disableTable(tableName); + MasterProcedureEnv procedureEnv = getMasterProcedureExecutor().getEnvironment(); + assertNotNull("Table should be on TableDescriptors cache.", + procedureEnv.getMasterServices().getTableDescriptors().get(tableName)); + DeleteTableProcedure.deleteFromMeta(procedureEnv, tableName, regionsList); + assertNull("Table shouldn't be on TableDescriptors anymore.", + procedureEnv.getMasterServices().getTableDescriptors().get(tableName)); + } + private void testSimpleDelete(final TableName tableName, byte[][] splitKeys) throws Exception { RegionInfo[] regions = MasterProcedureTestingUtility.createTable( getMasterProcedureExecutor(), tableName, splitKeys, "f1", "f2"); -- 2.17.2 (Apple Git-113)