Thanks, Nick.

I think some of my confusion here was around overlapping nomenclature ("type" meaning both the type of application data but also the type of mutation). I appreciate the clarification!

On 10/29/17 1:28 PM, Nick Dimiduk wrote:
On Fri, Oct 27, 2017 at 9:58 AM, Josh Elser <[email protected]> wrote:

Re-reading https://issues.apache.org/jira/browse/HBASE-8693 that Sergey
pointed out, I more think that the maybe getType() was misintepreted from
what Nick originally meant it to be. Maybe intentional, maybe not.


The classes under o.a.h.h.types are for helping users building applications
to represent their application data in HBase byte arrays. See the overview
in the package description [0]. One uses implementations of
o.a.h.h.types.DataType to encode values that can then be stored in
o.a.h.h.Cells -- as the row, the column qualifier, or column value. The
type of the Cell is its use within the KeyValue storage engine that is
HBase while the DataType describes a means of getting some Java object
value into or out of a byte array.

[0]:
http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/types/package-summary.html#package.description

On 10/27/17 7:29 AM, Chia-Ping Tsai wrote:

The CellBuilder#Data type is introduced to make sure all components used
to builder cell are IA.Public.

bq. Best as I can tell, Cell#getType() should be deprecated
As i see it, the Cell#getType, #getTimestamp, #getSequenceId, and #getTag
should be deprecated as these methods is some kind of internal info of
storage engine. As a key-value store, the key  consisting of row, family,
and qualifier is enough to the general purpose. Other fields belong to the
specific storage engine, and they should not be in the Cell which is our
"frontline" interface of data.


On 2017-10-27 06:40, Josh Elser <[email protected]> wrote:

Hiya,

(Background: see HBASE-19002)

In trying to write some example Observers, I found myself in a pickle:
how do I tell if a Cell is a Put?

* Cell#getType() returns a byte which corresponds to a KeyValue.Type
* KeyValue.Type has API to convert a byte to Type
* KeyValue (and thus KeyValue.Type) is IA.Private
* DataType o.a.h.h.typesDataType _appears to me_ to be the replacement
for the KeyValue.Type

Best as I can tell, Cell#getType() should be deprecated and we should
have some kind of API (method on Cell or CellUtil) which returns a
DataType instead of Type. The details of the byte and the KeyValue.Type
should be hidden inside the implementation.

My hunch is that this is an accidental omission, but Stack recommended
that I "ask the class" ;). What have I missed? I think this is trivial
to fix; obviously, I don't want to make a fix if I just didn't look hard
enough.

Thanks!

- Josh



Reply via email to