Bug: HBase 1.7 to 2.4 upgrade issue due to incompatible deserialization
Status: Resolved | Priority: Major | Resolution: Fixed
Created: 21/Jun/21 19:42
Affects Version/s: 1.7.0

As of today, if we bring up HBase cluster using branch-1 and upgrade to branch-2.4, we are facing issue while parsing namespace from HDFS fileinfo. Instead of "*hbase:meta*" and "*hbase:namespace*", parsing using ProtobufUtil seems to be producing "*\n hbase meta*" and "*\n hbase namespace*"
{code:java}
2021-06-22 00:05:56,611 INFO  [RpcServer.priority.RWQ.Fifo.read.handler=3,queue=1,port=16025] regionserver.RSRpcServices: Open hbase:meta,,1.1588230740
2021-06-22 00:05:56,648 INFO  [RpcServer.priority.RWQ.Fifo.read.handler=5,queue=1,port=16025] regionserver.RSRpcServices: Open hbase:namespace,,1624297762817.396cb6cc00cd4334cb1ea3a792d7529a.
2021-06-22 00:05:56,759 ERROR [RpcServer.priority.RWQ.Fifo.read.handler=5,queue=1,port=16025] ipc.RpcServer: Unexpected throwable object
java.lang.IllegalArgumentException: Illegal character <
> at 0. Namespaces may only contain 'alphanumeric characters' from any language and digits:
^Ehbase^R       namespace
        at org.apache.hadoop.hbase.TableName.isLegalNamespaceName(TableName.java:246)
        at org.apache.hadoop.hbase.TableName.isLegalNamespaceName(TableName.java:220)
        at org.apache.hadoop.hbase.TableName.<init>(TableName.java:348)
        at org.apache.hadoop.hbase.TableName.createTableNameIfNecessary(TableName.java:385)
        at org.apache.hadoop.hbase.TableName.valueOf(TableName.java:508)
        at org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.toTableName(ProtobufUtil.java:2292)
        at org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.toTableDescriptor(ProtobufUtil.java:2937)
        at org.apache.hadoop.hbase.client.TableDescriptorBuilder$ModifyableTableDescriptor.parseFrom(TableDescriptorBuilder.java:1625)
        at org.apache.hadoop.hbase.client.TableDescriptorBuilder$ModifyableTableDescriptor.access$200(TableDescriptorBuilder.java:597)
        at org.apache.hadoop.hbase.client.TableDescriptorBuilder.parseFrom(TableDescriptorBuilder.java:320)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.readTableDescriptor(FSTableDescriptors.java:511)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.getTableDescriptorFromFs(FSTableDescriptors.java:496)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.getTableDescriptorFromFs(FSTableDescriptors.java:482)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.get(FSTableDescriptors.java:210)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.openRegion(RSRpcServices.java:2112)
        at org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos$AdminService$2.callBlockingMethod(AdminProtos.java:35218)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:395)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:133)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:338)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:318)
2021-06-22 00:05:56,759 ERROR [RpcServer.priority.RWQ.Fifo.read.handler=3,queue=1,port=16025] ipc.RpcServer: Unexpected throwable object
java.lang.IllegalArgumentException: Illegal character <
> at 0. Namespaces may only contain 'alphanumeric characters' from any language and digits:
^Ehbase^R^Dmeta
        at org.apache.hadoop.hbase.TableName.isLegalNamespaceName(TableName.java:246)
        at org.apache.hadoop.hbase.TableName.isLegalNamespaceName(TableName.java:220)
        at org.apache.hadoop.hbase.TableName.<init>(TableName.java:348)
        at org.apache.hadoop.hbase.TableName.createTableNameIfNecessary(TableName.java:385)
        at org.apache.hadoop.hbase.TableName.valueOf(TableName.java:508)
        at org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.toTableName(ProtobufUtil.java:2292)
        at org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.toTableDescriptor(ProtobufUtil.java:2937)
        at org.apache.hadoop.hbase.client.TableDescriptorBuilder$ModifyableTableDescriptor.parseFrom(TableDescriptorBuilder.java:1625)
        at org.apache.hadoop.hbase.client.TableDescriptorBuilder$ModifyableTableDescriptor.access$200(TableDescriptorBuilder.java:597)
        at org.apache.hadoop.hbase.client.TableDescriptorBuilder.parseFrom(TableDescriptorBuilder.java:320)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.readTableDescriptor(FSTableDescriptors.java:511)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.getTableDescriptorFromFs(FSTableDescriptors.java:496)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.getTableDescriptorFromFs(FSTableDescriptors.java:482)
        at org.apache.hadoop.hbase.util.FSTableDescriptors.get(FSTableDescriptors.java:210)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.openRegion(RSRpcServices.java:2112)
        at org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos$AdminService$2.callBlockingMethod(AdminProtos.java:35218)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:395)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:133)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:338)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:318){code}