You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Wellington Chevreuil (JIRA)" <ji...@apache.org> on 2017/01/16 18:04:26 UTC

[jira] [Resolved] (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

     [ https://issues.apache.org/jira/browse/HBASE-17461?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Wellington Chevreuil resolved HBASE-17461.
------------------------------------------
    Resolution: Invalid

> 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
(v6.3.4#6332)