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