Thanks everyone for voting.

Voting passed with the following +1s:

- Luke Chen
- Guozhang Wang (binding)
- John Roesler (binding)
- Bruno Cadonna (binding)

I'll update the KIP status accordingly.

Best,
  Patrick

On Thu, Dec 16, 2021 at 2:09 PM Bruno Cadonna <cado...@apache.org> wrote:

> Hi Partick,
>
> Thank you for the KIP!
>
> +1 (binding)
>
> Best,
> Bruno
>
> On 16.12.21 07:22, Luke Chen wrote:
> > Hi Patrick, John,
> >
> > Thanks for your explanation and update.
> > It looks better now.
> >
> > +1 (non-binding) from me.
> >
> > just one minor comment:
> > 10. In the example section, we are still using the variable names `lower`
> > and `upper` as before. We should update them, too. (follow the decision
> for
> > point 7 above)
> >
> > Thank you.
> > Luke
> >
> > On Thu, Dec 16, 2021 at 3:34 AM Guozhang Wang <wangg...@gmail.com>
> wrote:
> >
> >> Thanks Patrick, John.
> >>
> >> I read through the updated KIP and it's much cleared on the scope now,
> >> appreciate that! I'm +1 overall, modulo a few minor comments:
> >>
> >> 7. The parameter names of `WindowKeyQuery#withKeyAndWindowStartRange`,
> i.e.
> >> `startTime` and `endTime` seem not updated; also for the parameter
> names of
> >> `WindowRangeQuery#withWindowStartRange`, the `earliest / latest` seems
> >> inconsistent with the existing API parameter names, how about naming
> both
> >> of them `fromWindowStartTime` and `toWindowStartTime`?
> >>
> >> 8.  `getStartTime / getEndTime` are not updated as well: should they be
> >> `getEarliestWindowStartTime` / `getLatestWindowStartTime` or `getFrom...
> >> getTo...` if you agree with 7) above?
> >>
> >> 9. "One reason we cannot use WindowKeyQuery to support
> >> SessionStore.fetch(key)": not sure I understand this part, for the new
> APIs
> >> we do not need to be following the old API's return types since they are
> >> separated, right? So if we think it's actually better for the new API
> >> mimicing `sessionStore.fetch(key)` to return a `WindowStoreIterator<V>`,
> >> why can't we just do that?
> >>
> >>
> >> Guozhang
> >>
> >> On Wed, Dec 15, 2021 at 8:49 AM John Roesler <vvcep...@apache.org>
> wrote:
> >>
> >>> FYI, I filed this follow-on task to explore a more general
> >>> pattern for these queries:
> >>> https://issues.apache.org/jira/browse/KAFKA-13548
> >>>
> >>> We can unblock the current scope for these queries but still
> >>> plan to revisit the API before the first release of IQv2.
> >>>
> >>> Thanks!
> >>> -John
> >>>
> >>> On Wed, 2021-12-15 at 10:34 -0600, John Roesler wrote:
> >>>> Thanks for the update, Patrick!
> >>>>
> >>>> Tl;dr: I'm +1 (binding)
> >>>>
> >>>> I just reviewed the KIP again (I hope you don't mind, I
> >>>> fixed a couple of missed renames in the text and examples).
> >>>>
> >>>> One of the design of IQv2 is to make proposing and evolving
> >>>> these queries much less onerous. Unlike adding new methods
> >>>> to all StateStore interfaces and implementations, if we want
> >>>> to make (eg) the WindowRangeQuery more flexible in the
> >>>> future, we can easily do so by just adding some builder
> >>>> methods to set the bounds independently, or by adding new
> >>>> static methods to provide different parameterizations.
> >>>>
> >>>> Therefore, even though this is not the ultimate expression
> >>>> of what we think the range queries should be, it's a
> >>>> perfectly fine starting point. The most pressing concerns to
> >>>> me were the cases where Luke and Guozhang pointed out that
> >>>> some parts of the proposal or interfaces were ambiguous,
> >>>> which looks like it's fixed now.
> >>>>
> >>>> My preference would be to go ahead and accept this proposed
> >>>> scope so that we have at least some basic key-value, window,
> >>>> and session store queries in the code base. Until we have
> >>>> those MVP queries in place, we can't really start to address
> >>>> higher-level follow-up items like:
> >>>> https://issues.apache.org/jira/browse/KAFKA-13541 (to refine
> >>>> how the serdes interplay with the queries) or
> >>>> https://issues.apache.org/jira/browse/KAFKA-13541 (to
> >>>> consider alternative ways to pin down the generic type
> >>>> parameters better).
> >>>>
> >>>> Anyway, for the current version of the KIP, my vote is +1
> >>>> (binding).
> >>>>
> >>>> Thanks again!
> >>>> -John
> >>>>
> >>>> On Wed, 2021-12-15 at 12:53 +0100, Patrick Stuedi wrote:
> >>>>> Thanks everyone for the sharing comments and suggestions, this is
> >>>>> very helpful!
> >>>>>
> >>>>> I have updated the KIP based on the suggestions, please let me know
> >>> what
> >>>>> you think. Here are the main changes:
> >>>>> - Removed constructor in WindowRangeQuery (Guozhang)
> >>>>> - Clearly specified how each of the instantiation of the different
> >>> query
> >>>>> types maps to specific operations in WindowStore and SessionStore
> >>> (Guozhang)
> >>>>> - Renamed the window start end time parameters and getter methods
> >>> (Luke)
> >>>>> - Added some comments on the use of WindowRangeQuery.fromKey
> >> (Guozhang,
> >>>>> John)
> >>>>>
> >>>>> The KIP currently takes a minimalist approach to move things forward.
> >>> There
> >>>>> are two follow ups I can think of from this KIP:
> >>>>> * Add additional parameter combinations to WindowRangeQuery, e.g.,
> >>> support
> >>>>> for key range with and without window ranges.
> >>>>> * Remove WindowRangeQuery.fromKey and either use
> >>>>> WindowKeyQuery.withKeyAndWindowBounds or add a new call like
> >>>>> WindowKeyQuery.withKeyAndNoWindowBounds(): either way that would then
> >>> raise
> >>>>> the question which operation in WindowStore this query should map to,
> >>> given
> >>>>> that WindowKeyQuery is templated against WindowStoreIterator and the
> >>>>> current use of WindowRangeQuery.fromKey is to call SessionStore.fetch
> >>> which
> >>>>> returns a KeyValueIterator.
> >>>>> * Combine WindowKeyQuery and WindowRangeQuery, e.g., by exposing the
> >>>>> template type
> >>>>> * Create a "Builder" interface for the query types to avoid blowing
> >> up
> >>> the
> >>>>> static methods.
> >>>>>
> >>>>> Since I think any of those tasks will require some more discussion,
> >>> and in
> >>>>> the interest of being pragmatic here, I suggest we defer those
> >>>>> optimizations to future KIPs.
> >>>>>
> >>>>> Best,
> >>>>>    Patrick
> >>>>>
> >>>>> On Tue, Dec 14, 2021 at 1:02 AM Guozhang Wang <wangg...@gmail.com>
> >>> wrote:
> >>>>>
> >>>>>> Hi John,
> >>>>>>
> >>>>>> Please see my follow-up comments inlined below.
> >>>>>>
> >>>>>> On Mon, Dec 13, 2021 at 2:26 PM John Roesler <vvcep...@apache.org>
> >>> wrote:
> >>>>>>
> >>>>>>> Hi Patrick, thanks for the KIP!
> >>>>>>>
> >>>>>>> I hope you, Guozhang, and Luke don't mind if I share some
> >>>>>>> thoughts:
> >>>>>>>
> >>>>>>> 1. I think you just meant to remove that private constructor
> >>>>>>> from the KIP, right?
> >>>>>>>
> >>>>>>
> >>>>>> Yes.
> >>>>>>
> >>>>>>
> >>>>>>>
> >>>>>>> 2. I think WindowRangeQuery#withWindowRage(windowLower,
> >>>>>>> windowUpper) is the version that yields an iterator over
> >>>>>>> both keys and windows, so it's not totally redundant.
> >>>>>>>
> >>>>>>> However, it does seem like WindowRangeQuery#withKey is
> >>>>>>> equivalent to WindowKeyQuery#withKey . I overlooked it
> >>>>>>> before, but we probably don't need both.
> >>>>>>>
> >>>>>>> Stepping back, it seems like we could either just de-
> >>>>>>> duplicate that specific withKey query or we could even just
> >>>>>>> merge both use cases into the WindowRangeQuery. I've
> >>>>>>> personally never been convinced that the extra complexity of
> >>>>>>> having the WindowStoreIterator is worth the savings of not
> >>>>>>> duplicating the key on each record. Maybe it would be if we
> >>>>>>> separately deserialized the same key over and over again,
> >>>>>>> but that seems optimizable.
> >>>>>>>
> >>>>>>> On the other hand, that's more work, and the focus for IQv2
> >>>>>>> right now is to just get some MVP of queries implemented to
> >>>>>>> cover basic use cases, so it might be worthwhile to keep it
> >>>>>>> simple (by just dropping `WindowRangeQuery#withKey`). I'm
> >>>>>>> happy with whatever call Patrick wants to make here, since
> >>>>>>> it's his work to do.
> >>>>>>>
> >>>>>>
> >>>>>> My original comments was actually referring to that
> >>> `WindowRangeQuery` does
> >>>>>> not allow users to specify a range of [keyFrom: windowFrom, keyTo:
> >>>>>> windowTo], but only [key: windowFrom, key: windowTo], or [-INF:
> >>> windowFrom,
> >>>>>> INF: windowTo] if we do not specify the key but only do
> >>> `withWindowRage`. I
> >>>>>> was not sure if this is intentional by design, i.e. that the only
> >>>>>> difference between the two classes is that the latter allows [-INF:
> >>>>>> windowFrom, INF: windowTo], and and I was assuming it's now, but
> >>> otherwise
> >>>>>> these two are then very much alike.
> >>>>>>
> >>>>>> So I guess my question is that, is it by-design to not allow users
> >> do
> >>>>>> something like `query.withWindowRange(..).withKeyRange(..)`?
> >>>>>>
> >>>>>>
> >>>>>>>
> >>>>>>> 3. I got the impression that WindowRangeQuery was intended
> >>>>>>> for use with both Window and Session stores, but that might
> >>>>>>> be my assumption.
> >>>>>>>
> >>>>>>>
> >>>>>> Today the session store's query API is at least different on the
> >>> names,
> >>>>>> e.g. "findSessions", so I'm not sure if the proposal intend to
> >>> replace
> >>>>>> these functions with the WindowRangeQuery such that:
> >>>>>>
> >>>>>> sessionStore.findSessions(K, Ins, Ins) ->
> >>> query.withKey().withWindowRange()
> >>>>>> sessionStore.findSessions(K, K, Ins, Ins) ->
> >>>>>> query.withKeyRange().withWindowRange()   // again, assuming we
> >> would
> >>> want
> >>>>>> `withKeyRange` as in 2) above.
> >>>>>> sessionStore.fetch(K) -> query.withKey()
> >>>>>> sessionStore.fetch(K, K) -> query.withKeyRange()
> >>>>>>
> >>>>>> Also, sessionStore.fetchSession(K, Ins, Ins) seems would not be
> >>> supported
> >>>>>> with the new API. I'm not enforcing that we have the complete
> >>> coverage in
> >>>>>> this KIP, and I'm with you that we would focus on getting some MVP
> >>> out
> >>>>>> sooner, but I'd like our KIP to clarify on what's really covered
> >>> comparing
> >>>>>> against the old API and what's not.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> 4. That's good feedback. I think those names were inspired
> >>>>>>> by the WindowStore methods that just say stuff like
> >>>>>>> `timeFrom` and `timeTo`. The SessionStore does a better job
> >>>>>>> of being unambiguous, since it says stuff like
> >>>>>>> `earliestSessionEndTime` and `latestSessionStartTime`.
> >>>>>>>
> >>>>>>> And, actually, that brings up a point that I think we
> >>>>>>> overlooked before. While the method signatures of the
> >>>>>>> WindowStore and SessionStore methods look the same, the
> >>>>>>> meanings of their arguments are not the same. In particular,
> >>>>>>> the WindowStore ranges are always in reference to the window
> >>>>>>> start time, while the SessionStore ranges may be in
> >>>>>>> reference to the window start time or end time (or different
> >>>>>>> combinations of both).
> >>>>>>>
> >>>>>>> I suspect that your instinct to cover both stores with the
> >>>>>>> same Query is correct, and we just need to be specific about
> >>>>>>> the kinds of ranges we're talking about. For example,
> >>>>>>> instead of withWindowRange, maybe we would have:
> >>>>>>>
> >>>>>>> withWindowStartRange(
> >>>>>>>    Instant earliestWindowStartTime,
> >>>>>>>    Instant latestWindowStartTime
> >>>>>>> );
> >>>>>>>
> >>>>>>> Then in the future, we could add stuff like:
> >>>>>>>
> >>>>>>> withWindowStartAndEndRange(
> >>>>>>>    Instant earliestWindowStartTime,
> >>>>>>>    Instant latestWindowEndTime
> >>>>>>> );
> >>>>>>>
> >>>>>>> Etc.
> >>>>>>>
> >>>>>>> 5. I think Luke's question reveals how weirdly similar but
> >>>>>>> not the same these two queries are. It's not your fault,
> >>>>>>> this is inherited from the existing set of weirdly-similar-
> >>>>>>> but-not-the-same store methods. The thing that distinguishes
> >>>>>>> the WindowKeyQuery from the WindowRangeQuery is:
> >>>>>>> * WindowKeyQuery: all results share the same K key (cf point
> >>>>>>> 2: I don't think we need `WindowRangeQuery#withKey(k)`).
> >>>>>>> Therefore, the iterator is just (windowStartTime, value)
> >>>>>>> pairs.
> >>>>>>> * WindowRangeQuery: the results may have different keys, so
> >>>>>>> the iterator is (Windowed<K>, value) pairs, where
> >>>>>>> Windowed<K> is basically a (windowStartTime, K key) pair.
> >>>>>>>
> >>>>>>> Therefore, we could support a WindowRangeQuery with a fixed
> >>>>>>> key, but it would just be another way to express the same
> >>>>>>> thing as the WindowKeyQuery with the same parameters.
> >>>>>>>
> >>>>>>>
> >>>>>> As I suggested, we do not necessarily need to cover all existing
> >>> cases
> >>>>>> compared with the old API, but it's better to be very clear on
> >> what's
> >>>>>> actually covered v.s. what's not. For example in WindowRangeQuery,
> >>> I'd like
> >>>>>> to clarify if all the following are intended in this KIP's scope:
> >>>>>>
> >>>>>> * query.withKey().withWindowRange()
> >>>>>> * query.withKey() // range all window
> >>>>>> * query.withWindowRange() // range all keys.
> >>>>>>
> >>>>>>
> >>>>>>> As in point 2, I do think it might be worth converging all
> >>>>>>> use cases into the WindowRangeQuery, but we can also just
> >>>>>>> shoot for parity now and defer elegance for the future.
> >>>>>>>
> >>>>>>> 6. I'll just add one question of my own here: If we do keep
> >>>>>>> both query classes, then I think we would drop `withKey` and
> >>>>>>> `getKey` from the WindowRangeQuery. But if we do wind up
> >>>>>>> keeping the WindowRangeQuery class, I think we should
> >>>>>>> reconsider the name of the getter, since there are other
> >>>>>>> range queries that support a range of keys. Is there a
> >>>>>>> getter name we can use that would still work if we come back
> >>>>>>> later and add lower and upper key bounds?
> >>>>>>>
> >>>>>>> Thanks again for the KIP!
> >>>>>>> John
> >>>>>>>
> >>>>>>> On Mon, 2021-12-13 at 16:35 +0800, Luke Chen wrote:
> >>>>>>>> Hi Patrick,
> >>>>>>>>
> >>>>>>>> Thanks for the KIP!
> >>>>>>>>
> >>>>>>>> I have some comments, in addition to Guozhang's comments:
> >>>>>>>> 4. The parameter names `windowLower` and `windowUpper` are kind
> >>> of
> >>>>>>>> ambiguous to me. Could we come up a better name for it, like
> >>>>>>>> `windowStartTime`, `windowEndTime`, or even we don't need the
> >>> "window"
> >>>>>>>> name, just `startTime` and `endTime`?
> >>>>>>>> 5. Why can't we support window range query with a key within a
> >>> time
> >>>>>>> range?
> >>>>>>>> You might need to explain in the KIP.
> >>>>>>>>
> >>>>>>>> Thank you.
> >>>>>>>> Luke
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Sat, Dec 11, 2021 at 7:54 AM Guozhang Wang <
> >>> wangg...@gmail.com>
> >>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Hi Patrick,
> >>>>>>>>>
> >>>>>>>>> I made a pass on the KIP and have a few comments below:
> >>>>>>>>>
> >>>>>>>>> 1. The `WindowRangeQuery` has a private constructor while the
> >>>>>>>>> `WindowKeyQuery` has not, is that intentional?
> >>>>>>>>>
> >>>>>>>>> 2. The `WindowRangeQuery` seems not allowing to range over
> >> both
> >>>>>> window
> >>>>>>> and
> >>>>>>>>> key, but only window with a fixed key, in that case it seems
> >>> pretty
> >>>>>>> much
> >>>>>>>>> the same as the other (ignoring the constructor), since we
> >>> know we
> >>>>>>> would
> >>>>>>>>> only have a single `key` value in the returned iterator, and
> >>> hence it
> >>>>>>> seems
> >>>>>>>>> returning in the form of `WindowStoreIterator<V>` is also
> >> fine
> >>> as the
> >>>>>>> key
> >>>>>>>>> is fixed and hence no need to maintain it in the returned
> >>> iterator.
> >>>>>> I'm
> >>>>>>>>> wondering should we actually support ranging over keys as
> >> well
> >>> in
> >>>>>>>>> `WindowRangeQuery`?
> >>>>>>>>>
> >>>>>>>>> 3. The KIP title mentioned both session and window, but the
> >>> APIs only
> >>>>>>>>> involves window stores; However the return type
> >>> `WindowStoreIterator`
> >>>>>>> is
> >>>>>>>>> only for window stores not session stores, so I feel we would
> >>> still
> >>>>>>> have
> >>>>>>>>> some differences for session window query interface?
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Guozhang
> >>>>>>>>>
> >>>>>>>>> On Fri, Dec 10, 2021 at 1:32 PM Patrick Stuedi
> >>>>>>>>> <pstu...@confluent.io.invalid>
> >>>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Hi everyone,
> >>>>>>>>>>
> >>>>>>>>>> I would like to start the vote for KIP-806 that adds window
> >>> and
> >>>>>>> session
> >>>>>>>>>> query support to query KV-stores using IQv2.
> >>>>>>>>>>
> >>>>>>>>>> The KIP can be found here:
> >>>>>>>>>> https://cwiki.apache.org/confluence/x/LJaqCw
> >>>>>>>>>>
> >>>>>>>>>> Skipping the discussion phase as this KIP is following the
> >>> same
> >>>>>>> pattern
> >>>>>>>>> as
> >>>>>>>>>> the previously submitted KIP-805 (KIP:
> >>>>>>>>>> https://cwiki.apache.org/confluence/x/85OqCw, Discussion:
> >>>>>>>>>> https://tinyurl.com/msp5mcb2). Of course concerns/comments
> >>> can
> >>>>>>> still be
> >>>>>>>>>> brought up in this thread.
> >>>>>>>>>>
> >>>>>>>>>> -Patrick
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> --
> >>>>>>>>> -- Guozhang
> >>>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> -- Guozhang
> >>>>>>
> >>>>
> >>>
> >>>
> >>
> >> --
> >> -- Guozhang
> >>
> >
>

Reply via email to