We have several deprecated methods in Cell interface, like
getSequenceId and tag related ones, which are marked as deprecated
since 2.0.0 and should be removed in 3.0.0. Most of them are marked as
deprecated in HBASE-19112.

After investigating, I found that it is not an easy work...

We have 3 levels for the Cell interface

Cell -> RawCell -> ExtendedCell

Where Cell is the Public API for client side usage, RawCell is for CPs
where we expose the tag related APIs, and ExtendedCell is for server
side usage, where we expose all the internal stuff, like sequence id.

In HBASE-19550, we introduced a CellWrapper as we think maybe CPs will
return a Cell which is not an ExtendedCell at server side, we need to
wrap it so at server side we always get an ExtendedCell. So if we
remove the tag and sequence id related methods, CellWrapper will be
broken.

For me, I do not think we need the CellWrapper. In general, all actual
Cell implementation classes in our code base implement the
ExtendedCell interface, i.e, we can simply consider all Cells are
actually ExtendedCells. The only reason we introduce the Cell
interface, is to hide internal stuff from client public API, does not
mean we want users to implement their own Cell.

So the plan is to change server side code use ExtendedCell as much as
possible in HBASE-28644, a draft PR is already there for review[1].
This will be landed to both 3.x and at least branch-2(I'm not sure if
it worth to also land on branch-2.6 and branch-2.5).
And starting from 3.0.0, we should make clear that all Cell instances
should be created via the CellBuilder related APIs, other Cell
implementations are not allowed. So on 3.0.0, we should treat Cell as
ExtendedCell everywhere in our code base, and also remove the
CellWrapper class, then we could finally remove the deprecated methods
in the Cell interface.

Thoughts?

Thanks.

1. https://github.com/apache/hbase/pull/5976

Reply via email to