The "custom cell type" never exists in the story. (Sorry for misleading you) 

Here is the story. i add some custom cells (for saving memory) to Put via 
Put#add(Cell). The pseudocode of custom cell is shown below.

{code}
class MyObject() {
  Cell toCell() {
      return CellBuilderFactory.newBuilfer(SHALLOW_COPY)
                    .setRow(sharedBuffer, myRowOffset, myRowLength).
                    .setType(KeyValue.Type.Put.getCode()) // We call the 
IA.Private to get valid code of Put
                    // set other fields
                    .build();
  }
}

put.add(myObject.toCell);
{code}

And then, I noticed the Put#add is not optimized for our heavy table(a chunk of 
cells in single row), so I also extend the Put to add some #add methods for 
avoiding resizing collection.

That was the story -- I try to reducer the cost of converting our object to 
Put/Cell. A another story i had mentioned is to build custom write path via 
Endpoint, but it is unrelated to this topic. 

All class we use are shown below:
1) Cell -> IA.Public
2) CellBuilder -> IA.Public
3) CellBuilderFactory -> IA.Public
4) Put -> IA.Public
5) Put#add(Cell) -> IA.Public
5) KeyValue#Type -> IA.Private

That is why i want to make KeyValue#Type IA.Public.

--
Chia-Ping

