hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wellington Chevreuil (JIRA)" <j...@apache.org>
Subject [jira] [Created] (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 12:13:26 GMT
Wellington Chevreuil created HBASE-17461:
--------------------------------------------

             Summary: 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


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