Good point Chia.  Interfaces like Region, TableDesc are not meant for
own impl by the users or CP users. These are just read only
interfaces.  Would be best if we can have a way to say so.    We
should distinguish an exposed interface/class to say whether this is
just read only or allowed to be extended.

In another jira we have a discuss abt the own impl of Cell being added
to Put or not.. We are facing some issues if user do so.. So if we
have this new annotation and mark clearly that Cell is just read only
that will be a better way than just saying in javadoc. :-)   But then
we have APIs which takes interfaces like Cell/TableDescriptor   as
param.  So some way we should say how that can be done.. We do have
Factory in all such places.  Nice high level idea Chia..  We can
clearly say things in each and every exposed class/interfaces.  Will
make our life easy .

-Anoop-

On Fri, Dec 15, 2017 at 10:22 AM, Ted Yu <yuzhih...@gmail.com> wrote:
> We use @InterfaceStability.Stable in our codebase.
>
> If backward compatibility is kept, isn't the class / interface Stable ?
>
> Cheers
>
> On Thu, Dec 14, 2017 at 8:48 PM, Chia-Ping Tsai <chia7...@apache.org> wrote:
>
>> hi folks,
>>
>> We have added many Public "read-only" interface in 2.0 to save user from
>> the dangerous operations. For example, TableDescriptor,
>> ColumnFamilyDescriptor, Region, Store, etc. However, this change make us be
>> hard to enhance these interface (ie. add the new APIs)  because the BC will
>> be broken for the user having the subclass of these interfaces. In contrast
>> with Cell, Filter, and coprocessor, these new interfaces are NOT designed
>> to be a extendable class for user but we have no explicit  caveat. As I see
>> it, it is necessary to introduce an new annotation to explicitly say "you
>> CAN extend this Public class with the BC guarantee". User should not extend
>> the Public classes which don't have the such annotation.
>>
>> Any suggestions?
>>
>> Cheers
>> Chia-Ping
>>

Reply via email to