On Sat, Aug 10, 2019 at 5:58 PM Andrew Purtell <[email protected]>
wrote:

> .... And yet it is also paranoia in this instance because we are talking
> specifically of WALkey annotations made ONCE and BEFORE commit. Warnings
> are duly noted and acknowledged!


ACK the instance of paranoia and the receipt of warning.

S


>
>
> > On Aug 10, 2019, at 4:50 PM, Sean Busbey <[email protected]> wrote:
> >
> > How much of that trouble around debug is a matter of us not doing enough
> to
> > make clear when change has happened due to a coprocessor?
> >
> > Heck it's hard enough just saying what coprocessors were active over a
> time
> > period on a running cluster. If we improved that would heavy coprocessor
> > use be less concerning?
> >
> >
> > For example, coprocessor actions could go into the audit log.
> >
> > Or in the case of the addition of coprocessor provided metadata about the
> > wal* we could track information about what added said metadata right in
> the
> > wall itself.
> >
> >
> >
> >> On Sat, Aug 10, 2019, 18:29 Stack <[email protected]> wrote:
> >>
> >>> On Fri, Aug 9, 2019 at 3:57 PM Geoffrey Jacoby <[email protected]>
> wrote:
> >>>
> >>>
> >>> You can't say "a mutable WALEdit is too dangerous" without making
> >>> assumptions about the developer it's too dangerous _for_. Ideally these
> >>> assumptions should be explicit and agreed upon by the community. I
> think
> >>> differing audience assumptions are where at least some of the
> >> disagreements
> >>> are coming from.
> >>>
> >>
> >> All sounds good but I have a bit of trouble with your using WALEdit in
> your
> >> illustration above.
> >>
> >> To be explicit, the reluctance exposing WAL{Edit,Key} is because when
> the
> >> system goes awry, from experience, debug is consuming. Errors in WAL*
> >> accounting are particularly hard to fathom because the problem shows up
> >> usually at a displacement in time and location (replay or on other end
> of a
> >> replication). Often the issue triggers only when large amounts of data.
> All
> >> WAL*s flow together whatever the source out the one firehose. The
> >> *assumption* is that a CP writer randomly mangling a WAL* that happens
> to
> >> break the cluster's recovery may not be around or game for the fun debug
> >> sessions required figuring root cause.
> >>
> >> <joke>We could add a Geoffrey Jacoby annotation on CP APIs?</joke>
> >>
> >> Thanks,
> >> S
> >>
> >>
> >>
> >>
> >> Geoffrey
> >>>
> >>>
> >>> On Fri, Aug 9, 2019 at 8:55 AM Andrew Purtell <
> [email protected]>
> >>> wrote:
> >>>
> >>>> The future of the coprocessor API is an interesting topic. I think we
> >>> have
> >>>> a range of opinions in the community and I would like to hear more of
> >>> them.
> >>>>
> >>>> Because of the compatibility headaches sometimes I’d like to rip them
> >>> out.
> >>>> Sometimes they are essential for accomplishing something in Phoenix or
> >>> our
> >>>> in house backup solution, for example. For me my opinion is very
> mixed.
> >>>>
> >>>> When first conceived the first use case was security and we took
> >>>> inspiration from OS kernel examples in Linux and TrustedBSD (now
> merged
> >>>> with FreeBSD) where upcall interfaces were made available where
> >>>> authoritative access control decisions are made. The set of hooks has
> >>>> expanded over time as users have requested extensions. This style of
> >>>> interface is powerful in that it enables a mixin approach to
> >> composition
> >>> of
> >>>> functionality and extension. However in retrospect the maintenance
> >>> burdens
> >>>> were not fully appreciated, at least by me. I had assumed we would be
> >>>> allowed more freedom to change but my experiences with Phoenix
> educated
> >>> me
> >>>> on the kind of downstream headaches that result when we make those
> >>> changes.
> >>>>
> >>>> If I were to do it again I would attempt an abstract and fluent
> >> interface
> >>>> where extensions would register intents and receive callbacks in a
> much
> >>>> more granular way, like:
> >>>>
> >>>>    onRegion().onRPC().onGet().then(...)
> >>>>
> >>>> I suppose this looks kind of like Mockito. There would be no overlarge
> >>>> interfaces full of upcall methods that break source compatibility on
> >>> every
> >>>> change (in branch-1). Although we could not avoid the complexity of
> >>>> ensuring the right callbacks are invoked at the right places on the
> >> right
> >>>> code paths the extension interface and its types would be decoupled
> >> from
> >>>> internals and the kind of compatibility headaches we impose on
> >>>> downstreamers (and ourselves) would mostly disappear. This has been
> >>>> proposed on an old JIRA somewhere...
> >>>>
> >>>> Of course a redo like this would be a very complex and time consuming
> >>>> project, and a port of say something like Phoenix would be a reboot of
> >>>> multi man year efforts, and as far as I know nobody working in the
> code
> >>>> today has that kind of sustained available time and attention. It’s
> too
> >>>> late. We have to make the best of the legacy of past engineering
> >> choices.
> >>>> If that is not correct then it would be a very pleasant surprise
> >> indeed.
> >>>>
> >>>> Given that we have the current model and we have downstreamers like
> >>>> Phoenix depending on them I think we are limited in the kind of clean
> >> ups
> >>>> we might like to do and need to be tolerant of the requirement to
> >>> maintain
> >>>> these interfaces and their functionally across major versions.
> >>> Deprecation
> >>>> is fine but if it is done without the input of the known consumer are
> >> we
> >>>> really being fair? Unclear.
> >>>>
> >>>>
> >>>>> On Aug 8, 2019, at 6:39 PM, 张铎(Duo Zhang) <[email protected]>
> >>> wrote:
> >>>>>
> >>>>> When releasing 2.0.0 we faced a lot of problems because we exposes so
> >>>> many
> >>>>> internal classes to CPs. It is really hard to both consider the
> >>>>> compatibility and development on HBase. And then we have done lots of
> >>>> works
> >>>>> to abstract interfaces for CPs to use and hide the actual
> >>> implementation
> >>>>> classes to be HBase only.
> >>>>>
> >>>>> The work is not fully done, so we still left some methods which
> >> exposes
> >>>>> internal classes there with a deprecated annotation, I think most of
> >>> them
> >>>>> are for Phoenix. This is a trade off and I think it is also
> >> acceptable.
> >>>>> Phoenix could still use the deprecated methods, and we will not
> >> remove
> >>>> them
> >>>>> unless we find an alternate solution. And I think if anyone wants to
> >>>> remove
> >>>>> them without replacment you will first jump out and give a -1 :)
> >>>>>
> >>>>> Specific to HBASE-22623, I still think we should add the deprecated
> >>>>> annotation to keep the API consistent, otherwise users will be
> >> confused
> >>>>> that whether they can use the WALEdit. And on the abstraction of
> >>>> WALEdit, I
> >>>>> think we used to rely on a high level abstraction in HBASE-20952. But
> >>> now
> >>>>> since there is little progress there, I think we can start the work
> >> of
> >>>>> abstracting WALEdit only.
> >>>>>
> >>>>> Thanks.
> >>>>>
> >>>>> Andrew Purtell <[email protected]> 于2019年8月9日周五 上午3:21写道:
> >>>>>
> >>>>>> Please let me direct your attention to the tail of HBASE-22623 for a
> >>>> larger
> >>>>>> discussion.  I tried to sum it up as follows:
> >>>>>>
> >>>>>> An opinion that we should have more and more coprocessor interfaces
> >> to
> >>>>>> address new use cases is valid. An opinion that coprocessors are too
> >>>>>> invasive and should be 'cleaned up' is also valid. An opinion that
> >> the
> >>>>>> compatibility headaches of coprocessor interfaces are annoying is
> >>>> valid. An
> >>>>>> opinion that Phoenix can be considered as a valid use case when
> >>>> considering
> >>>>>> interface changes is valid. An opinion that only HBase level
> >> concerns
> >>>>>> should motivate API changes is valid. These opinions are strawmen. I
> >>>> think
> >>>>>> they approach actual positions in the community but I do not imply
> >> any
> >>>>>> specific person has one of them. These strawmen are at least
> >> partially
> >>>>>> contradictory. It is going to be an ongoing process to sort them out
> >>>> into
> >>>>>> something that makes sense and can get consensus.
> >>>>>>
> >>>>>> So while as committer I am moving forward on HBASE-22623 because I
> >>> don't
> >>>>>> see a veto but instead a disagreement on the margins (deprecation or
> >>>> not)
> >>>>>> motivated on larger principles, I also want to raise the visibility
> >> of
> >>>> the
> >>>>>> disagreement because I think it impacts our relationship with
> >> another
> >>>>>> project at Apache at a minimum, but also future technical directions
> >>> of
> >>>> an
> >>>>>> important subset of interfaces.
> >>>>>>
> >>>>>> For your consideration.
> >>>>>>
> >>>>>> --
> >>>>>> Best regards,
> >>>>>> Andrew
> >>>>>>
> >>>>>> Words like orphans lost among the crosstalk, meaning torn from
> >> truth's
> >>>>>> decrepit hands
> >>>>>>  - A23, Crosstalk
> >>>>>>
> >>>>
> >>>
> >>
>

Reply via email to