[
https://issues.apache.org/jira/browse/HBASE-9359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13762113#comment-13762113
]
Jonathan Hsieh commented on HBASE-9359:
---------------------------------------
Originally came from discussion on HBASE-9334 but is mostly relevant to the
HBASE-9359 part of the commit.
[~nkeywal]:
{quote}
I may miss something obvious, but I understand that the goal of this change is
to require a recompile but not modification of the client app ("Recompile of
client apps likely needed after this change.").
But with this change:
public KeyValue[] raw() { ===> public Cell[] raw() {
A client which was calling 'raw' must now be changed to use 'Cell', no?
Incidentally, it seems not possible to write a client that would work with 2
versions of HBase (i.e. modifying the client, but beeing able to compile the
modified client with a previous version of HBase).
I'm having the issue because I port the ycsb benchmark. It depends on raw.
Lastly, audience parameter for 'cell' is private, but as it appears in a public
interface I think it should be public...
{quote}
Good catch on the InterfaceAudience for Cell -- that should be updated. I'll
file and commit that.
The release notes here highlight the minor changes need to be done to
applications -- change KeyValue to Cell, change List<KeyValue> to List<Cell>.
[~sershe]:
{quote}
+1 on fixing to not break compat... this is not the first time recently
something was broken like that (getFamilyMap, then HBASE_CLASSPATH), can we use
normal deprecation route to avoid breaking things.
Jonathan Hsieh what do you think should be done? Would the above patch be easy
to fix up?
{quote}
I think adding parts of the old api back is possible but it will incur some
non-trivial performance cost -- generally we'll need to use
KeyValueUtil.ensureKeyValue in many places and will also need to make copy
conversions of List<KeyValue> to List<Cell> and KeyValue[] to Cell[]. See some
of the gymnastics in place for Coprocs and Filters.
We've been updating apps/systems dependent on hbase (some flume connectors,
hive) and it has been annoying but straight forward. There are several cases
already where we have broken compat where we are not going to be able to
restore the old api (some were due to writable->protobuf conversion such as
HBASE-7215).
In this patch I've added some of the most popular convenience methods to Cell
as deprecated to minimize pain (#getRow, #getQualifier, #getFamily, #getValue).
I think adding some of the other more popular ones is reasonable but adding
everythign back is not. (a perf degraded #raw seems like a candidate now, as
well as a rename of the interface to #rawCells()). Did ycsb encounter any
other conversion pains?
Other suggestions?
> Convert KeyValue to Cell in hbase-client module - Result/Put/Delete,
> ColumnInterpreter
> --------------------------------------------------------------------------------------
>
> Key: HBASE-9359
> URL: https://issues.apache.org/jira/browse/HBASE-9359
> Project: HBase
> Issue Type: Sub-task
> Components: Client
> Affects Versions: 0.95.2
> Reporter: Jonathan Hsieh
> Assignee: Jonathan Hsieh
> Fix For: 0.98.0, 0.96.0
>
> Attachments: hbase-9334-9359.v4.patch, hbase-9359-9334.v5.patch,
> hbase-9359-9334.v6.patch, hbase-9359.patch, hbase-9359.v2.patch,
> hbase-9359.v3.patch, hbase-9359.v5.patch, hbase-9359.v6.patch
>
>
> This path is the second half of eliminating KeyValue from the client
> interfaces. This percolated through quite a bit.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira