HBASE-21866 Do not move the table to null rsgroup when creating an existing table
This commit is contained in:
parent
322ea5456f
commit
ed6939f94a
|
@ -30,6 +30,7 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.SortedSet;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -37,6 +38,7 @@ import org.apache.hadoop.hbase.HColumnDescriptor;
|
||||||
import org.apache.hadoop.hbase.HTableDescriptor;
|
import org.apache.hadoop.hbase.HTableDescriptor;
|
||||||
import org.apache.hadoop.hbase.NamespaceDescriptor;
|
import org.apache.hadoop.hbase.NamespaceDescriptor;
|
||||||
import org.apache.hadoop.hbase.ServerName;
|
import org.apache.hadoop.hbase.ServerName;
|
||||||
|
import org.apache.hadoop.hbase.TableExistsException;
|
||||||
import org.apache.hadoop.hbase.TableName;
|
import org.apache.hadoop.hbase.TableName;
|
||||||
import org.apache.hadoop.hbase.Waiter;
|
import org.apache.hadoop.hbase.Waiter;
|
||||||
import org.apache.hadoop.hbase.constraint.ConstraintException;
|
import org.apache.hadoop.hbase.constraint.ConstraintException;
|
||||||
|
@ -424,6 +426,39 @@ public class TestRSGroupsAdmin1 extends TestRSGroupsBase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNotMoveTableToNullRSGroupWhenCreatingExistingTable()
|
||||||
|
throws Exception {
|
||||||
|
// Trigger
|
||||||
|
TableName tn1 = TableName.valueOf("t1");
|
||||||
|
TEST_UTIL.createTable(tn1, "cf1");
|
||||||
|
try {
|
||||||
|
// Create an existing table to trigger HBASE-21866
|
||||||
|
TEST_UTIL.createTable(tn1, "cf1");
|
||||||
|
} catch (TableExistsException teex) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait then verify
|
||||||
|
// Could not verify until the rollback of CreateTableProcedure is done
|
||||||
|
// (that is, the coprocessor finishes its work),
|
||||||
|
// or the table is still in the "default" rsgroup even though HBASE-21866
|
||||||
|
// is not fixed.
|
||||||
|
TEST_UTIL.waitFor(5000, new Waiter.Predicate<Exception>() {
|
||||||
|
@Override
|
||||||
|
public boolean evaluate() throws Exception {
|
||||||
|
return
|
||||||
|
(master.getMasterProcedureExecutor().getActiveExecutorCount() == 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
SortedSet<TableName> tables
|
||||||
|
= rsGroupAdmin.getRSGroupInfo(RSGroupInfo.DEFAULT_GROUP).getTables();
|
||||||
|
assertTrue("Table 't1' must be in 'default' rsgroup", tables.contains(tn1));
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
TEST_UTIL.deleteTable(tn1);
|
||||||
|
}
|
||||||
|
|
||||||
private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception {
|
private void toggleQuotaCheckAndRestartMiniCluster(boolean enable) throws Exception {
|
||||||
TEST_UTIL.shutdownMiniCluster();
|
TEST_UTIL.shutdownMiniCluster();
|
||||||
TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);
|
TEST_UTIL.getConfiguration().setBoolean(QuotaUtil.QUOTA_CONF_KEY, enable);
|
||||||
|
|
|
@ -167,12 +167,15 @@ public class CreateTableProcedure
|
||||||
DeleteTableProcedure.deleteFromFs(env, getTableName(), newRegions, false);
|
DeleteTableProcedure.deleteFromFs(env, getTableName(), newRegions, false);
|
||||||
break;
|
break;
|
||||||
case CREATE_TABLE_PRE_OPERATION:
|
case CREATE_TABLE_PRE_OPERATION:
|
||||||
|
if (hasException() /* avoid NPE */ &&
|
||||||
|
getException().getCause().getClass() != TableExistsException.class) {
|
||||||
DeleteTableProcedure.deleteTableStates(env, getTableName());
|
DeleteTableProcedure.deleteTableStates(env, getTableName());
|
||||||
// TODO-MAYBE: call the deleteTable coprocessor event?
|
// TODO-MAYBE: call the deleteTable coprocessor event?
|
||||||
final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();
|
final MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();
|
||||||
if (cpHost != null) {
|
if (cpHost != null) {
|
||||||
cpHost.postDeleteTable(getTableName());
|
cpHost.postDeleteTable(getTableName());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ProcedurePrepareLatch.releaseLatch(syncLatch, this);
|
ProcedurePrepareLatch.releaseLatch(syncLatch, this);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue