Jerry He commented on HBASE-17461:

There is a similar JIRA HBASE-17461. 

> HBase shell "major_compact" command should properly convert 
> "table_or_region_name" parameter to java byte array properly before simply 
> calling "HBaseAdmin.majorCompact" method
> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>                 Key: HBASE-17461
>                 URL: https://issues.apache.org/jira/browse/HBASE-17461
>             Project: HBase
>          Issue Type: Bug
>          Components: shell
>            Reporter: Wellington Chevreuil
>            Assignee: Wellington Chevreuil
> On HBase shell, *major_compact* command simply passes the received 
> *table_or_region_name* parameter straight to java *HBaseAdmin.majorCompact* 
> method.
> On some corner cases, HBase tables row keys may have special characters. 
> Then, if a region is split in such a way that row keys with special 
> characters are now part of the region name, calling *major_compact* on this 
> regions will fail, if the special character ASCII code is higher than 127. 
> This happens because Java byte type is signed, while ruby byte type isn't, 
> causing the region name to be converted to a wrong string at Java side.
> For example, considering a region named as below:
> {noformat}
> test,\xF8\xB9B2!$\x9C\x0A\xFEG\xC0\xE3\x8B\x1B\xFF\x15,1481745228583.b4bc69356d89018bfad3ee106b717285.
> {noformat} 
> Calling major_compat on it fails as follows:
> {noformat}
> hbase(main):008:0* major_compact 
> "test,\xF8\xB9B2!$\x9C\x0A\xFEG\xC0\xE3\x8B\x1B\xFF\x15,1484177359169.8128fa75ae0cd4eba38da2667ac8ec98."
> ERROR: Illegal character code:44, <,> at 4. User-space table qualifiers can 
> only contain 'alphanumeric characters': i.e. [a-zA-Z_0-9-.]: test,�B2!$�
> �G���1484177359169.8128fa75ae0cd4eba38da2667ac8ec98.
> {noformat}
> An easy solution is to convert *table_or_region_name* parameter properly, 
> prior to calling *HBaseAdmin.majorCompact* in the same way as it's already 
> done on some other shell commands, such as *get*:
> {noformat}
> admin.major_compact(table_or_region_name.to_s.to_java_bytes, family)
> {noformat}

This message was sent by Atlassian JIRA

Reply via email to