On 2017-10-01 00:34, Andrew Purtell <andrew.purt...@gmail.com> wrote: 
> Thanks for sharing these details. They are intriguing. If possible could you 
> explain why the custom type is needed? 
> 
> Something has to be deployed on the server or the custom cell type isn’t 
> guaranteed to be handled correctly. It may work now by accident. I’m a 
> little surprised a custom cell type doesn’t cause an abort. Did you patch 
> the code to handle it?
> 
> 
> > On Sep 30, 2017, at 1:06 AM, Chia-Ping Tsai <chia7...@apache.org> wrote:
> > 
> > Thanks for the nice suggestions. Andrew. Sorry for delay response. Busy 
> > today.
> > 
> > The root reason we must build own Cell on client side is that the data are 
> > located on shared memory which is similar with MSLAB.
> > 
> > You are right. We can use attribute to carry our data but the byte[] is not 
> > acceptable because we can’t assign the offset and length. In fact, the 
> > endpoint is a better way for our case because our object can be  directly 
> > converted to PB object. Also it is easy to apply shared memory to manage 
> > our object. However, it will be easier and more readable to follow regular 
> > Put operation. All we have to do is to build own cell and extended Put. 
> > Nothing have to be deployed on server.
> > 
> > I agree the custom cell is low level thing, and it should be used by 
> > advanced users. What I concern is the classes related to  custom Cell have 
> > different IA declaration. I’am fine to make them IA.Private but building 
> > the custom cell may be a common case.
> > 
> > — 
> > Chia-Ping
> > 
> >> On 2017-09-30 06:05, Andrew Purtell <apurt...@apache.org> wrote: 
> >> ​Construct a normal put or delete or batch mutation, add whatever extra
> >> state you need in one or more operation attributes, and use a
> >> regionobserver to extend normal processing to handle the extra state. I'm
> >> curious what dispatching to extension code because of a custom cell type
> >> buys you over dispatching to extension code because of the presence of an
> >> attribute (or cell tag). For example, in security coprocessors we take
> >> attribute data and attach it to the cell using cell tags. Later we check
> >> for cell tag(s) to determine if we have to take special action when the
> >> cell is accessed by a scanner, or during some operations (e.g. appends or
> >> increments have to do extra handling for cell security tags).
> >> 
> >> 
> >> On Fri, Sep 29, 2017 at 2:43 PM, Chia-Ping Tsai <chia7...@apache.org> 
> >> wrote:
> >> 
> >>>> Instead of a custom cell, could you use a regular cell with a custom
> >>>> operation attribute (see OperationWithAttributes).
> >>> Pardon me, I didn't get what you said.
> >>> 
> >>> 
> >>> 
> >>>> On 2017-09-30 04:31, Andrew Purtell <apurt...@apache.org> wrote:
> >>>> Instead of a custom cell, could you use a regular cell with a custom
> >>>> operation attribute (see OperationWithAttributes).
> >>>> 
> >>>> On Fri, Sep 29, 2017 at 1:28 PM, Chia-Ping Tsai <chia7...@apache.org>
> >>> wrote:
> >>>> 
> >>>>> The custom cell help us to save memory consumption. We don't have own
> >>>>> serialization/deserialization mechanism, hence to transform data from
> >>>>> client to server needs many conversion phase (user data -> Put/Cell ->
> >>> pb
> >>>>> object). The cost of conversion is large in transferring bulk data. In
> >>>>> fact, we also have custom mutation to manage the memory usage of inner
> >>> cell
> >>>>> collection.
> >>>>> 
> >>>>>> On 2017-09-30 02:43, Andrew Purtell <apurt...@apache.org> wrote:
> >>>>>> What are the use cases for a custom cell? It seems a dangerously low
> >>>>> level
> >>>>>> thing to attempt and perhaps we should unwind support for it. But
> >>> perhaps
> >>>>>> there is a compelling justification.
> >>>>>> 
> >>>>>> 
> >>>>>> On Thu, Sep 28, 2017 at 10:20 PM, Chia-Ping Tsai <
> >>> chia7...@apache.org>
> >>>>>> wrote:
> >>>>>> 
> >>>>>>> Thanks for all comment.
> >>>>>>> 
> >>>>>>> The problem i want to resolve is the valid code should be exposed
> >>> as
> >>>>>>> IA.Public. Otherwise, end user have to access the IA.Private class
> >>> to
> >>>>> build
> >>>>>>> the custom cell.
> >>>>>>> 
> >>>>>>> For example, I have a use case which plays a streaming role in our
> >>>>>>> appliaction. It
> >>>>>>> applies the CellBuilder(HBASE-18519) to build custom cells. These
> >>> cells
> >>>>>>> have many same fields so they are put in shared-memory for
> >>> avoiding GC
> >>>>>>> pause. Everything is wonderful. However, we have to access the
> >>>>> IA.Private
> >>>>>>> class - KeyValue#Type - to get the valid code of Put.
> >>>>>>> 
> >>>>>>> I believe there are many use cases of custom cell, and
> >>> consequently it
> >>>>> is
> >>>>>>> worth adding a way to get the valid type via IA.Public class.
> >>>>> Otherwise, it
> >>>>>>> may imply that the custom cell is based on a unstable way, because
> >>> the
> >>>>>>> related code can be changed at any time.
> >>>>>>> --
> >>>>>>> Chia-Ping
> >>>>>>> 
> >>>>>>>> On 2017-09-29 00:49, Andrew Purtell <apurt...@apache.org> wrote:
> >>>>>>>> I agree with Stack. Was typing up a reply to Anoop but let me
> >>> move it
> >>>>>>> down
> >>>>>>>> here.
> >>>>>>>> 
> >>>>>>>> The type code exposes some low level details of how our current
> >>>>> stores
> >>>>>>> are
> >>>>>>>> architected. But what if in the future you could swap out HStore
> >>>>>>> implements
> >>>>>>>> Store with PStore implements Store, where HStore is backed by
> >>> HFiles
> >>>>> and
> >>>>>>>> PStore is backed by Parquet? Just as a hypothetical example. I
> >>> know
> >>>>> there
> >>>>>>>> would be larger issues if this were actually attempted. Bear with
> >>>>> me. You
> >>>>>>>> can imagine some different new Store implementation that has some
> >>>>>>>> advantages but is not a design derived from the log structured
> >>> merge
> >>>>> tree
> >>>>>>>> if you like. Most values from a new Cell.Type based on
> >>> KeyValue.Type
> >>>>>>>> wouldn't apply to cells from such a thing because they are
> >>>>> particular to
> >>>>>>>> how LSMs work. I'm sure such a project if attempted would make a
> >>>>> number
> >>>>>>> of
> >>>>>>>> changes requiring a major version increment and low level details
> >>>>> could
> >>>>>>> be
> >>>>>>>> unwound from Cell then, but if we could avoid doing it in the
> >>> first
> >>>>>>> place,
> >>>>>>>> I think it would better for maintainability.
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>>> On Thu, Sep 28, 2017 at 9:39 AM, Stack <st...@duboce.net> wrote:
> >>>>>>>>> 
> >>>>>>>>> On Thu, Sep 28, 2017 at 2:25 AM, Chia-Ping Tsai <
> >>>>> chia7...@apache.org>
> >>>>>>>>> wrote:
> >>>>>>>>> 
> >>>>>>>>>> hi folks,
> >>>>>>>>>> 
> >>>>>>>>>> User is allowed to create custom cell but the valid code of
> >>> type
> >>>>> -
> >>>>>>>>>> KeyValue#Type - is declared as IA.Private. As i see it, we
> >>> should
> >>>>>>> expose
> >>>>>>>>>> KeyValue#Type as Public Client. Three possible ways are shown
> >>>>> below:
> >>>>>>>>>> 1) Change declaration of KeyValue#Type from IA.Private to
> >>>>> IA.Public
> >>>>>>>>>> 2) Move KeyValue#Type into Cell.
> >>>>>>>>>> 3) Move KeyValue#Type to upper level
> >>>>>>>>>> 
> >>>>>>>>>> Any suggestions?
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>> What is the problem that we are trying to solve Chia-Ping? You
> >>>>> want to
> >>>>>>> make
> >>>>>>>>> Cells of a new Type?
> >>>>>>>>> 
> >>>>>>>>> My first reaction is that KV#Type is particular to the KV
> >>>>>>> implementation.
> >>>>>>>>> Any new Cell implementation should not have to adopt the
> >>> KeyValue
> >>>>>>> typing
> >>>>>>>>> mechanism.
> >>>>>>>>> 
> >>>>>>>>> S
> >>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>>>> --
> >>>>>>>>>> Chia-Ping
> >>>>>>>>>> 
> >>>>>>>>>> 
> >>>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> 
> >>>>>>>> --
> >>>>>>>> Best regards,
> >>>>>>>> Andrew
> >>>>>>>> 
> >>>>>>>> Words like orphans lost among the crosstalk, meaning torn from
> >>>>> truth's
> >>>>>>>> decrepit hands
> >>>>>>>>   - A23, Crosstalk
> >>>>>>>> 
> >>>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> 
> >>>>>> --
> >>>>>> Best regards,
> >>>>>> Andrew
> >>>>>> 
> >>>>>> Words like orphans lost among the crosstalk, meaning torn from
> >>> truth's
> >>>>>> decrepit hands
> >>>>>>   - A23, Crosstalk
> >>>>>> 
> >>>>> 
> >>>> 
> >>>> 
> >>>> 
> >>>> --
> >>>> Best regards,
> >>>> Andrew
> >>>> 
> >>>> Words like orphans lost among the crosstalk, meaning torn from truth's
> >>>> decrepit hands
> >>>>   - A23, Crosstalk
> >>>> 
> >>> 
> >> 
> >> 
> >> 
> >> -- 
> >> Best regards,
> >> Andrew
> >> 
> >> Words like orphans lost among the crosstalk, meaning torn from truth's
> >> decrepit hands
> >>   - A23, Crosstalk
> >> 
> 

Reply via email to