hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wellington Chevreuil (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (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
Date Fri, 13 Jan 2017 16:36:26 GMT

    [ https://issues.apache.org/jira/browse/HBASE-17461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15821966#comment-15821966
] 

Wellington Chevreuil commented on HBASE-17461:
----------------------------------------------

HBASE-8865 issue seems the same problem, however related to split command. Maybe applying
the same conversion prior to HBaseAdmin.split would also fix it.

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

Mime
View raw message