[ https://issues.apache.org/jira/browse/HBASE-28481?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Duo Zhang resolved HBASE-28481. ------------------------------- Fix Version/s: 2.6.0 2.4.18 3.0.0-beta-2 2.5.9 Hadoop Flags: Reviewed Resolution: Fixed Pushed to all active branches. Thanks [~guluo] for contributing! > Prompting table already exists after failing to create table with many region > replications > ------------------------------------------------------------------------------------------ > > Key: HBASE-28481 > URL: https://issues.apache.org/jira/browse/HBASE-28481 > Project: HBase > Issue Type: Bug > Affects Versions: 2.4.13 > Environment: Centos > Reporter: guluo > Assignee: guluo > Priority: Major > Labels: pull-request-available > Fix For: 2.6.0, 2.4.18, 3.0.0-beta-2, 2.5.9 > > > Reproduction steps: > {code:java} > # Create table with 65537 region replications > # we would get errors as follow, this step is no problem > hbase:005:0> create 't01', 'info', {REGION_REPLICATION => 65537} > ERROR: java.lang.IllegalArgumentException: ReplicaId cannot be greater > than65535 > For usage try 'help "create"' > Took 0.7590 seconds{code} > {code:java} > # list, and found the table does not exist, as follow > hbase:006:0> list TABLE > 0 row(s) Took 0.0100 seconds > => []{code} > {code:java} > # we create this tale agin by the correct way > # we would get message that this table already exists > hbase:007:0> create 't01', 'info' > ERROR: Table already exists: t01! > For usage try 'help "create"' > Took 0.1210 seconds {code} > > Reason: > In the CreateTableProcedure, we update this table descriptor into HBase > cluster at stage CREATE_TABLE_WRITE_FS_LAYOUT > > {code:java} > env.getMasterServices().getTableDescriptors().update(tableDescriptor, true); > {code} > > and then, we check if the Region Replication Count is legal at stage > CREATE_TABLE_ADD_TO_META. > > > {code:java} > newRegions = addTableToMeta(env, tableDescriptor, newRegions); > // MutableRegionInfo.checkReplicaId > private static int checkReplicaId(int regionId) { > if (regionId > MAX_REPLICA_ID) { > throw new IllegalArgumentException("ReplicaId cannot be greater than" + > MAX_REPLICA_ID); > } > return regionId; > }{code} > > > So, we can not create the same name table by correct way after faling to > create table with many region replications (exceed 65536), because the table > descriptor has been updated into cluster and there is no rollback. > So i think we can check if the region replication count at stage > CREATE_TABLE_PRE_OPERATION to avoid this problem -- This message was sent by Atlassian Jira (v8.20.10#820010)