[
https://issues.apache.org/jira/browse/HBASE-9142?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13732716#comment-13732716
]
Jonathan Hsieh commented on HBASE-9142:
---------------------------------------
First -- I think life is easier in you should probably create a new hbase95
sink. :) -- this is a case where 0.94 didn't specify external visibility
explictly yet and we didn't preserve compat.
I added a method back and named the new method as getFamilyCellMap. Along the
way, I went down the rathole of removing what I believe is a java collection of
generics anti-pattern along the way. (which if it ends up being clean, we
should get in to 0.95 before the api freezes). This may have been intentional
by my gut says it should be removed.
Specifically it seems that defining this method with List<? extends Cell> where
List<Cell> is sufficient has caused superfluous casts and extra types to
percolated throughout the code. Having gone through -client, -common, and
-server, none of the uses of the List instances require methods in Cell's
implementor KeyValue that aren't in the Cell interface. A List<Cell> can hold
KeyValue instances doesn't need have a List<KeyValue> type. Since the maps is
essentially exposed and can be used for read/write access, it should be the
collection element typed should be typed invariantly. See [1] for short primer
and examples.
[1]
http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)
> Mutation#getFamilyMap() return type change between HBase 94 and 96 breaks
> downstream apps
> -----------------------------------------------------------------------------------------
>
> Key: HBASE-9142
> URL: https://issues.apache.org/jira/browse/HBASE-9142
> Project: HBase
> Issue Type: Bug
> Reporter: Hari Shreedharan
> Assignee: Jonathan Hsieh
> Priority: Critical
> Fix For: 0.95.2
>
>
> In Hbase-94, Mutation#getFamilyMap() had signature:
> public Map<byte[],List<KeyValue>> getFamilyMap()
> In Hbase-96 it is:
> public NavigableMap<byte[],List<? extends Cell>> getFamilyMap()
> I understand this might not be an easy fix or even a possible one - but it
> breaks downstream apps in a nasty way. If the app needs to process the
> individual columns, then the whole logic is now different. Is there a way to
> work around this, if this cannot be fixed?
--
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