Thanks, Bruno, for the feedback.
- I agree with both points 2 and 3. About 3: Having "VersionsQualifier" reduces the number of methods and makes everything less confusing. At the end, that will be easier to use for the developers. - About point 4: I renamed all the properties and parameters from "asOfTimestamp" to "fromTimestamp". That was my misunderstanding. So Now we have these two timestamp bounds: "fromTimestamp" and "untilTimestamp". - About point 5: Do we need system tests here? I assumed just integration tests were enough. - Regarding long vs timestamp instance: I think yes, that 's why I used Long as timestamp. Bests, Alieh On Thu, Jul 27, 2023 at 2:28 PM Bruno Cadonna <cado...@apache.org> wrote: > Hi Alieh, > > Thanks for the KIP! > > > Here my feedback. > > 1. > You can remove the private fields and constructors from the KIP. Those > are implementation details. > > > 2. > Some proposals for renamings > > in VersionedKeyQuery > > withKeyWithTimestampBound() > -> withKeyAndAsOf() > > withKeyWithTimestampRange() > -> withKeyAndTimeRange() > > in VersionedRangeQuery > > KeyRangeWithTimestampBound() > -> withKeyRangeAndAsOf() > > withLowerBoundWithTimestampBound() > -> withLowerBoundAndAsOf() > > withUpperBoundWithTimestampBound() > -> withUpperBoundAndAsOf() > > withNoBoundWithTimestampBound() > -> withNoBoundsAndAsOf > > keyRangeWithTimestampRange() > -> withKeyRangeAndTimeRange() > > withLowerBoundWithTimestampRange() > -> withLowerBoundAndTimeRange() > > withUpperBoundWithTimestampRange() > -> withUpperBounfAndTimeRange() > > withNoBoundWithTimestampRange() > -> withNoBoundsAndTimeRange() > > > 3. > Would it make sense to merge > withKeyLatestValue(final K key) > and > withKeyAllVersions(final K key) > into > withKey(final K key, final VersionsQualifier versionsQualifier) > where VersionsQualifier is an enum with values (ALL, LATEST). We could > also add EARLIEST if we feel it might be useful. > Same applies to all methods that end in LatestValue or AllVersions > > > 4. > I think getAsOfTimestamp() should not return the lower bound. If I query > a version as of a timestamp then the query should return the latest > version less than the timestamp. > I propose to rename the getters to getTimeFrom() and getTimeTo() as in > WindowRangeQuery. > > > 5. > Please add the Test Plan section. > > > Regarding long vs Instant: Did we miss to use Instant instead of long > for all interfaces of the versioned state stores? > > > Best, > Bruno > > > > > > > > > On 7/26/23 11:40 PM, Matthias J. Sax wrote: > > Thanks for the KIP Alieh. Glad to see that we can add IQ to the new > > versioned stores! > > > > > > > > Couple of questions: > > > >> single-key lookup with timestamp (upper) bound > > > > Not sure if "bound" is the right term? In the end, it's a point lookup > > for a key plus timestamps, so it's an as-of timestamp (not a bound)? Of > > course, the returned record would most likely have a different (smaller) > > timestamp, but that's expected but does not make the passed in timestamp > > a "bound" IMHO? > > > >> single-key query with timestamp range > >> single-key all versions query > > > > Should we also add `withLowerTimeBound` and `withUpperTimeBound` > > (similar to what `RangeQuery` has)? > > > > Btw: I think we should not pass `long` for timestamps, but `Instance` > > types. > > > > For time-range queries, do we iterate over the values in timestamp > > ascending order? If yes, the interface should specify it? Also, would it > > make sense to add reverse order (also ok to exclude and only do if there > > is demand in a follow up KIP; if not, please add to "Rejected > > alternatives" section). > > > > Also, for time-range query, what are the exact bound for stuff we > > include? In the end, a value was a "valid range" (conceptually), so do > > we include a record if it's valid range overlaps the search time-range, > > or must it be fully included? Or would we only say, that the `validFrom` > > timestamp that is stored must be in the search range (what implies that > > the lower end would be a non-overlapping but "fully included" bound, > > while the upper end would be a overlapping bound). > > > > For key-range / time-range queries: do we return the result in `<k,ts>` > > order or `<ts,k>` order? Also, what about reverse iterators? > > > > About ` ValueIterator` -- think the JavaDocs have c&p error in it for > > `peekNextRecord` (also, should it be called `peekNextValue`? (Also some > > other JavaDocs seem to be incomplete and not describe all parameters?) > > > > > > Thanks. > > > > > > > > -Matthias > > > > > > > > On 7/26/23 7:24 AM, Alieh Saeedi wrote: > >> Hi all, > >> > >> I would like to propose a KIP to support IQv2 for versioned state > stores. > >> > >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-960%3A+Support+interactive+queries+%28IQv2%29+for+versioned+state+stores > >> > >> Looking forward to your feedback! > >> > >> Cheers, > >> Alieh > >> >