Looks like the discussion is settled down. I am moving forward to putting
this proposal to a vote.

Regards,
Branimir

On Mon, Nov 15, 2021 at 7:28 PM David Capwell <dcapw...@apple.com.invalid>
wrote:

> Works for me
>
> > On Nov 15, 2021, at 4:21 AM, Jacek Lewandowski <
> lewandowski.ja...@gmail.com> wrote:
> >
> > I'd put it another way - the scope is to make it possible to provide a
> new
> > implementation of sstable format without the necessity to refactor
> > Cassandra code. It implies a contract about the responsibilities of
> sstable
> > format implementation so that the rest of the code can rely on that, and
> > only on that, and do not make assumptions beyond that. But it does not
> > claim that the created interfaces will not change even with a minor
> version
> > release. When those interfaces are around for sometime, we can start a
> > separate discussion about whether we want to put some guarantees on them.
> >
> > - - -- --- ----- -------- -------------
> > Jacek Lewandowski
> >
> >
> > On Wed, Nov 10, 2021 at 9:01 PM David Capwell <dcapw...@apple.com.invalid
> >
> > wrote:
> >
> >> If this gets descoped to test only (can break all interfaces in a minor)
> >> then my support concerns are no longer valid; I am cool with the CEP
> scoped
> >> only to improving testing
> >>
> >>> On Nov 10, 2021, at 11:20 AM, Jacek Lewandowski <
> >> lewandowski.ja...@gmail.com> wrote:
> >>>
> >>> For the other ticket (schema update handler interface) I was also
> >> proposing
> >>> a kind of @DeveloperApi annotation as seen in other projects but
> >> similarly
> >>> to this thread there were different opinions and no conclusion. After
> >>> reading the comments I must agree that perhaps it is way too early to
> >> mark
> >>> this interface as stable. Perhaps it was too far-fetched to say it
> would
> >> be
> >>> for people who wished to replace the SSTable format. My focus is
> >>> primarily on cleaning up the code (modularization and clean contracts)
> >> and
> >>> making it possible to introduce a new format in the future while
> allowing
> >>> us to maintain the old format (no "if then else" approach)
> >>>
> >>> - - -- --- ----- -------- -------------
> >>> Jacek Lewandowski
> >>>
> >>>
> >>> On Wed, Nov 10, 2021 at 12:53 AM bened...@apache.org <
> >> bened...@apache.org>
> >>> wrote:
> >>>
> >>>>> I may be wrong here, but the CEP directly calls out making this api
> >>>> public for people who wish to replace the SSTable format
> >>>>
> >>>> I don’t think this implies API stability. For starters, it doesn’t
> >>>> stipulate that these implementations will be supported out of tree
> (the
> >>>> only one I’m aware of, so far as I understand, is intended to be
> >> incubated
> >>>> in tree), nor does an API for external usage have to be stable. It’s
> >> fine
> >>>> to create an API and tell users it’s unstable, and that they should
> >> closely
> >>>> monitor patch version changes if they use it.
> >>>>
> >>>> That said, norms may be changing around what can go into patch
> releases
> >>>> anyhow, so this may be a lot of noise about nothing. If all new
> >> development
> >>>> goes into trunk, then it’s all moot. But I don’t think we can make
> hard
> >>>> assumptions about that today, as historically these sorts of
> intentions
> >>>> haven’t lasted.
> >>>>
> >>>> I’m fairly against the idea of introducing hard restrictions on this,
> >> and
> >>>> potentially ossifying the codebase. I’m not keen to even consider out
> of
> >>>> tree consumers of these APIs in any way, for compatibility,
> >> upgradeability
> >>>> or anything. There’s a lot that needs to be done over the coming years
> >> to
> >>>> improve the internal structure of the project, and unduly entrenching
> >> the
> >>>> current state of affairs would be a huge potential harm of these
> >> efforts to
> >>>> modularise the codebase.
> >>>>
> >>>> From: David Capwell <dcapw...@apple.com.INVALID>
> >>>> Date: Tuesday, 9 November 2021 at 23:38
> >>>> To: dev@cassandra.apache.org <dev@cassandra.apache.org>
> >>>> Subject: Re: [DISCUSS] CEP-17: SSTable format API (CASSANDRA-17056)
> >>>>> My understanding is that the only interface that is expected to be
> >>>> stable for external consumers is the secondary index API
> >>>>
> >>>> I may be wrong here, but the CEP directly calls out making this api
> >> public
> >>>> for people who wish to replace the SSTable format ("Cassandra
> developers
> >>>> who want to develop and publish different file format
> >> implementations."),
> >>>> so if we need to support 2i API, why would we not support SSTable API
> as
> >>>> well?
> >>>>
> >>>>> All of the other mentioned APIs are in my opinion for internal usage
> >> only
> >>>>
> >>>> This gets back to my point; it is currently tribal knowledge what
> needs
> >> to
> >>>> work and what doesn’t, and without the broader set of committers
> knowing
> >>>> this then the likely hood any new API will break in a minor is high.
> >>>>
> >>>>> On Nov 9, 2021, at 12:13 PM, bened...@apache.org wrote:
> >>>>>
> >>>>> I agree that we don’t need to block the CEP on this, and that we
> should
> >>>> have that discussion. But it’s worth noting that the CEP should not
> >>>> anticipate or depend on any specific outcome of that discussion.
> >>>>>
> >>>>> Since it is somewhat relevant for this discussion, my view is that no
> >>>> interface should be assumed to be stable without the prior explicit
> >>>> agreement of the community.
> >>>>>
> >>>>> My understanding is that the only interface that is expected to be
> >>>> stable for external consumers is the secondary index API. Perhaps also
> >>>> snitches? But also perhaps not, as the difficulty of upgrading these
> at
> >> the
> >>>> same time is pretty low for custom snitches. All of the other
> mentioned
> >>>> APIs are in my opinion for internal usage only, so users should not
> >> assume
> >>>> compile time compatibility across any release, and I am certain we
> have
> >>>> never tried to maintained this. This still facilitates forks of
> course,
> >> by
> >>>> localising the compatibility work.
> >>>>>
> >>>>>
> >>>>> From: Jeremiah D Jordan <jeremiah.jor...@gmail.com>
> >>>>> Date: Tuesday, 9 November 2021 at 19:43
> >>>>> To: Cassandra DEV <dev@cassandra.apache.org>
> >>>>> Subject: Re: [DISCUSS] CEP-17: SSTable format API (CASSANDRA-17056)
> >>>>> I would love to have this discussion and setup annotations or similar
> >> to
> >>>> formalize things.  I just do not think we need to hold any up CEPs to
> do
> >>>> so.  That discussion should possibly be a CEP of its own proposing how
> >> we
> >>>> want to formalize interfaces?  I would be happy to go through and try
> to
> >>>> put together something for that or since you feel so strongly about it
> >>>> maybe you want to David?  At the very least it should get its own
> >> DISCUSS
> >>>> thread and then be written up in the wiki.
> >>>>>
> >>>>> -Jeremiah
> >>>>>
> >>>>>> On Nov 9, 2021, at 1:06 PM, Joshua McKenzie <jmcken...@apache.org>
> >>>> wrote:
> >>>>>>
> >>>>>>>
> >>>>>>> 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
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>>>> 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