For testing purposes, we previously used a Set to record the results in IQv2StoreIntegrationTest. Let's take an example where we now have two partitions and four key-value pairs: <0,0> in p0, <1,1> in p1, <2,2> in p0, and <3,3> in p1.
If we execute withRange(1,3), it will return a Set of <1, 2, 3>. However, if we run withRange(1,3).withDescendingKeys(), and still use a Set, the result will again be a Set of <1,2,3>. This means we won't be able to determine whether the results have been reversed. To resolve this ambiguity, I've switched to using a List to record the results, ensuring the order of retrieval from partitions p0 and p1. So, withRange(1,3) would yield a List of [2, 1, 3], whereas withRange(1,3).withDescendingKeys() would produce a List of [2,3,1]. This ordering makes sense since RocksDB sorts its keys, and InMemoryStore uses a TreeMap structure, which means the keys are already sorted. Sincerely, Hanyu On Wed, Oct 4, 2023 at 9:25 AM Hanyu (Peter) Zheng <pzh...@confluent.io> wrote: > Hi, Bruno > > Thank you for your suggestions, I will update them soon. > Sincerely, > > Hanyu > > On Wed, Oct 4, 2023 at 9:25 AM Hanyu (Peter) Zheng <pzh...@confluent.io> > wrote: > >> Hi, Lucas, >> >> Thank you for your suggestions. >> I will update the KIP and code together. >> >> Sincerely, >> Hanyu >> >> On Tue, Oct 3, 2023 at 8:16 PM Hanyu (Peter) Zheng <pzh...@confluent.io> >> wrote: >> >>> If we use WithDescendingKeys() to generate a RangeQuery to do the >>> reveseQuery, how do we achieve the methods like withRange, withUpperBound, >>> and withLowerBound only in this method? >>> >>> On Tue, Oct 3, 2023 at 8:01 PM Hanyu (Peter) Zheng <pzh...@confluent.io> >>> wrote: >>> >>>> I believe there's no need to introduce a method like >>>> WithDescendingKeys(). Instead, we can simply add a reverse flag to >>>> RangeQuery. Each method within RangeQuery would then accept an additional >>>> parameter. If the reverse is set to true, it would indicate the results >>>> should be reversed. >>>> >>>> Initially, I introduced a reverse variable. When set to false, the >>>> RangeQuery class behaves normally. However, when reverse is set to true, >>>> the RangeQuery essentially takes on the functionality of ReverseRangeQuery. >>>> Further details can be found in the "Rejected Alternatives" section. >>>> >>>> In my perspective, RangeQuery is a class responsible for creating a >>>> series of RangeQuery objects. It offers methods such as withRange, >>>> withUpperBound, and withLowerBound, allowing us to generate objects >>>> representing different queries. I'm unsure how adding a >>>> withDescendingOrder() method would be compatible with the other methods, >>>> especially considering that, based on KIP 969, WithDescendingKeys() doesn't >>>> appear to take any input variables. And if withDescendingOrder() doesn't >>>> accept any input, how does it return a RangeQuery? >>>> >>>> On Tue, Oct 3, 2023 at 4:37 PM Hanyu (Peter) Zheng <pzh...@confluent.io> >>>> wrote: >>>> >>>>> Hi, Colt, >>>>> The underlying structure of inMemoryKeyValueStore is treeMap. >>>>> Sincerely, >>>>> Hanyu >>>>> >>>>> On Tue, Oct 3, 2023 at 4:34 PM Hanyu (Peter) Zheng < >>>>> pzh...@confluent.io> wrote: >>>>> >>>>>> Hi Bill, >>>>>> 1. I will update the KIP in accordance with the PR and synchronize >>>>>> their future updates. >>>>>> 2. I will use that name. >>>>>> 3. you mean add something about ordering at the motivation section? >>>>>> >>>>>> Sincerely, >>>>>> Hanyu >>>>>> >>>>>> >>>>>> On Tue, Oct 3, 2023 at 4:29 PM Hanyu (Peter) Zheng < >>>>>> pzh...@confluent.io> wrote: >>>>>> >>>>>>> Hi, Walker, >>>>>>> >>>>>>> 1. I will update the KIP in accordance with the PR and synchronize >>>>>>> their future updates. >>>>>>> 2. I will use that name. >>>>>>> 3. I'll provide additional details in that section. >>>>>>> 4. I intend to utilize rangeQuery to achieve what we're referring to >>>>>>> as reverseQuery. In essence, reverseQuery is merely a term. To clear up >>>>>>> any >>>>>>> ambiguity, I'll make necessary adjustments to the KIP. >>>>>>> >>>>>>> Sincerely, >>>>>>> Hanyu >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Tue, Oct 3, 2023 at 4:09 PM Hanyu (Peter) Zheng < >>>>>>> pzh...@confluent.io> wrote: >>>>>>> >>>>>>>> Ok, I will change it back to following the code, and update them >>>>>>>> together. >>>>>>>> >>>>>>>> On Tue, Oct 3, 2023 at 2:27 PM Walker Carlson >>>>>>>> <wcarl...@confluent.io.invalid> wrote: >>>>>>>> >>>>>>>>> Hello Hanyu, >>>>>>>>> >>>>>>>>> Looking over your kip things mostly make sense but I have a couple >>>>>>>>> of >>>>>>>>> comments. >>>>>>>>> >>>>>>>>> >>>>>>>>> 1. You have "withDescandingOrder()". I think you mean >>>>>>>>> "descending" :) >>>>>>>>> Also there are still a few places in the do where its called >>>>>>>>> "setReverse" >>>>>>>>> 2. Also I like "WithDescendingKeys()" better >>>>>>>>> 3. I'm not sure of what ordering guarantees we are offering. >>>>>>>>> Perhaps we >>>>>>>>> can add a section to the motivation clearly spelling out the >>>>>>>>> current >>>>>>>>> ordering and the new offering? >>>>>>>>> 4. When you say "use unbounded reverseQuery to achieve >>>>>>>>> reverseAll" do >>>>>>>>> you mean "use unbounded RangeQuery to achieve reverseAll"? as >>>>>>>>> far as I can >>>>>>>>> tell we don't have a reverseQuery as a named object? >>>>>>>>> >>>>>>>>> >>>>>>>>> Looking good so far >>>>>>>>> >>>>>>>>> best, >>>>>>>>> Walker >>>>>>>>> >>>>>>>>> On Tue, Oct 3, 2023 at 2:13 PM Colt McNealy <c...@littlehorse.io> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> > Hello Hanyu, >>>>>>>>> > >>>>>>>>> > Thank you for the KIP. I agree with Matthias' proposal to keep >>>>>>>>> the naming >>>>>>>>> > convention consistent with KIP-969. I favor the >>>>>>>>> `.withDescendingKeys()` >>>>>>>>> > name. >>>>>>>>> > >>>>>>>>> > I am curious about one thing. RocksDB guarantees that records >>>>>>>>> returned >>>>>>>>> > during a range scan are lexicographically ordered by the bytes >>>>>>>>> of the keys >>>>>>>>> > (either ascending or descending order, as specified in the >>>>>>>>> query). This >>>>>>>>> > means that results within a single partition are indeed >>>>>>>>> ordered.** My >>>>>>>>> > reading of KIP-805 suggests to me that you don't need to specify >>>>>>>>> the >>>>>>>>> > partition number you are querying in IQv2, which means that you >>>>>>>>> can have a >>>>>>>>> > valid reversed RangeQuery over a store with "multiple >>>>>>>>> partitions" in it. >>>>>>>>> > >>>>>>>>> > Currently, IQv1 does not guarantee order of keys in this >>>>>>>>> scenario. Does >>>>>>>>> > IQv2 support ordering across partitions? Such an implementation >>>>>>>>> would >>>>>>>>> > require opening a rocksdb range scan** on multiple rocksdb >>>>>>>>> instances (one >>>>>>>>> > per partition), and polling the first key of each. Whether or >>>>>>>>> not this is >>>>>>>>> > ordered, could we please add that to the documentation? >>>>>>>>> > >>>>>>>>> > **(How is this implemented/guaranteed in an >>>>>>>>> `inMemoryKeyValueStore`? I >>>>>>>>> > don't know about that implementation). >>>>>>>>> > >>>>>>>>> > Colt McNealy >>>>>>>>> > >>>>>>>>> > *Founder, LittleHorse.dev* >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > On Tue, Oct 3, 2023 at 1:35 PM Hanyu (Peter) Zheng >>>>>>>>> > <pzh...@confluent.io.invalid> wrote: >>>>>>>>> > >>>>>>>>> > > ok, I will update it. Thank you Matthias >>>>>>>>> > > >>>>>>>>> > > Sincerely, >>>>>>>>> > > Hanyu >>>>>>>>> > > >>>>>>>>> > > On Tue, Oct 3, 2023 at 11:23 AM Matthias J. Sax < >>>>>>>>> mj...@apache.org> >>>>>>>>> > wrote: >>>>>>>>> > > >>>>>>>>> > > > Thanks for the KIP Hanyu! >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > I took a quick look and it think the proposal makes sense >>>>>>>>> overall. >>>>>>>>> > > > >>>>>>>>> > > > A few comments about how to structure the KIP. >>>>>>>>> > > > >>>>>>>>> > > > As you propose to not add `ReverseRangQuery` class, the code >>>>>>>>> example >>>>>>>>> > > > should go into "Rejected Alternatives" section, not in the >>>>>>>>> "Proposed >>>>>>>>> > > > Changes" section. >>>>>>>>> > > > >>>>>>>>> > > > For the `RangeQuery` code example, please omit all existing >>>>>>>>> methods >>>>>>>>> > etc, >>>>>>>>> > > > and only include what will be added/changed. This make it >>>>>>>>> simpler to >>>>>>>>> > > > read the KIP. >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > nit: typo >>>>>>>>> > > > >>>>>>>>> > > > > the fault value is false >>>>>>>>> > > > >>>>>>>>> > > > Should be "the default value is false". >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > Not sure if `setReverse()` is the best name. Maybe >>>>>>>>> > `withDescandingOrder` >>>>>>>>> > > > (or similar, I guess `withReverseOrder` would also work) >>>>>>>>> might be >>>>>>>>> > > > better? Would be good to align to KIP-969 proposal that >>>>>>>>> suggest do use >>>>>>>>> > > > `withDescendingKeys` methods for "reverse key-range"; if we >>>>>>>>> go with >>>>>>>>> > > > `withReverseOrder` we should change KIP-969 accordingly. >>>>>>>>> > > > >>>>>>>>> > > > Curious to hear what others think about naming this >>>>>>>>> consistently across >>>>>>>>> > > > both KIPs. >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > -Matthias >>>>>>>>> > > > >>>>>>>>> > > > >>>>>>>>> > > > On 10/3/23 9:17 AM, Hanyu (Peter) Zheng wrote: >>>>>>>>> > > > > >>>>>>>>> > > > >>>>>>>>> > > >>>>>>>>> > >>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-985%3A+Add+reverseRange+and+reverseAll+query+over+kv-store+in+IQv2 >>>>>>>>> > > > > >>>>>>>>> > > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> > > -- >>>>>>>>> > > >>>>>>>>> > > [image: Confluent] <https://www.confluent.io> >>>>>>>>> > > Hanyu (Peter) Zheng he/him/his >>>>>>>>> > > Software Engineer Intern >>>>>>>>> > > +1 (213) 431-7193 <+1+(213)+431-7193> >>>>>>>>> > > Follow us: [image: Blog] >>>>>>>>> > > < >>>>>>>>> > > >>>>>>>>> > >>>>>>>>> https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog >>>>>>>>> > > >[image: >>>>>>>>> > > Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >>>>>>>>> > > <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >>>>>>>>> > > <https://slackpass.io/confluentcommunity>[image: YouTube] >>>>>>>>> > > <https://youtube.com/confluent> >>>>>>>>> > > >>>>>>>>> > > [image: Try Confluent Cloud for Free] >>>>>>>>> > > < >>>>>>>>> > > >>>>>>>>> > >>>>>>>>> https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic >>>>>>>>> > > > >>>>>>>>> > > >>>>>>>>> > >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> >>>>>>>> [image: Confluent] <https://www.confluent.io> >>>>>>>> Hanyu (Peter) Zheng he/him/his >>>>>>>> Software Engineer Intern >>>>>>>> +1 (213) 431-7193 <+1+(213)+431-7193> >>>>>>>> Follow us: [image: Blog] >>>>>>>> <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: >>>>>>>> Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >>>>>>>> <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >>>>>>>> <https://slackpass.io/confluentcommunity>[image: YouTube] >>>>>>>> <https://youtube.com/confluent> >>>>>>>> >>>>>>>> [image: Try Confluent Cloud for Free] >>>>>>>> <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> >>>>>>> [image: Confluent] <https://www.confluent.io> >>>>>>> Hanyu (Peter) Zheng he/him/his >>>>>>> Software Engineer Intern >>>>>>> +1 (213) 431-7193 <+1+(213)+431-7193> >>>>>>> Follow us: [image: Blog] >>>>>>> <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: >>>>>>> Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >>>>>>> <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >>>>>>> <https://slackpass.io/confluentcommunity>[image: YouTube] >>>>>>> <https://youtube.com/confluent> >>>>>>> >>>>>>> [image: Try Confluent Cloud for Free] >>>>>>> <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> >>>>>> [image: Confluent] <https://www.confluent.io> >>>>>> Hanyu (Peter) Zheng he/him/his >>>>>> Software Engineer Intern >>>>>> +1 (213) 431-7193 <+1+(213)+431-7193> >>>>>> Follow us: [image: Blog] >>>>>> <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: >>>>>> Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >>>>>> <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >>>>>> <https://slackpass.io/confluentcommunity>[image: YouTube] >>>>>> <https://youtube.com/confluent> >>>>>> >>>>>> [image: Try Confluent Cloud for Free] >>>>>> <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> >>>>>> >>>>> >>>>> >>>>> -- >>>>> >>>>> [image: Confluent] <https://www.confluent.io> >>>>> Hanyu (Peter) Zheng he/him/his >>>>> Software Engineer Intern >>>>> +1 (213) 431-7193 <+1+(213)+431-7193> >>>>> Follow us: [image: Blog] >>>>> <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: >>>>> Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >>>>> <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >>>>> <https://slackpass.io/confluentcommunity>[image: YouTube] >>>>> <https://youtube.com/confluent> >>>>> >>>>> [image: Try Confluent Cloud for Free] >>>>> <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> >>>>> >>>> >>>> >>>> -- >>>> >>>> [image: Confluent] <https://www.confluent.io> >>>> Hanyu (Peter) Zheng he/him/his >>>> Software Engineer Intern >>>> +1 (213) 431-7193 <+1+(213)+431-7193> >>>> Follow us: [image: Blog] >>>> <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: >>>> Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >>>> <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >>>> <https://slackpass.io/confluentcommunity>[image: YouTube] >>>> <https://youtube.com/confluent> >>>> >>>> [image: Try Confluent Cloud for Free] >>>> <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> >>>> >>> >>> >>> -- >>> >>> [image: Confluent] <https://www.confluent.io> >>> Hanyu (Peter) Zheng he/him/his >>> Software Engineer Intern >>> +1 (213) 431-7193 <+1+(213)+431-7193> >>> Follow us: [image: Blog] >>> <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: >>> Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >>> <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >>> <https://slackpass.io/confluentcommunity>[image: YouTube] >>> <https://youtube.com/confluent> >>> >>> [image: Try Confluent Cloud for Free] >>> <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> >>> >> >> >> -- >> >> [image: Confluent] <https://www.confluent.io> >> Hanyu (Peter) Zheng he/him/his >> Software Engineer Intern >> +1 (213) 431-7193 <+1+(213)+431-7193> >> Follow us: [image: Blog] >> <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: >> Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] >> <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] >> <https://slackpass.io/confluentcommunity>[image: YouTube] >> <https://youtube.com/confluent> >> >> [image: Try Confluent Cloud for Free] >> <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> >> > > > -- > > [image: Confluent] <https://www.confluent.io> > Hanyu (Peter) Zheng he/him/his > Software Engineer Intern > +1 (213) 431-7193 <+1+(213)+431-7193> > Follow us: [image: Blog] > <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: > Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] > <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] > <https://slackpass.io/confluentcommunity>[image: YouTube] > <https://youtube.com/confluent> > > [image: Try Confluent Cloud for Free] > <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic> > -- [image: Confluent] <https://www.confluent.io> Hanyu (Peter) Zheng he/him/his Software Engineer Intern +1 (213) 431-7193 <+1+(213)+431-7193> Follow us: [image: Blog] <https://www.confluent.io/blog?utm_source=footer&utm_medium=email&utm_campaign=ch.email-signature_type.community_content.blog>[image: Twitter] <https://twitter.com/ConfluentInc>[image: LinkedIn] <https://www.linkedin.com/in/hanyu-peter-zheng/>[image: Slack] <https://slackpass.io/confluentcommunity>[image: YouTube] <https://youtube.com/confluent> [image: Try Confluent Cloud for Free] <https://www.confluent.io/get-started?utm_campaign=tm.fm-apac_cd.inbound&utm_source=gmail&utm_medium=organic>