[
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)