Hey John,

in the Public interface section, you mentioned `Do not add the new
interface to JoinWindows, which should not be part of this hierarchy`,
could you explain a bit why and what's the plan with JoinWindows?

On Tue, Jul 28, 2020 at 12:50 PM Sophie Blee-Goldman <sop...@confluent.io>
wrote:

> Awesome, thanks for looking into the Window improvements as well!
> (And I'm sorry I brought this upon you). I hope it's not too painful to get
> everything in the Windows ecosystem looking good and reasonable,
> and the benefits are pretty clear.
>
> Haven't had a careful look through the POC yet but the proposal and
> public changes you described sound great. Thanks for the KIP!
>
> On Tue, Jul 28, 2020 at 10:27 AM John Roesler <vvcep...@apache.org> wrote:
>
> > Hi Sophie,
> >
> > A quick update: I've pushed a commit to the POC PR
> > that includes the migration of Window to become a
> > data class instead of an abstract class. It's quite a bit
> > of code, but it does look like there is a clean
> > deprecation/migration path.
> >
> > The basic idea is that we drop the "abstract" modifier
> > from Window an deprecate its constructor. We add
> > a public static `Window.withBounds(start,end)` to
> > replace the constructor.
> >
> > Because the constructor is deprecated, existing
> > subclasses will continue to compile, but receive
> > a deprecation warning.
> >
> > We'd also slightly modify EnumerableWindowDefinition
> > to _not_ be a parameterized class and instead
> > update windowsFor like this:
> > <W extends Window> Map<Long, W> windowsFor(final long timestamp)
> >
> > Then, any existing caller that expects to get back
> > a subclass of windows during the deprecation period
> > would still get a valid return. For example, if you
> > had a custom window definition, and you
> > invoke this method in your tests, assigning it to a
> > subclass of Window, all your code would still compile,
> > but you would get deprecation warnings.
> >
> > After the deprecation period, we could migrate Window
> > to be a final class with a private constructor safely.
> >
> > If that sounds reasonable to you, I can update the
> > KIP accordingly.
> >
> > Thanks,
> > -John
> >
> > On Mon, Jul 27, 2020, at 22:11, John Roesler wrote:
> > > Thanks for the reply, Sophie.
> > >
> > > Yes, I'd neglected to specify that Windows will implement maxSize()
> > > by delegating to size(). It's updated now. I'd also neglected to say
> that
> > > I plan to alter both windowBy methods to use the new interface now.
> > > Because Windows will implement the new interface, all implementations
> > > will continue to work with windowBy.
> > > So, yes, there are public methods changed, but no compatibility issues
> > > arise. Existing implementations will only get a deprecation warning.
> > >
> > > The Window type is interesting. It actually seems to serve as just a
> data
> > > container. It almost doesn't need to be subclassed at all, since all
> > > implementations would just need to store the start and end bounds.
> > > As far as I can tell, the only purpose to subclass it is to implement
> > > "overlap(Window other)", to tell if the window is both the same type
> > > as and overlaps with the other window. But weirdly, this is unused
> > > in the codebase.
> > >
> > > So one way we could go is to try and migrate it to just a final class,
> > > effectively a tuple of `(start, end)`.
> > >
> > > However, another opportunity is to let it be a witness of the actual
> type
> > > of the window, so that you wouldn't be able to join a TimeWindow
> > > with a SessionWindow, for example.
> > >
> > > However, because of covariance, it's more painful to change Window
> > > than Windows, so it might not be worth it right now. If anything, it
> > > would be more feasible to migrate toward the "simple data container"
> > > approach. What are your thoughts?
> > >
> > > Thanks,
> > > -John
> > >
> > >
> > > On Mon, Jul 27, 2020, at 18:19, Sophie Blee-Goldman wrote:
> > > > Thanks for taking the time to really fill in the background details
> for
> > > > this KIP.
> > > > The Motivation section is very informative. Hopefully this will also
> > serve
> > > > as a
> > > > warning against making similar such mistakes in the future :P
> > > >
> > > > I notice that the `Window` class that
> > > > parametrizes EnumerableWindowDefinition
> > > > is also abstract. Did you consider migrating that to an interface as
> > well?
> > > >
> > > > Also, pretty awesome that we can solve the issue with varying fixed
> > sized
> > > > windows
> > > > (eg calendar months) on the side. For users who may have already
> > extended
> > > > Windows,
> > > > do you plan to just have Windows implement the new #maxSize method
> and
> > > > return the existing
> > > > size until Windows gets removed?
> > > >
> > > > One final note: this seems to be implicitly implied throughout the
> KIP
> > but
> > > > just to be clear,
> > > > you will be replacing any DSL methods that accept Windows with
> > identical
> > > > DSL methods
> > > > that take the new EnumerableWindowDefinition as argument. So there is
> > > > nothing deprecated
> > > > and nothing added, but there are public methods changed. Is that
> right?
> > > >
> > > > On Sun, Jul 26, 2020 at 1:23 PM John Roesler <vvcep...@apache.org>
> > wrote:
> > > >
> > > > > Thanks Sophie and Boyang for asking for specifics.
> > > > >
> > > > > As far as I can tell, if we were to _remove_ all the
> > non-public-method
> > > > > members from Windows, including any constructors, we are left with
> > > > > effectively an interface. I think this was my plan before. I don't
> > think
> > > > > I realized at the time that it's possible to replace the entire
> > class with
> > > > > an interface. Now I realize it is possible, hence the motivation to
> > do it.
> > > > >
> > > > > We can choose either to maintain forever the tech debt of having to
> > > > > enforce that Windows look, sound, and act just like an interface,
> or
> > we
> > > > > can just replace it with an interface and be done with it. I.e.,
> the
> > > > > motivation is less maintenence burden for us and for users.
> > > > >
> > > > > Coincidentally, I had an interesting conversation with Matthias
> about
> > > > > this interface, and he made me realize that "fixed size" isn't the
> > > > > essential
> > > > > nature of this entity. Instead being enumerable is. Reframing the
> > interface
> > > > > in this way will enable us to implement variable sized windows like
> > > > > MonthlyWindows.
> > > > >
> > > > > So, now there are two good reasons to vote for this KIP :)
> > > > >
> > > > > Anyway, I've updated the proposed interface and the motivation.
> > > > >
> > > > > To Sophie latter question, all of the necessary deprecation is
> listed
> > > > > in the KIP. We do not have to deprecate any windowBy methods.
> > > > >
> > > > > Thanks,
> > > > > -John
> > > > >
> > > > > On Sat, Jul 25, 2020, at 00:52, Boyang Chen wrote:
> > > > > > Thanks for the KIP John. I share a similar concern with the
> > motivation,
> > > > > it
> > > > > > would be good if you could cast light on the actual downside of
> > using a
> > > > > > base class vs the interface, is it making the code fragile, or
> > requiring
> > > > > > redundant implementation, etc.
> > > > > >
> > > > > > Boyang
> > > > > >
> > > > > > On Tue, Jul 21, 2020 at 2:19 PM Sophie Blee-Goldman <
> > sop...@confluent.io
> > > > > >
> > > > > > wrote:
> > > > > >
> > > > > > > Hey John,
> > > > > > >
> > > > > > > Thanks for the KIP. I know this has been bugging you :)
> > > > > > >
> > > > > > > That said, I think the KIP is missing some elaboration in the
> > > > > Motivation
> > > > > > > section.
> > > > > > > You mention a number of problems we've had and lived with in
> the
> > past
> > > > > --
> > > > > > > could
> > > > > > > you give an example of one, and how it would be solved by your
> > > > > proposal?
> > > > > > >
> > > > > > > By the way, I assume we would also need to deprecate all APIs
> > that
> > > > > accept a
> > > > > > > Windows
> > > > > > > parameter in favor of new ones that accept a
> > > > > FixedSizeWindowDefinition? Off
> > > > > > > the
> > > > > > > top of my head that would be the windowedBy methods in
> > KGroupedStream
> > > > > and
> > > > > > > CogroupedKStream
> > > > > > >
> > > > > > > On Tue, Jul 21, 2020 at 1:46 PM John Roesler <
> > vvcep...@apache.org>
> > > > > wrote:
> > > > > > >
> > > > > > > > Hello all,
> > > > > > > >
> > > > > > > > I'd like to propose KIP-645, to correct a small API mistake
> in
> > > > > Streams.
> > > > > > > > Fixing this now allows us to avoid perpetuating the mistake
> in
> > new
> > > > > work.
> > > > > > > > For example, it will allow us to implement KIP-450 cleanly.
> > > > > > > >
> > > > > > > > The change itself should be seamless for users.
> > > > > > > >
> > > > > > > > Please see https://cwiki.apache.org/confluence/x/6SN4CQ for
> > details.
> > > > > > > >
> > > > > > > > Thanks,
> > > > > > > > -John
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> >
>

Reply via email to