>
> trunk -> anything goes, not trunk -> try not to change these interfaces

Have we ever clarified what "these interfaces" are? Was just talking to
David and I realized I didn't even JavaDoc CommitLogReadHandler as _being
designed_ for external usage. /sigh

I think it'd be valuable for us to go through the codebase and annotate
interfaces as intended to be exposed to 3rd parties; this has bothered me
for years. Especially as we come up on a large number of new cleanups,
refactorings, and potentially genericizing some subsystems into API's
(CEP-18 descendents).


On Tue, Nov 9, 2021 at 2:01 PM David Capwell <dcapw...@apple.com.invalid>
wrote:

> > We already have many interfaces similar to these for Compaction
> Strategy, Indexing, Query Handler.
>
> Today-I-Learned QueryHandler is not allowed to be touched in a minor… good
> to know…
>
> > not trunk -> try not to change these interfaces
>
> Outside of MBeans, I honestly do not know what interfaces fall into this
> group; and for MBeans we have tests which block breaking changes.  The
> point I am making is that not everyone is aware of the rules, so having
> something in place to help enforce such rules should be thought about; if
> we want to add pluggable hooks with the intent that external parties can
> leverage such hooks, we should also add to the scope the maintenance of
> these interfaces (we should not assume “tribal knowledge” will work).
>
> I am not trying to ask for something large or something requiring a ton of
> work, I am just asking that this gets thought about during the project so
> it doesn’t get neglected.  This could be as simple as an annotation like
> @ExposedTo3rdParties (Hadoop does this to show an interface is exposed and
> must be maintained), or it could be something like split directories
> (src/java = private, src/java-exposed = public); I am trying not to dictate
> an implementation, only trying to make sure we are setup to support the CEP
> after the work is done.
>
>
> > On Nov 9, 2021, at 9:52 AM, Jeremiah D Jordan <jeremiah.jor...@gmail.com>
> wrote:
> >
> > We already have many interfaces similar to these for Compaction
> Strategy, Indexing, Query Handler.  I would hope that commiters are already
> following a policy along the lines of trunk -> anything goes, not trunk ->
> try not to change these interfaces.  I would expect that to be the same
> policy for any new internal interfaces that are added.  But given we
> already have many such interfaces, I see no reason to block adding more of
> them while change policies are discussed.
> >
> > -Jeremiah
> >
> >> On Nov 9, 2021, at 10:44 AM, David Capwell <dcapw...@apple.com.INVALID>
> wrote:
> >>
> >> I still have one outstanding comment, but this is a comment for several
> of the CEPs being worked on
> >>
> >>> And last comment, which I have also done in the other modularity
> thread… backwards compatibility and maintenance. It is not clear right now
> what java interfaces may not break and how we can maintain and extend such
> interfaces in the future.  If the goal is to allow 3rd parties to plugin
> and offer new SSTable formats, are we as a project ok with having a minor
> release do a binary or source non-compatible change?  If not how do we
> detect this?  Until this problem is solved, I do not think we should add
> any such interfaces.
> >>
> >> I would love some clarity on this.  Specifically, if we assume a patch
> author/reviewers are not familiar with the impact of changes these
> interfaces, what happens?  Do we have tools to block this? Do we require
> 3rd party authors to create massive shims to deal with every patch level
> version out there?  I would love more clarity on how we maintain these new
> pluggable interfaces.
> >>
> >>> On Nov 9, 2021, at 4:45 AM, Branimir Lambov <blam...@apache.org>
> wrote:
> >>>
> >>> Does anyone have any further comments or questions on the proposal, or
> are
> >>> we ready to  move forward to a vote?
> >>>
> >>> Regards,
> >>> Branimir
> >>>
> >>> On Tue, Nov 2, 2021 at 7:15 PM David Capwell
> <dcapw...@apple.com.invalid>
> >>> wrote:
> >>>
> >>>>> I apologize I did not mention those things explicitly. All the places
> >>>> where
> >>>>> sstable files are accessed directly would have to be refactored.
> >>>>
> >>>> Works for me
> >>>>
> >>>>> Speaking about the implementation, one idea I was thinking about was
> that
> >>>>> the factories for formats are registered using Java's native service
> >>>>> loader.
> >>>>
> >>>> I am a fan of ServiceLoader as a means of plugging in.
> >>>>
> >>>>> I hope this explains a bit
> >>>>
> >>>> Yep; thanks!
> >>>>
> >>>>> On Nov 2, 2021, at 1:46 AM, Jacek Lewandowski <
> >>>> lewandowski.ja...@gmail.com> wrote:
> >>>>>
> >>>>> David,
> >>>>>
> >>>>> I apologize I did not mention those things explicitly. All the places
> >>>> where
> >>>>> sstable files are accessed directly would have to be refactored.
> >>>>>
> >>>>> Regarding TableMetrics - currently it includes many metrics, some of
> them
> >>>>> are unrelated to sstables at all, but there are metrics which are
> >>>> specific
> >>>>> to the current sstable format, like metrics related to index
> summaries or
> >>>>> bloom filters. The created gauges query certain methods on sstable
> >>>> reader -
> >>>>> I think the only common metrics for sstables we can leave in
> TableMetrics
> >>>>> are those for which there are query methods in generic sstable
> interface.
> >>>>> Other metrics, specific to the certain sstable format should be
> >>>> registered
> >>>>> by the implementation itself.
> >>>>>
> >>>>> Speaking about the implementation, one idea I was thinking about was
> that
> >>>>> the factories for formats are registered using Java's native service
> >>>>> loader. This way we could get the list of all the factories on the
> >>>>> classpath and call some method, like `registerMetrics` during system
> >>>>> initialization. That could be also implemented in static initializer
> in
> >>>> the
> >>>>> factory but it would make it less obvious for the implementors where
> such
> >>>>> initialization should be done.
> >>>>>
> >>>>> I hope this explains a bit
> >>>>>
> >>>>> Thanks,
> >>>>> Jacek
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org
> >>>> For additional commands, e-mail: dev-h...@cassandra.apache.org
> >>>>
> >>>>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org
> >> For additional commands, e-mail: dev-h...@cassandra.apache.org
> >>
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org
> > For additional commands, e-mail: dev-h...@cassandra.apache.org
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@cassandra.apache.org
> For additional commands, e-mail: dev-h...@cassandra.apache.org
>
>

Reply via email to