Thanks Almog, I read https://github.com/apache/kafka/pull/15061/files and I think the additional API is the right way of fixing it.
Guozhang On Fri, Dec 22, 2023 at 9:14 AM Almog Gavra <almog.ga...@gmail.com> wrote: > > Hello Everyone! I updated the KIP once more as a result of a bug > investigation - I added DslWindowParams#isTimestamped to the public API as > a result of https://issues.apache.org/jira/browse/KAFKA-16046. Please let > me know if there's any concerns with this addition. > > On Thu, Dec 14, 2023 at 5:40 PM Almog Gavra <almog.ga...@gmail.com> wrote: > > > Sorry for the late response to the late reply, hah! I didn't give any > > thought about how we would want to integrate this custom store supplier > > with querying of the stores. My initial intuition suggests that we'd > > probably want a separate API for that, or just recommend people to query > > their external stores outside of the context of Kafka Streams (with the > > understanding that there are fewer semantic guarantees). > > > > On Sat, Dec 2, 2023 at 9:38 AM Guozhang Wang <guozhang.wang...@gmail.com> > > wrote: > > > >> Hey Almog, > >> > >> Sorry for the late reply. > >> > >> Re: 2) above, maybe I'm just overthinking it. What I had in mind is > >> that when we have, say, a remote store impl customized by the users. > >> Besides being used inside the KS app itself, the user may try to > >> access the store instance outside the KS app as well? If that's the > >> case, maybe it's still worth having an interface from KS to expose the > >> store instance directly. > >> > >> > >> Guozhang > >> > >> > >> On Sun, Nov 19, 2023 at 5:26 PM Almog Gavra <almog.ga...@gmail.com> > >> wrote: > >> > > >> > Hello Guozhang, > >> > > >> > Thanks for the feedback! For 1 there are tests verifying this and I did > >> so > >> > manually as well, it does not reveal anything about the store types -- > >> just > >> > the names, so I think we're good there. I've put an example at the > >> bottom > >> > of this reply for people following the conversation. > >> > > >> > I'm not sure I understand your question about 2. What's the integration > >> > point with the actual store for this external component? What does that > >> > have to do with this PR/how does it differ from what's available today > >> > (with the default.dsl.store configuration)? In either scenario, getting > >> the > >> > actual instantiated store supplier must be done only after the topology > >> is > >> > built and rewritten (it can be passed in either via > >> > Materialized/StreamJoined in the DSL code, via TopologyConfig overrides > >> or > >> > in the global StreamsConfig passed in to KafkaStreams). Today, AFAIK, > >> this > >> > isn't possible (you can't get from the built topology the instantiated > >> > store supplier). > >> > > >> > Thanks, > >> > Almog > >> > > >> > ------------ > >> > > >> > Topologies: > >> > Sub-topology: 0 > >> > Source: KSTREAM-SOURCE-0000000000 (topics: [test_topic]) > >> > --> KSTREAM-TRANSFORMVALUES-0000000001 > >> > Processor: KSTREAM-TRANSFORMVALUES-0000000001 (stores: []) > >> > --> Aggregate-Prepare > >> > <-- KSTREAM-SOURCE-0000000000 > >> > Processor: Aggregate-Prepare (stores: []) > >> > --> KSTREAM-AGGREGATE-0000000003 > >> > <-- KSTREAM-TRANSFORMVALUES-0000000001 > >> > Processor: KSTREAM-AGGREGATE-0000000003 (stores: > >> > [Aggregate-Aggregate-Materialize]) > >> > --> Aggregate-Aggregate-ToOutputSchema > >> > <-- Aggregate-Prepare > >> > Processor: Aggregate-Aggregate-ToOutputSchema (stores: []) > >> > --> Aggregate-Project > >> > <-- KSTREAM-AGGREGATE-0000000003 > >> > Processor: Aggregate-Project (stores: []) > >> > --> KTABLE-TOSTREAM-0000000006 > >> > <-- Aggregate-Aggregate-ToOutputSchema > >> > Processor: KTABLE-TOSTREAM-0000000006 (stores: []) > >> > --> KSTREAM-SINK-0000000007 > >> > <-- Aggregate-Project > >> > Sink: KSTREAM-SINK-0000000007 (topic: S2) > >> > <-- KTABLE-TOSTREAM-0000000006 > >> > > >> > On Sat, Nov 18, 2023 at 6:05 PM Guozhang Wang < > >> guozhang.wang...@gmail.com> > >> > wrote: > >> > > >> > > Hello Almog, > >> > > > >> > > I left a comment in the PR before I got to read the newest updates > >> > > from this thread. My 2c: > >> > > > >> > > 1. I liked the idea of delaying the instantiation of StoreBuiler from > >> > > suppliers after the Topology is created. It has been a bit annoying > >> > > for many other features we were trying back then. The only thing is, > >> > > we need to check when we call Topology.describe() which gets a > >> > > TopologyDescription, does that reveal anything about the source of > >> > > truth store impl types already; if it does not, then we are good to > >> > > go. > >> > > > >> > > 2. I originally thought (and commented in the PR) that maybe we can > >> > > just add this new func "resolveDslStoreSuppliers" into StreamsConfig > >> > > directly and mark it as EVOLVING, because I was not clear that we are > >> > > trying to do 1) above. Now I'm leaning more towards what you proposed. > >> > > But I still have a question in mind: even after we've done > >> > > https://github.com/apache/kafka/pull/14548 later, don't we still need > >> > > some interface that user's can call to get the actual instantiated > >> > > store supplier for cases where some external custom logic, like an > >> > > external controller / scheduler which is developed by a different > >> > > group of people rather than the Streams app developers themselves, > >> > > that can only turn on certain features after learning the actual store > >> > > impl suppliers used? > >> > > > >> > > Guozhang > >> > > > >> > > On Sat, Nov 18, 2023 at 2:46 PM Almog Gavra <almog.ga...@gmail.com> > >> wrote: > >> > > > > >> > > > Hello Everyone - one more minor change to the KIP that came up > >> during > >> > > > implementation (reflected in the KIP itself). I will be adding the > >> method > >> > > > below to TopologyConfig. This allows us to determine whether or not > >> the > >> > > > DslStoreSuppliers was explicitly passed in via either > >> > > > DSL_STORE_SUPPLIERS_CLASS_CONFIG or DEFAULT_DSL_STORE_CONFIG (if it > >> was > >> > > not > >> > > > explicitly passed in, we will use the one that is configured in > >> > > > StreamsConfig, or the default value of RocksDBDslStoreSuppliers). > >> > > > > >> > > > See the discussion on the PR ( > >> > > > https://github.com/apache/kafka/pull/14648#discussion_r1394939779) > >> for > >> > > more > >> > > > context. Ideally this would be an internal utility method but > >> there's no > >> > > > clean way to get that done now, so the goal was to minimize the > >> surface > >> > > > area of what's being exposed (as opposed to exposing a generic > >> method > >> > > like > >> > > > isOverridden(String config). > >> > > > > >> > > > /** > >> > > > * @return the DslStoreSuppliers if the value was explicitly > >> configured > >> > > > (either by > >> > > > * {@link StreamsConfig#DEFAULT_DSL_STORE} or {@link > >> > > > StreamsConfig#DSL_STORE_SUPPLIERS_CLASS_CONFIG}) > >> > > > */ > >> > > > public Optional<DslStoreSuppliers> resolveDslStoreSuppliers(); > >> > > > > >> > > > On Fri, Nov 3, 2023 at 10:48 AM Matthias J. Sax <mj...@apache.org> > >> > > wrote: > >> > > > > >> > > > > Thanks. Will take a look into the PR. > >> > > > > > >> > > > > I don't have any objection to the goal; contrary! It's very > >> annoying > >> > > > > what we have right now, and if we can improve it, I am totally in > >> favor > >> > > > > of it. > >> > > > > > >> > > > > > >> > > > > -Matthias > >> > > > > > >> > > > > On 11/3/23 8:47 AM, Almog Gavra wrote: > >> > > > > > Good question :) I have a PR for it already here: > >> > > > > > https://github.com/apache/kafka/pull/14659. The concept is to > >> wrap > >> > > the > >> > > > > > suppliers with an interface that allows for delayed creation of > >> the > >> > > > > > StoreBuilder instead of creating the StoreBuilder from the > >> suppliers > >> > > > > right > >> > > > > > away. Happy to get on a quick call to outline the implementation > >> > > strategy > >> > > > > > if you'd like, but hopefully you have no objections to the goal! > >> > > > > > > >> > > > > > On Thu, Nov 2, 2023 at 8:44 PM Matthias J. Sax < > >> mj...@apache.org> > >> > > wrote: > >> > > > > > > >> > > > > >> Almog, > >> > > > > >> > >> > > > > >> can you explain how you intent to implement this change? It's > >> not > >> > > clear > >> > > > > >> to me, how we could do this? > >> > > > > >> > >> > > > > >> When we call `StreasmBuilder.build()` it will give us a already > >> > > fully > >> > > > > >> wired `Topology`, including all store suppliers needed. I > >> don't see > >> > > a > >> > > > > >> clean way how we could change the store supplier after the > >> fact? > >> > > > > >> > >> > > > > >> > >> > > > > >> -Matthias > >> > > > > >> > >> > > > > >> On 11/2/23 5:11 PM, Almog Gavra wrote: > >> > > > > >>> Hello everyone - I updated the KIP to also include the > >> following > >> > > > > >>> modification: > >> > > > > >>> > >> > > > > >>> Both the new dsl.store.suppliers.class and the old > >> > > default.dsl.store > >> > > > > >> will > >> > > > > >>> now respect the configurations when passed in via > >> > > > > >> KafkaStreams#new(Topology, > >> > > > > >>> StreamsConfig) (and other related constructors) instead of > >> only > >> > > being > >> > > > > >>> respected when passed in to the initial > >> > > > > StoreBuilder#new(TopologyConfig) > >> > > > > >>> (though it will be respected if passed in via the original > >> path as > >> > > > > well). > >> > > > > >>> > >> > > > > >>> I was honestly a bit shocked this wasn't the case with the > >> > > original KIP > >> > > > > >>> that introduced default.dsl.store! > >> > > > > >>> > >> > > > > >>> On Fri, Jul 28, 2023 at 4:55 PM Almog Gavra < > >> almog.ga...@gmail.com > >> > > > > >> > > > > >> wrote: > >> > > > > >>> > >> > > > > >>>> OK! I think I got everything, but I'll give the KIP another > >> read > >> > > with > >> > > > > >>>> fresh eyes later. Just a reminder that the voting is open, > >> so go > >> > > out > >> > > > > and > >> > > > > >>>> exercise your civic duty! ;) > >> > > > > >>>> > >> > > > > >>>> - Almog > >> > > > > >>>> > >> > > > > >>>> On Fri, Jul 28, 2023 at 10:38 AM Almog Gavra < > >> > > almog.ga...@gmail.com> > >> > > > > >>>> wrote: > >> > > > > >>>> > >> > > > > >>>>> Thanks Guozhang & Sophie: > >> > > > > >>>>> > >> > > > > >>>>> A2. Will clarify in the KIP > >> > > > > >>>>> A3. Will change back to the deprecated version! > >> > > > > >>>>> A5. Seems like I'm outnumbered... DslStoreSuppliers it is. > >> > > > > >>>>> > >> > > > > >>>>> Will update the KIP today. > >> > > > > >>>>> > >> > > > > >>>>> - Almog > >> > > > > >>>>> > >> > > > > >>>>> On Thu, Jul 27, 2023 at 12:42 PM Guozhang Wang < > >> > > > > >>>>> guozhang.wang...@gmail.com> wrote: > >> > > > > >>>>> > >> > > > > >>>>>> Yes, that sounds right to me. Thanks Sophie. > >> > > > > >>>>>> > >> > > > > >>>>>> On Thu, Jul 27, 2023 at 12:35 PM Sophie Blee-Goldman > >> > > > > >>>>>> <ableegold...@gmail.com> wrote: > >> > > > > >>>>>>> > >> > > > > >>>>>>> A2: Guozhang, just to close the book on the ListValue > >> store > >> > > thing, > >> > > > > I > >> > > > > >>>>>> fully > >> > > > > >>>>>>> agree it seems like overreach > >> > > > > >>>>>>> to expose/force this on users, especially if it's fully > >> > > internal > >> > > > > >>>>>> today. But > >> > > > > >>>>>>> just to make sure we're on the same > >> > > > > >>>>>>> page here, you're still ok with this KIP fixing the API > >> gap > >> > > that > >> > > > > >> exists > >> > > > > >>>>>>> today, in which these stores cannot be > >> > > > > >>>>>>> customized by the user at all? > >> > > > > >>>>>>> > >> > > > > >>>>>>> In other words, after this KIP, the new behavior for the > >> > > ListValue > >> > > > > >>>>>> store in > >> > > > > >>>>>>> a stream join will be: > >> > > > > >>>>>>> > >> > > > > >>>>>>> S1: First, check if the user passed in a > >> `DSLStoreSuppliers` > >> > > (or > >> > > > > >>>>>> whatever > >> > > > > >>>>>>> the name will be) to the > >> > > > > >>>>>>> StreamJoined config object, and use that to > >> obtain the > >> > > > > >>>>>>> KVStoreSupplier for this ListValue store > >> > > > > >>>>>>> > >> > > > > >>>>>>> S2: If none was provided, check if the user has set a > >> default > >> > > > > >>>>>>> DSLStoreSuppliers via the new config, > >> > > > > >>>>>>> and use that to get the KVStoreSupplier if so > >> > > > > >>>>>>> > >> > > > > >>>>>>> S3: If neither is set, fall back to the original logic as > >> it is > >> > > > > >> today, > >> > > > > >>>>>>> which is to pass in a KVStoreSupplier > >> > > > > >>>>>>> that is hard-coded to be either RocksDB or > >> InMemory, > >> > > > > based on > >> > > > > >>>>>> what > >> > > > > >>>>>>> is returned for the #persistent > >> > > > > >>>>>>> API by the StreamJoined's WindowStoreSupplier > >> > > > > >>>>>>> > >> > > > > >>>>>>> Does that sound right? We can clarify this further in the > >> KIP > >> > > if > >> > > > > need > >> > > > > >>>>>> be > >> > > > > >>>>>>> > >> > > > > >>>>>>> On Thu, Jul 27, 2023 at 10:48 AM Guozhang Wang < > >> > > > > >>>>>> guozhang.wang...@gmail.com> > >> > > > > >>>>>>> wrote: > >> > > > > >>>>>>> > >> > > > > >>>>>>>> Hi all, > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> Like Almog's secretary as well! Just following up on that > >> > > index: > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> A2: I'm also happy without introducing versioned KV in > >> this > >> > > KIP > >> > > > > as I > >> > > > > >>>>>>>> would envision it to be introduced as new params into the > >> > > > > >>>>>>>> KeyValuePluginParams in the future. And just to clarify > >> on > >> > > > > Sophie's > >> > > > > >>>>>>>> previous comment, I think ListStore should not be > >> exposed in > >> > > this > >> > > > > >> API > >> > > > > >>>>>>>> until we see it as a common usage and hence would want to > >> > > (again, > >> > > > > we > >> > > > > >>>>>>>> need to think very carefully since it would potentially > >> ask > >> > > all > >> > > > > >>>>>>>> implementers to adopt) move it from the internal > >> category to > >> > > the > >> > > > > >>>>>>>> public interface category. As for now, I think only > >> having kv > >> > > / > >> > > > > >>>>>> window > >> > > > > >>>>>>>> / session as public store types is fine. > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> A3: Seems I was not making myself very clear at the > >> beginning > >> > > :P > >> > > > > The > >> > > > > >>>>>>>> major thing that I'd actually like to avoid having two > >> configs > >> > > > > >>>>>>>> co-exist for the same function since it will be a > >> confusing > >> > > > > learning > >> > > > > >>>>>>>> curve for users, and hence what I was proposing is to > >> just > >> > > have > >> > > > > the > >> > > > > >>>>>>>> newly introduced interface but not introducing a new > >> config, > >> > > and I > >> > > > > >>>>>>>> realized now that it is actually more aligned with the > >> CUSTOM > >> > > idea > >> > > > > >>>>>>>> where the ordering would be looking at config first, and > >> then > >> > > the > >> > > > > >>>>>>>> interface. I blushed as I read Almog likes it.. After > >> thinking > >> > > > > about > >> > > > > >>>>>>>> it twice, I'm now a bit leaning towards just deprecating > >> the > >> > > old > >> > > > > >>>>>>>> config with the new API+config as well. > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> A5: Among the names we have been discussed so far: > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> DslStorePlugin > >> > > > > >>>>>>>> StoreTypeSpec > >> > > > > >>>>>>>> StoreImplSpec > >> > > > > >>>>>>>> DslStoreSuppliers > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> I am in favor of DslStoreSuppliers as well as a > >> > > restrictiveness on > >> > > > > >>>>>> its > >> > > > > >>>>>>>> scope, just to echo Bruno's comments above. > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> Guozhang > >> > > > > >>>>>>>> > >> > > > > >>>>>>>> On Thu, Jul 27, 2023 at 4:15 AM Bruno Cadonna < > >> > > cado...@apache.org > >> > > > > > > >> > > > > >>>>>> wrote: > >> > > > > >>>>>>>>> > >> > > > > >>>>>>>>> Hi, > >> > > > > >>>>>>>>> > >> > > > > >>>>>>>>> A5. I have to admit that > >> > > > > >>>>>>>>> "If we envision extending this beyond just StoreSupplier > >> > > types, > >> > > > > it > >> > > > > >>>>>> could > >> > > > > >>>>>>>>> be a good option." > >> > > > > >>>>>>>>> is scaring me a bit. > >> > > > > >>>>>>>>> I am wondering what would be an example for such an > >> > > extension? > >> > > > > >>>>>>>>> In general, I would propose to limit the scope of a > >> config. > >> > > In > >> > > > > >>>>>> this case > >> > > > > >>>>>>>>> the config should provide suppliers for state stores > >> for the > >> > > DSL. > >> > > > > >>>>>>>>> > >> > > > > >>>>>>>>> BTW, maybe it is a good idea to let DslStorePlugin > >> extend > >> > > > > >>>>>> Configurable. > >> > > > > >>>>>>>>> > >> > > > > >>>>>>>>> Best, > >> > > > > >>>>>>>>> Bruno > >> > > > > >>>>>>>>> > >> > > > > >>>>>>>>> On 7/27/23 2:15 AM, Sophie Blee-Goldman wrote: > >> > > > > >>>>>>>>>> Thanks for the feedback Bruno -- sounds like we're > >> getting > >> > > close > >> > > > > >>>>>> to a > >> > > > > >>>>>>>> final > >> > > > > >>>>>>>>>> consensus here. > >> > > > > >>>>>>>>>> It sounds like the two main (only?) semi-unresolved > >> > > questions > >> > > > > >>>>>> that > >> > > > > >>>>>>>> still > >> > > > > >>>>>>>>>> have differing > >> > > > > >>>>>>>>>> opinions floating around are whether to deprecate the > >> old > >> > > > > >>>>>> config, and > >> > > > > >>>>>>>> what > >> > > > > >>>>>>>>>> to name the new config > >> > > > > >>>>>>>>>> + interface. > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> Although I won't personally push back on any of the > >> options > >> > > > > >>>>>> listed > >> > > > > >>>>>>>> above, > >> > > > > >>>>>>>>>> here's my final two cents: > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> A3. I'm still a firm believer in deprecating the old > >> > > config, and > >> > > > > >>>>>> agree > >> > > > > >>>>>>>>>> wholeheartedly with what Bruno said. > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> A5. I also wasn't crazy about "Plugin" at first, but I > >> will > >> > > > > >>>>>> admit it's > >> > > > > >>>>>>>>>> grown on me. I think it rubbed me the wrong > >> > > > > >>>>>>>>>> way at first because it's just not part of the > >> standard > >> > > > > >>>>>> vocabulary in > >> > > > > >>>>>>>>>> Streams so far. If we envision extending > >> > > > > >>>>>>>>>> this beyond just StoreSupplier types, it could be a > >> good > >> > > option. > >> > > > > >>>>>>>>>> DSLStoreSuppliers does make a lot of sense, > >> > > > > >>>>>>>>>> though. > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> To throw out a few more ideas in case any of them > >> stick, > >> > > what > >> > > > > >>>>>> about > >> > > > > >>>>>>>>>> something like DSLStoreFormat or > >> > > > > >>>>>>>>>> DSLStorageType, or even DSLStorageEngine? Or even > >> > > > > >>>>>> DSLStoreFactory -- > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>> Stores class is described as > >> > > > > >>>>>>>>>> a "factory" (though not named so) and, to me, is > >> actually > >> > > quite > >> > > > > >>>>>>>> comparable > >> > > > > >>>>>>>>>> -- both are providers not of the > >> > > > > >>>>>>>>>> stores themselves, but of the basic building blocks of > >> > > Stores > >> > > > > (eg > >> > > > > >>>>>>>>>> StoreSuppliers) > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> Ultimately fine with anything though. We should try > >> not to > >> > > drag > >> > > > > >>>>>> out > >> > > > > >>>>>>>> the KIP > >> > > > > >>>>>>>>>> discussion too long once it's down > >> > > > > >>>>>>>>>> to just nits :P > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> Cheers, > >> > > > > >>>>>>>>>> Sophie > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>> On Wed, Jul 26, 2023 at 8:04 AM Almog Gavra < > >> > > > > >>>>>> almog.ga...@gmail.com> > >> > > > > >>>>>>>> wrote: > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>>>>> Thanks for the comments Bruno! > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>> A3. Oops... I think I didn't do a great job updating > >> the > >> > > KIP to > >> > > > > >>>>>>>> reflect > >> > > > > >>>>>>>>>>> Guozhang's suggestion. This seems like the last point > >> of > >> > > > > >>>>>> contention, > >> > > > > >>>>>>>> where > >> > > > > >>>>>>>>>>> we have two options: > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>> 1. Deprecate the config entirely and replace > >> > > IN_MEMORY/ROCKSDB > >> > > > > >>>>>> with > >> > > > > >>>>>>>>>>> implementations of the DslStorePlugin > >> > > > > >>>>>>>>>>> 2. (What's currently in the KIP) Introduce a new > >> config > >> > > which > >> > > > > >>>>>>>> defaults to > >> > > > > >>>>>>>>>>> DefaultDslStorePlugin and only the > >> DefaultDslStorePlugin > >> > > will > >> > > > > >>>>>> respect > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>> old default.store.type config > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>> I'm happy with either, I'll keep the KIP with (2) for > >> now > >> > > as > >> > > > > >>>>>> that > >> > > > > >>>>>>>> seemed > >> > > > > >>>>>>>>>>> like the result of the previous discussion but I have > >> no > >> > > > > problem > >> > > > > >>>>>>>> changing > >> > > > > >>>>>>>>>>> it back to (1) which was the original proposal. > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>> A5. I like "DslStorePlugin" because it leaves room for > >> > > > > >>>>>> configuring > >> > > > > >>>>>>>>>>> implementations beyond just supplying stores (e.g. we > >> could > >> > > > > >>>>>> introduce > >> > > > > >>>>>>>> a > >> > > > > >>>>>>>>>>> `configure()` method etc...). I'll keep it as is for > >> now > >> > > (and > >> > > > > >>>>>> change > >> > > > > >>>>>>>>>>> Materialized/Stores API sections - thanks for catching > >> > > that)! I > >> > > > > >>>>>> don't > >> > > > > >>>>>>>> feel > >> > > > > >>>>>>>>>>> too strongly and wouldn't dig my heels in if most > >> people > >> > > > > >>>>>> preferred > >> > > > > >>>>>>>>>>> "DslStoreSuppliers" (I don't love DslStores as it > >> > > resembles the > >> > > > > >>>>>> Stores > >> > > > > >>>>>>>>>>> class to closely in name and they're a little > >> different). > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>> A6. Yup, that's the suggestion. > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>> - Almog > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>> On Wed, Jul 26, 2023 at 6:38 AM Bruno Cadonna < > >> > > > > >>>>>> cado...@apache.org> > >> > > > > >>>>>>>> wrote: > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>>>> Hi, > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> Sorry for being late to the party! > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> A1: I agree with Sophie, Guozhang, and Almog not to > >> block > >> > > the > >> > > > > >>>>>> KIP on > >> > > > > >>>>>>>>>>>> gaps in the implementation. > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> A2: I am happy with not considering anything special > >> > > w.r.t. > >> > > > > >>>>>> versioned > >> > > > > >>>>>>>>>>>> state stores in this KIP. > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> A3: Here I agree with Sophie to deprecate the old > >> config. > >> > > I > >> > > > > >>>>>> would > >> > > > > >>>>>>>> also > >> > > > > >>>>>>>>>>>> not use config value CUSTOM. Having two configs that > >> > > sometimes > >> > > > > >>>>>>>> depend on > >> > > > > >>>>>>>>>>>> each other to configure one single concept seems > >> > > confusing to > >> > > > > >>>>>> me. I > >> > > > > >>>>>>>> see > >> > > > > >>>>>>>>>>>> future me looking at default.dsl.store = IN_MEMORY > >> and > >> > > > > >>>>>> wondering why > >> > > > > >>>>>>>>>>>> something is written to disk because I did not check > >> > > config > >> > > > > >>>>>>>>>>>> dsl.store.plugin.class? > >> > > > > >>>>>>>>>>>> BTW, the KIP in its current version is not clear > >> about > >> > > whether > >> > > > > >>>>>>>>>>>> default.dsl.store will be deprecated or not. In > >> > > > > "Compatibility, > >> > > > > >>>>>>>>>>>> Deprecation, and Migration Plan" it says > >> default.dsl.store > >> > > > > >>>>>> will be > >> > > > > >>>>>>>>>>>> deprecated but in "Configuration" default.dsl.store > >> seems > >> > > to > >> > > > > >>>>>> be an > >> > > > > >>>>>>>>>>>> essential part of the configuration. > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> A4: I agree > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> A5: I do not completely like the name > >> "DslStorePlugin". > >> > > What > >> > > > > >>>>>> about > >> > > > > >>>>>>>>>>>> naming it simply "DslStores" or "DslStoreSuppliers"? > >> If we > >> > > > > >>>>>> decide to > >> > > > > >>>>>>>>>>>> rename we should also rename dsl.store.plugin.class > >> to > >> > > > > >>>>>>>>>>>> dsl.store.suppliers.class or similar. > >> > > > > >>>>>>>>>>>> BTW, I think you missed to rename some occurrences in > >> > > section > >> > > > > >>>>>>>>>>>> "Materialized API" especially in the code section > >> > > > > >>>>>> "Stores.java". > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> A6: Actually I am not sure if I completely follow > >> here. Is > >> > > > > >>>>>> this about > >> > > > > >>>>>>>>>>>> the static methods in class Stores? If yes, I agree > >> with > >> > > Almog > >> > > > > >>>>>> to > >> > > > > >>>>>>>> keep > >> > > > > >>>>>>>>>>>> this out of the KIP. > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> Best, > >> > > > > >>>>>>>>>>>> Bruno > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> On 7/26/23 5:20 AM, Almog Gavra wrote: > >> > > > > >>>>>>>>>>>>> I have updated the KIP with the points as discussed > >> > > above. > >> > > > > >>>>>>>> @Guozhang, > >> > > > > >>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>> suggested configuration makes it a little more > >> awkward > >> > > around > >> > > > > >>>>>> the > >> > > > > >>>>>>>>>>>>> Materialized.as and Materialized.withStoreType APIs > >> than > >> > > it > >> > > > > >>>>>> was > >> > > > > >>>>>>>> when we > >> > > > > >>>>>>>>>>>>> were totally deprecating the old configuration. Let > >> me > >> > > know > >> > > > > >>>>>> what you > >> > > > > >>>>>>>>>>>> think. > >> > > > > >>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>> I will open the voting tomorrow! Thanks again > >> everyone > >> > > for > >> > > > > the > >> > > > > >>>>>>>>>>>> discussion. > >> > > > > >>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>> Cheers, > >> > > > > >>>>>>>>>>>>> Almog > >> > > > > >>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>> On Tue, Jul 25, 2023 at 9:20 AM Almog Gavra < > >> > > > > >>>>>> almog.ga...@gmail.com> > >> > > > > >>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>> Glad you like my KIP-secretary skills ;) > >> > > > > >>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>> A2. I'm definitely happy to take your suggestion > >> here > >> > > and > >> > > > > >>>>>> not do > >> > > > > >>>>>>>>>>>> anything > >> > > > > >>>>>>>>>>>>>> special w.r.t. Versioned stores, I think it makes > >> sense > >> > > > > >>>>>> especially > >> > > > > >>>>>>>> if > >> > > > > >>>>>>>>>>> we > >> > > > > >>>>>>>>>>>>>> consider them implementation details of a specific > >> store > >> > > > > >>>>>> type. > >> > > > > >>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>> At EOD I'll update the KIP with all of these > >> changes > >> > > and if > >> > > > > >>>>>> the > >> > > > > >>>>>>>>>>>>>> discussion is silent I'll open a vote tomorrow > >> morning. > >> > > > > >>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>> Cheers, > >> > > > > >>>>>>>>>>>>>> Almog > >> > > > > >>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>> On Mon, Jul 24, 2023 at 2:02 PM Sophie > >> Blee-Goldman < > >> > > > > >>>>>>>>>>>>>> ableegold...@gmail.com> wrote: > >> > > > > >>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> Awesome summary (seriously) -- would you kindly > >> offer > >> > > your > >> > > > > >>>>>>>>>>>> organizational > >> > > > > >>>>>>>>>>>>>>> skills to every ongoing KIP from henceforth? We > >> need > >> > > you :P > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> A few answers/comments: > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> A2: I think there is a 3rd sub-option here, which > >> is to > >> > > > > >>>>>> leave > >> > > > > >>>>>>>>>>>>>>> versioned-ness out of this KIP entirely, return > >> only > >> > > the > >> > > > > >>>>>>>>>>> non-versioned > >> > > > > >>>>>>>>>>>>>>> stores for now, and then switch over to the > >> versioned > >> > > > > stores > >> > > > > >>>>>>>> (only) > >> > > > > >>>>>>>>>>>> when > >> > > > > >>>>>>>>>>>>>>> the time comes to flip the switch on making them > >> the > >> > > > > default > >> > > > > >>>>>>>> across > >> > > > > >>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>> DSL. This has the advantage of retaining the > >> current > >> > > > > >>>>>>>>>>> behavior/semantics > >> > > > > >>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>> provides a clear way to transition smoothly in the > >> > > future, > >> > > > > >>>>>> since > >> > > > > >>>>>>>> it > >> > > > > >>>>>>>>>>>> seems > >> > > > > >>>>>>>>>>>>>>> we will want to cut to all versioned state stores > >> > > rather > >> > > > > >>>>>> than > >> > > > > >>>>>>>> offer > >> > > > > >>>>>>>>>>>> users > >> > > > > >>>>>>>>>>>>>>> a > >> > > > > >>>>>>>>>>>>>>> choice between versioned or non-versioned stores > >> going > >> > > > > >>>>>> forward > >> > > > > >>>>>>>>>>>> (similar to > >> > > > > >>>>>>>>>>>>>>> how we only offer timestamped stores presently, > >> and > >> > > have > >> > > > > >>>>>>>> completely > >> > > > > >>>>>>>>>>>>>>> replaced non-timestamped stores in the DSL.) . In > >> both > >> > > the > >> > > > > >>>>>>>>>>> timestamped > >> > > > > >>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>> versioned cases, the old stores are/will still be > >> > > available > >> > > > > >>>>>> or > >> > > > > >>>>>>>>>>>> accessible > >> > > > > >>>>>>>>>>>>>>> to users via the bare StoreSuppliers, should they > >> > > somehow > >> > > > > >>>>>> desire > >> > > > > >>>>>>>> or > >> > > > > >>>>>>>>>>>>>>> require > >> > > > > >>>>>>>>>>>>>>> the old store type. Ultimately, I think either > >> this or > >> > > > > >>>>>> option (1) > >> > > > > >>>>>>>>>>>> would be > >> > > > > >>>>>>>>>>>>>>> preferable, though I think it should be up to > >> Matthias > >> > > or > >> > > > > >>>>>> anyone > >> > > > > >>>>>>>> else > >> > > > > >>>>>>>>>>>>>>> involved in the versioned stores feature to decide > >> > > which > >> > > > > >>>>>> approach > >> > > > > >>>>>>>>>>> makes > >> > > > > >>>>>>>>>>>>>>> sense in the context of that feature's future > >> plans. > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> A3: sounds reasonable to me > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> A5: Also sounds fine to me, though I'll let others > >> > > chime in > >> > > > > >>>>>>>> with/if > >> > > > > >>>>>>>>>>>> they > >> > > > > >>>>>>>>>>>>>>> have an alternative suggestion/preference. I > >> guess the > >> > > > > other > >> > > > > >>>>>>>>>>> contender > >> > > > > >>>>>>>>>>>>>>> would be something like DSLStoreImpl or something > >> like > >> > > > > that? > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> On Mon, Jul 24, 2023 at 9:36 AM Almog Gavra < > >> > > > > >>>>>>>> almog.ga...@gmail.com> > >> > > > > >>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> Lots of thoughts! Happy to see the thriving > >> > > discussion on > >> > > > > >>>>>> this > >> > > > > >>>>>>>> post > >> > > > > >>>>>>>>>>> - > >> > > > > >>>>>>>>>>>>>>> lots > >> > > > > >>>>>>>>>>>>>>>> going on so I'm trying to enumerate them to keep > >> > > things > >> > > > > >>>>>> organized > >> > > > > >>>>>>>>>>>>>>> (prefix > >> > > > > >>>>>>>>>>>>>>>> "A" for "Almog" so we can use numbers in > >> responses for > >> > > > > >>>>>> other > >> > > > > >>>>>>>> things > >> > > > > >>>>>>>>>>>> ;P). > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A1. Question around closing implementation gaps > >> (e.g. > >> > > no > >> > > > > >>>>>> rocks > >> > > > > >>>>>>>> based > >> > > > > >>>>>>>>>>>>>>>> suppression store) > >> > > > > >>>>>>>>>>>>>>>> A2. Specifically how to handle Versioned stores > >> > > > > >>>>>>>>>>>>>>>> A3. Configuration (new config/reuse old one + > >> new one > >> > > and > >> > > > > >>>>>>>> ordering > >> > > > > >>>>>>>>>>> of > >> > > > > >>>>>>>>>>>>>>>> config resolution) > >> > > > > >>>>>>>>>>>>>>>> A4. Drawing a line between what is implementation > >> > > detail > >> > > > > >>>>>> (not > >> > > > > >>>>>>>>>>> exposed > >> > > > > >>>>>>>>>>>> in > >> > > > > >>>>>>>>>>>>>>>> API) and what is customizable (exposed in API) > >> > > > > >>>>>>>>>>>>>>>> A5. Naming of StoreTypeSpec > >> > > > > >>>>>>>>>>>>>>>> A6. Param classes in StoreBuilders > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> ------------------------------ > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> Here are summaries for where it seems each of > >> these > >> > > stands > >> > > > > >>>>>>>> (trying > >> > > > > >>>>>>>>>>> not > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>> add any additional opinion yet): > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A1. Sophie/Guozhang/Me (if I count hah!) seem to > >> agree > >> > > > > >>>>>> that it is > >> > > > > >>>>>>>>>>>> worth > >> > > > > >>>>>>>>>>>>>>>> pushing this KIP through independently of the > >> > > > > >>>>>> implementation > >> > > > > >>>>>>>> gaps as > >> > > > > >>>>>>>>>>>> it > >> > > > > >>>>>>>>>>>>>>>> doesn't seem to move the intermediate state > >> further > >> > > from > >> > > > > >>>>>> the end > >> > > > > >>>>>>>>>>>> state. > >> > > > > >>>>>>>>>>>>>>>> Matthias originally had some concerns. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A2. There's questions around whether versioned > >> stores > >> > > > > >>>>>> should be > >> > > > > >>>>>>>>>>> their > >> > > > > >>>>>>>>>>>>>>> own > >> > > > > >>>>>>>>>>>>>>>> configurable option or whether they are an > >> > > implementation > >> > > > > >>>>>> detail > >> > > > > >>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>> StoreSpec should decide. It seems like the > >> discussion > >> > > is > >> > > > > >>>>>>>> converging > >> > > > > >>>>>>>>>>>>>>> here, > >> > > > > >>>>>>>>>>>>>>>> this should be an implementation detail. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A3. Matthias/Guozhang prefer adding CUSTOM and > >> then > >> > > having > >> > > > > >>>>>> an > >> > > > > >>>>>>>>>>>> additional > >> > > > > >>>>>>>>>>>>>>>> config to determine the implementation. Sophie > >> prefers > >> > > > > >>>>>>>> deprecating > >> > > > > >>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>> old > >> > > > > >>>>>>>>>>>>>>>> config. Guozhang additional suggested flipping > >> the > >> > > > > >>>>>> resolution > >> > > > > >>>>>>>> order > >> > > > > >>>>>>>>>>>> such > >> > > > > >>>>>>>>>>>>>>>> that the old config is only respected in a > >> > > > > DefaultStoreSpec > >> > > > > >>>>>>>>>>>>>>> implementation. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A4. This KIP (or rather, the discussion on the > >> KIP) > >> > > blurs > >> > > > > >>>>>> the > >> > > > > >>>>>>>> lines > >> > > > > >>>>>>>>>>>>>>> between > >> > > > > >>>>>>>>>>>>>>>> top level store types (KV, windowed, session) > >> and the > >> > > > > >>>>>> underlying > >> > > > > >>>>>>>>>>>>>>>> implementation of them (timestamped, versioned, > >> > > kv-list). > >> > > > > >>>>>> It > >> > > > > >>>>>>>> seems > >> > > > > >>>>>>>>>>>>>>> everyone > >> > > > > >>>>>>>>>>>>>>>> is in alignment to ensure that we keep these two > >> > > things > >> > > > > >>>>>> separate > >> > > > > >>>>>>>> and > >> > > > > >>>>>>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>> the line is clearly delineated in the text of > >> the KIP. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A5. Guozhang and Sophie agree that the current > >> name > >> > > > > >>>>>>>> StoreTypeSpec is > >> > > > > >>>>>>>>>>>>>>>> misleading, as it's really an implementation > >> spec, > >> > > not a > >> > > > > >>>>>> type > >> > > > > >>>>>>>>>>>>>>>> specification. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A6. Agreement that this is an improvement, Sophie > >> > > believes > >> > > > > >>>>>> this > >> > > > > >>>>>>>> can > >> > > > > >>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>> done > >> > > > > >>>>>>>>>>>>>>>> in a follow up but we should ensure our naming > >> is good > >> > > > > >>>>>> here so > >> > > > > >>>>>>>>>>> there's > >> > > > > >>>>>>>>>>>>>>> no > >> > > > > >>>>>>>>>>>>>>>> conflicts down the line. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> --------------------------------- > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> Ok, phew! Hopefully that covers it all! Now for > >> my > >> > > > > >>>>>> thoughts, > >> > > > > >>>>>>>>>>> hopefully > >> > > > > >>>>>>>>>>>>>>>> wrapping up some of these discussions: > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A1. @Matthias - are you still hesitant here? > >> What > >> > > would > >> > > > > >>>>>> you > >> > > > > >>>>>>>> need to > >> > > > > >>>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>>> convinced here? > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A2. Since we are all in agreement that versioned > >> > > stores > >> > > > > >>>>>> should > >> > > > > >>>>>>>> be an > >> > > > > >>>>>>>>>>>>>>>> implementation detail, we have two options: > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> (1) we can extend the KVParams to include a > >> parameter > >> > > that > >> > > > > >>>>>>>> indicates > >> > > > > >>>>>>>>>>>>>>>> whether or not the store should be versioned > >> > > > > >>>>>>>>>>>>>>>> (2) we can introduce a configuration for whether > >> or > >> > > not to > >> > > > > >>>>>> use a > >> > > > > >>>>>>>>>>>>>>> versioned > >> > > > > >>>>>>>>>>>>>>>> store, and each implementation can choose to > >> > > read/ignore > >> > > > > >>>>>> that > >> > > > > >>>>>>>> config > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> Any preferences? (1) would align more closely > >> with > >> > > what we > >> > > > > >>>>>> are > >> > > > > >>>>>>>> doing > >> > > > > >>>>>>>>>>>>>>> today > >> > > > > >>>>>>>>>>>>>>>> (they are a top-level concept in the Stores API). > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A3. I like Guozhang's suggestion of making the > >> > > "primary" > >> > > > > >>>>>>>>>>> configuration > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>> be the new one, and then having a > >> > > "DefaultStoreTypeSpec" > >> > > > > >>>>>> (using > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>> old > >> > > > > >>>>>>>>>>>>>>>> naming) which respects the old configuration. > >> That > >> > > seems > >> > > > > >>>>>> to solve > >> > > > > >>>>>>>>>>>> nearly > >> > > > > >>>>>>>>>>>>>>>> all the concerns (e.g. it'd be easy to see where > >> the > >> > > enum > >> > > > > >>>>>> is used > >> > > > > >>>>>>>>>>>>>>> because > >> > > > > >>>>>>>>>>>>>>>> it would only be used within that one class > >> instead of > >> > > > > >>>>>> littered > >> > > > > >>>>>>>>>>>>>>> throughout > >> > > > > >>>>>>>>>>>>>>>> the code base). > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> @Sophie, unless you have objections here I will > >> > > update the > >> > > > > >>>>>> KIP > >> > > > > >>>>>>>> to do > >> > > > > >>>>>>>>>>>>>>> that. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A4. I will make these changes to the KIP to make > >> it > >> > > clear. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A5. I will rename it `DslStorePlugin` - any > >> > > objections to > >> > > > > >>>>>> this > >> > > > > >>>>>>>> name? > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> A6. Let's punt this ;) I agree with everyone > >> that this > >> > > > > >>>>>> would be a > >> > > > > >>>>>>>>>>>>>>> welcome > >> > > > > >>>>>>>>>>>>>>>> improvement and that this KIP is aligned with > >> moving > >> > > in > >> > > > > >>>>>> that > >> > > > > >>>>>>>>>>>> direction. > >> > > > > >>>>>>>>>>>>>>>> Given how much discussion there was on this KIP, > >> > > which is > >> > > > > >>>>>> minor > >> > > > > >>>>>>>>>>>>>>> relative to > >> > > > > >>>>>>>>>>>>>>>> making the changes to StoreBuilder API, I'd > >> rather > >> > > not tie > >> > > > > >>>>>> the > >> > > > > >>>>>>>> two > >> > > > > >>>>>>>>>>>>>>>> together. > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> Cheers & Thanks everyone for the thoughts! > >> > > > > >>>>>>>>>>>>>>>> - Almog > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> On Sun, Jul 23, 2023 at 5:15 PM Sophie > >> Blee-Goldman < > >> > > > > >>>>>>>>>>>>>>>> ableegold...@gmail.com> > >> > > > > >>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> Guozhang: > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> On your 2nd point: > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> "impl types" (in hindsight it may not be a good > >> > > name) > >> > > > > for > >> > > > > >>>>>>>> rocksdb > >> > > > > >>>>>>>>>>> / > >> > > > > >>>>>>>>>>>>>>>>> memory / custom, and we used "store types" for > >> kv / > >> > > > > >>>>>> windowed / > >> > > > > >>>>>>>>>>>>>>> sessioned > >> > > > > >>>>>>>>>>>>>>>>> etc, > >> > > > > >>>>>>>>>>>>>>>>> First off, thanks so much for this > >> clarification -- > >> > > using > >> > > > > >>>>>> "store > >> > > > > >>>>>>>>>>>> type" > >> > > > > >>>>>>>>>>>>>>>> here > >> > > > > >>>>>>>>>>>>>>>>> was definitely making me uncomfortable as this > >> > > usually > >> > > > > >>>>>> refers > >> > > > > >>>>>>>> to KV > >> > > > > >>>>>>>>>>>> vs > >> > > > > >>>>>>>>>>>>>>>>> window, etc -- but I just couldn't for the life > >> of me > >> > > > > >>>>>> think of > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>> right > >> > > > > >>>>>>>>>>>>>>>>> term for rocks vs IM. We should 100% change to > >> > > something > >> > > > > >>>>>> like > >> > > > > >>>>>>>>>>>>>>>> StoreImplSpec > >> > > > > >>>>>>>>>>>>>>>>> for this kind of interface. > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> As for list-value store (for stream-stream > >> Join) > >> > > > > >>>>>>>>>>>>>>>>> Again, glad you mentioned this -- I forgot how > >> the > >> > > extra > >> > > > > >>>>>>>>>>>> stream-stream > >> > > > > >>>>>>>>>>>>>>>> join > >> > > > > >>>>>>>>>>>>>>>>> store is not a "regular" KV Store but rather > >> this > >> > > special > >> > > > > >>>>>>>>>>> list-value > >> > > > > >>>>>>>>>>>>>>>> store. > >> > > > > >>>>>>>>>>>>>>>>> If we proceed with something like the current > >> > > approach, > >> > > > > >>>>>> perhaps > >> > > > > >>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>> should > >> > > > > >>>>>>>>>>>>>>>>> be a boolean (or enum) parameter in the > >> KVConfig, > >> > > similar > >> > > > > >>>>>> to the > >> > > > > >>>>>>>>>>>>>>>>> EmitStrategy? After all, the high-level goal of > >> this > >> > > KIP > >> > > > > >>>>>> is to > >> > > > > >>>>>>>> be > >> > > > > >>>>>>>>>>>>>>> able to > >> > > > > >>>>>>>>>>>>>>>>> fully customize all DSL state stores, and this > >> is > >> > > > > >>>>>> currently not > >> > > > > >>>>>>>>>>>>>>> possible > >> > > > > >>>>>>>>>>>>>>>>> due to KAFKA-14976 < > >> > > > > >>>>>>>>>>>> https://issues.apache.org/jira/browse/KAFKA-14976 > >> > > > > >>>>>>>>>>>>>>>> . > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> If we expect there to be further customizations > >> like > >> > > this > >> > > > > >>>>>> going > >> > > > > >>>>>>>>>>>>>>> forward, > >> > > > > >>>>>>>>>>>>>>>>> perhaps we could instead have each of the three > >> > > > > >>>>>> StoreConfig > >> > > > > >>>>>>>> classes > >> > > > > >>>>>>>>>>>>>>>> accept > >> > > > > >>>>>>>>>>>>>>>>> a single enum parameter for the "sub-type" (or > >> > > whatever > >> > > > > >>>>>> you > >> > > > > >>>>>>>> want to > >> > > > > >>>>>>>>>>>>>>> call > >> > > > > >>>>>>>>>>>>>>>>> it), which would encompass (and replace) things > >> like > >> > > the > >> > > > > >>>>>>>>>>> EmitStrategy > >> > > > > >>>>>>>>>>>>>>> as > >> > > > > >>>>>>>>>>>>>>>>> well as the list-value type (we could define one > >> > > enum for > >> > > > > >>>>>> each > >> > > > > >>>>>>>>>>> Config > >> > > > > >>>>>>>>>>>>>>>> class > >> > > > > >>>>>>>>>>>>>>>>> so there is no accidentally requesting a > >> LIST_VALUE > >> > > > > >>>>>> subtype on a > >> > > > > >>>>>>>>>>>>>>>>> WindowStore). Thoughts? > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> Lastly, regarding 3.b: > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> I love that you brought this up because that is > >> > > actually > >> > > > > >>>>>> what I > >> > > > > >>>>>>>>>>> first > >> > > > > >>>>>>>>>>>>>>>>> proposed to Almog, ie introducing a param class > >> to > >> > > clean > >> > > > > >>>>>> up the > >> > > > > >>>>>>>>>>>>>>>>> StoreBuilder API, during our chat that led to > >> this > >> > > KIP. > >> > > > > He > >> > > > > >>>>>>>> pushed > >> > > > > >>>>>>>>>>>>>>> back, > >> > > > > >>>>>>>>>>>>>>>>> claiming (rightly so) that this change would be > >> huge > >> > > in > >> > > > > >>>>>> scope > >> > > > > >>>>>>>> for a > >> > > > > >>>>>>>>>>>>>>>> purely > >> > > > > >>>>>>>>>>>>>>>>> aesthetic/API change that doesn't add any > >> > > functionality, > >> > > > > >>>>>> and > >> > > > > >>>>>>>> that > >> > > > > >>>>>>>>>>> it > >> > > > > >>>>>>>>>>>>>>>> makes > >> > > > > >>>>>>>>>>>>>>>>> more sense to start with the DSL config since > >> there > >> > > is a > >> > > > > >>>>>> clear > >> > > > > >>>>>>>> gap > >> > > > > >>>>>>>>>>> in > >> > > > > >>>>>>>>>>>>>>>>> functionality there, particularly when it comes > >> to > >> > > custom > >> > > > > >>>>>> state > >> > > > > >>>>>>>>>>>> stores > >> > > > > >>>>>>>>>>>>>>>>> (reasons 1 & 3 in the Motivation section). He > >> did > >> > > agree > >> > > > > >>>>>> that the > >> > > > > >>>>>>>>>>>> param > >> > > > > >>>>>>>>>>>>>>>>> classes were a better API, which is why you see > >> them > >> > > in > >> > > > > >>>>>> this > >> > > > > >>>>>>>> KIP. > >> > > > > >>>>>>>>>>> In > >> > > > > >>>>>>>>>>>>>>>> other > >> > > > > >>>>>>>>>>>>>>>>> words: I fully agree that we should apply this > >> > > > > >>>>>> improvement to > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>> PAPI/StoreBuilder interface as well, but I think > >> > > that's a > >> > > > > >>>>>>>> distinct > >> > > > > >>>>>>>>>>>>>>>> concept > >> > > > > >>>>>>>>>>>>>>>>> for the time-being and should not block the DSL > >> > > > > >>>>>> improvement. > >> > > > > >>>>>>>>>>> Rather, > >> > > > > >>>>>>>>>>>> I > >> > > > > >>>>>>>>>>>>>>>>> consider this KIP as setting the stage for a > >> > > followup KIP > >> > > > > >>>>>> down > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>> line > >> > > > > >>>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>> clean up the StoreBuilders and bring them in > >> line > >> > > with > >> > > > > >>>>>> the new > >> > > > > >>>>>>>>>>>>>>>> param/config > >> > > > > >>>>>>>>>>>>>>>>> class approach. > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> That said, A) we should definitely make sure > >> > > whatever we > >> > > > > >>>>>>>> introduce > >> > > > > >>>>>>>>>>>>>>> here > >> > > > > >>>>>>>>>>>>>>>>> can be extended to the PAPI StoreBuilders in a > >> > > natural > >> > > > > >>>>>> way, and > >> > > > > >>>>>>>> B) > >> > > > > >>>>>>>>>>> I > >> > > > > >>>>>>>>>>>>>>>> should > >> > > > > >>>>>>>>>>>>>>>>> clarify that I personally would be happy to see > >> this > >> > > > > >>>>>> included in > >> > > > > >>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>> current KIP, but as Almog's KIP it's up to him > >> to > >> > > decide > >> > > > > >>>>>> whether > >> > > > > >>>>>>>>>>> he's > >> > > > > >>>>>>>>>>>>>>>>> comfortable expanding the scope like this. If > >> you can > >> > > > > >>>>>> convince > >> > > > > >>>>>>>> him > >> > > > > >>>>>>>>>>>>>>> where > >> > > > > >>>>>>>>>>>>>>>> I > >> > > > > >>>>>>>>>>>>>>>>> could not, more power to you! :P > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> On Sun, Jul 23, 2023 at 4:48 PM Sophie > >> Blee-Goldman < > >> > > > > >>>>>>>>>>>>>>>>> ableegold...@gmail.com> > >> > > > > >>>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> Matthias: > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> I'm not sure I agree with (or maybe don't > >> follow) > >> > > this > >> > > > > >>>>>> take: > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> we need all kind of `StoreTypeSpec` > >> > > implementations, > >> > > > > >>>>>>>>>>>>>>>>>>> and it might also imply that we need follow up > >> > > KIPs for > >> > > > > >>>>>> new > >> > > > > >>>>>>>>>>> feature > >> > > > > >>>>>>>>>>>>>>>>>>> (like in-memory versioned store) that might > >> not > >> > > need a > >> > > > > >>>>>> KIP > >> > > > > >>>>>>>>>>>>>>> otherwise. > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> I see this feature as being a nice > >> > > add-on/convenience > >> > > > > >>>>>> API for > >> > > > > >>>>>>>> any > >> > > > > >>>>>>>>>>>>>>> store > >> > > > > >>>>>>>>>>>>>>>>>> types which have a full DSL implementation. I > >> don't > >> > > > > >>>>>> think it's > >> > > > > >>>>>>>>>>>>>>>>> unreasonable > >> > > > > >>>>>>>>>>>>>>>>>> to just say that this feature is only going to > >> be > >> > > > > >>>>>> available for > >> > > > > >>>>>>>>>>>>>>> store > >> > > > > >>>>>>>>>>>>>>>>> types > >> > > > > >>>>>>>>>>>>>>>>>> that have KV, Window, and Session > >> implementations. I > >> > > > > >>>>>> can't > >> > > > > >>>>>>>> think > >> > > > > >>>>>>>>>>> of > >> > > > > >>>>>>>>>>>>>>> any > >> > > > > >>>>>>>>>>>>>>>>>> case besides versioned stores where this would > >> > > force a > >> > > > > >>>>>> KIP for > >> > > > > >>>>>>>> a > >> > > > > >>>>>>>>>>> new > >> > > > > >>>>>>>>>>>>>>>>>> feature that would not otherwise have to go > >> through > >> > > a > >> > > > > >>>>>> KIP, and > >> > > > > >>>>>>>>>>> even > >> > > > > >>>>>>>>>>>>>>> for > >> > > > > >>>>>>>>>>>>>>>>>> versioned state stores, the only issue is that > >> the > >> > > KIP > >> > > > > >>>>>> for that > >> > > > > >>>>>>>>>>> was > >> > > > > >>>>>>>>>>>>>>>>> already > >> > > > > >>>>>>>>>>>>>>>>>> accepted. > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> However, I think I agree on your main point -- > >> that > >> > > > > >>>>>> things like > >> > > > > >>>>>>>>>>>>>>>> "regular" > >> > > > > >>>>>>>>>>>>>>>>>> vs timestamped vs versioned are/should be an > >> > > > > >>>>>> implementation > >> > > > > >>>>>>>> detail > >> > > > > >>>>>>>>>>>>>>>> that's > >> > > > > >>>>>>>>>>>>>>>>>> hidden from the user. As I noted previously, > >> the > >> > > current > >> > > > > >>>>>> KIP > >> > > > > >>>>>>>>>>>>>>> actually > >> > > > > >>>>>>>>>>>>>>>>>> greatly improves the situation for timestamped > >> > > stores, > >> > > > > >>>>>> as this > >> > > > > >>>>>>>>>>>>>>> would be > >> > > > > >>>>>>>>>>>>>>>>>> handled completely transparently by the OOTB > >> > > > > >>>>>> RocksDBStoreSpec. > >> > > > > >>>>>>>> To > >> > > > > >>>>>>>>>>>>>>> me, > >> > > > > >>>>>>>>>>>>>>>>> this > >> > > > > >>>>>>>>>>>>>>>>>> provides a very natural way to let the DSL > >> operators > >> > > > > >>>>>> using the > >> > > > > >>>>>>>>>>>>>>> default > >> > > > > >>>>>>>>>>>>>>>>>> store type/spec to specify which kind of store > >> (eg > >> > > > > >>>>>>>>>>>>>>>>>> versioned/timestamped/etc) it wants, and > >> choose the > >> > > > > >>>>>> correct > >> > > > > >>>>>>>>>>>>>>> default. If > >> > > > > >>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>> eventual intention is to have versioned state > >> stores > >> > > > > >>>>>> replace > >> > > > > >>>>>>>>>>>>>>>> timestamped > >> > > > > >>>>>>>>>>>>>>>>>> stores as the default in the DSL, then we can > >> simply > >> > > > > >>>>>> swap out > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>> versioned > >> > > > > >>>>>>>>>>>>>>>>>> stores for the timestamped stores in the > >> > > > > >>>>>> RocksDBStoreTypeSpec, > >> > > > > >>>>>>>>>>> when > >> > > > > >>>>>>>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>>>> time comes. Until then, users who want to use > >> the > >> > > > > >>>>>> versioned > >> > > > > >>>>>>>> store > >> > > > > >>>>>>>>>>>>>>> will > >> > > > > >>>>>>>>>>>>>>>>> have > >> > > > > >>>>>>>>>>>>>>>>>> to do what they do today, which is individually > >> > > override > >> > > > > >>>>>>>> operators > >> > > > > >>>>>>>>>>>>>>> via > >> > > > > >>>>>>>>>>>>>>>>>> Materialized/StoreSuppliers. > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> All in all, it sounds like we should not offer > >> a > >> > > > > >>>>>> versioned > >> > > > > >>>>>>>> store > >> > > > > >>>>>>>>>>>>>>> type > >> > > > > >>>>>>>>>>>>>>>>>> spec, as "versioned" is more akin to > >> "timestamped" > >> > > than > >> > > > > >>>>>> to a > >> > > > > >>>>>>>> true > >> > > > > >>>>>>>>>>>>>>>>>> difference in underlying store implementation > >> type > >> > > (eg > >> > > > > >>>>>> rocks vs > >> > > > > >>>>>>>>>>>>>>>>> in-memory). > >> > > > > >>>>>>>>>>>>>>>>>> W.r.t whether to deprecate the old config or > >> > > introduce a > >> > > > > >>>>>> new > >> > > > > >>>>>>>>>>> CUSTOM > >> > > > > >>>>>>>>>>>>>>>> enum > >> > > > > >>>>>>>>>>>>>>>>>> type, either seems fine to me, and we can go > >> with > >> > > that > >> > > > > >>>>>>>> alternative > >> > > > > >>>>>>>>>>>>>>>>> instead. > >> > > > > >>>>>>>>>>>>>>>>>> The only other con to this approach that I can > >> > > think of, > >> > > > > >>>>>> and > >> > > > > >>>>>>>> I'm > >> > > > > >>>>>>>>>>>>>>>> honestly > >> > > > > >>>>>>>>>>>>>>>>>> not sure if this is something users would care > >> > > about or > >> > > > > >>>>>> only > >> > > > > >>>>>>>> devs, > >> > > > > >>>>>>>>>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>>>> the advantage to moving rocks and IM to the > >> store > >> > > type > >> > > > > >>>>>> spec > >> > > > > >>>>>>>>>>>>>>> interface > >> > > > > >>>>>>>>>>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>>> that it helps to keep the relevant logic > >> > > encapsulated in > >> > > > > >>>>>> one > >> > > > > >>>>>>>> easy > >> > > > > >>>>>>>>>>>>>>> place > >> > > > > >>>>>>>>>>>>>>>>> you > >> > > > > >>>>>>>>>>>>>>>>>> can quickly check to tell what kind of state > >> store > >> > > is > >> > > > > >>>>>> used > >> > > > > >>>>>>>> where. > >> > > > > >>>>>>>>>>> In > >> > > > > >>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>> current code, I found it extremely annoying and > >> > > > > >>>>>> difficult to > >> > > > > >>>>>>>> track > >> > > > > >>>>>>>>>>>>>>> down > >> > > > > >>>>>>>>>>>>>>>>> all > >> > > > > >>>>>>>>>>>>>>>>>> usages of the StoreType enum to see which > >> actual > >> > > rocksdb > >> > > > > >>>>>> store > >> > > > > >>>>>>>> was > >> > > > > >>>>>>>>>>>>>>>> being > >> > > > > >>>>>>>>>>>>>>>>>> used where (for example some stores using the > >> > > > > >>>>>> TimeOrderedBuffer > >> > > > > >>>>>>>>>>>>>>>> variants > >> > > > > >>>>>>>>>>>>>>>>> in > >> > > > > >>>>>>>>>>>>>>>>>> some special cases, or to understand whether > >> the > >> > > DSL was > >> > > > > >>>>>>>>>>> defaulting > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>>> plain, timestamped, or versioned stores for > >> RocksDB > >> > > vs > >> > > > > >>>>>>>> InMemory -- > >> > > > > >>>>>>>>>>>>>>> both > >> > > > > >>>>>>>>>>>>>>>>> of > >> > > > > >>>>>>>>>>>>>>>>>> which seem like they could be of interest to a > >> > > user). > >> > > > > >>>>>> This > >> > > > > >>>>>>>> would > >> > > > > >>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>>> much > >> > > > > >>>>>>>>>>>>>>>>>> easier if everything was handled in one place, > >> and > >> > > you > >> > > > > >>>>>> can > >> > > > > >>>>>>>> just go > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>> (eg) RocksDBStoreTypeSpec and see what it's > >> doing, > >> > > or > >> > > > > >>>>>> find > >> > > > > >>>>>>>> usages > >> > > > > >>>>>>>>>>> of > >> > > > > >>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>> methods to understand what stores are being > >> handed > >> > > to > >> > > > > >>>>>> which DSL > >> > > > > >>>>>>>>>>>>>>>>> operators. > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> I suppose we could still clean up the API and > >> solve > >> > > this > >> > > > > >>>>>>>> problem > >> > > > > >>>>>>>>>>> by > >> > > > > >>>>>>>>>>>>>>>>> having > >> > > > > >>>>>>>>>>>>>>>>>> the old (and new) config delegate to a > >> > > StoreTypeSpec no > >> > > > > >>>>>> matter > >> > > > > >>>>>>>>>>> what, > >> > > > > >>>>>>>>>>>>>>>> but > >> > > > > >>>>>>>>>>>>>>>>>> make RocksDBStoreTypeSpec and > >> InMemoryStoreTypeSpec > >> > > > > >>>>>> internal > >> > > > > >>>>>>>>>>> classes > >> > > > > >>>>>>>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>>>> are simply implementation details of the > >> ROCKSDB vs > >> > > > > >>>>>> IN_MEMORY > >> > > > > >>>>>>>>>>> enums. > >> > > > > >>>>>>>>>>>>>>>>> WDYT? > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> On Sun, Jul 23, 2023 at 11:14 AM Guozhang Wang > >> < > >> > > > > >>>>>>>>>>>>>>>>> guozhang.wang...@gmail.com> > >> > > > > >>>>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> Thanks everyone for the great discussions so > >> far! I > >> > > > > >>>>>> first saw > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>> JIRA > >> > > > > >>>>>>>>>>>>>>>>>>> and left some quick thoughts without being > >> aware > >> > > of the > >> > > > > >>>>>>>>>>>>>>>>>>> already-written KIP (kudos to Almog, very > >> great > >> > > one) > >> > > > > >>>>>> and the > >> > > > > >>>>>>>>>>>>>>> DISCUSS > >> > > > > >>>>>>>>>>>>>>>>>>> thread here. And I happily find some of my > >> initial > >> > > > > >>>>>> thoughts > >> > > > > >>>>>>>> align > >> > > > > >>>>>>>>>>>>>>> with > >> > > > > >>>>>>>>>>>>>>>>>>> the KIP already :) > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> Would like to add a bit more of my 2c after > >> reading > >> > > > > >>>>>> through > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>> KIP > >> > > > > >>>>>>>>>>>>>>>>>>> and the thread here: > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> 1. On the high level, I'm in favor of pushing > >> this > >> > > KIP > >> > > > > >>>>>> through > >> > > > > >>>>>>>>>>>>>>> without > >> > > > > >>>>>>>>>>>>>>>>>>> waiting on the other gaps to be closed. In my > >> back > >> > > > > >>>>>> pocket's > >> > > > > >>>>>>>>>>>>>>>>>>> "dependency graph" of Kafka Streams roadmap of > >> > > large > >> > > > > >>>>>> changes > >> > > > > >>>>>>>> or > >> > > > > >>>>>>>>>>>>>>>>>>> feature gaps, the edges of dependencies are > >> defined > >> > > > > >>>>>> based on > >> > > > > >>>>>>>> my > >> > > > > >>>>>>>>>>>>>>>>>>> understanding of whether doing one first would > >> > > largely > >> > > > > >>>>>>>>>>> complicate / > >> > > > > >>>>>>>>>>>>>>>>>>> negate the effort of the other but not vice > >> versa, > >> > > in > >> > > > > >>>>>> which > >> > > > > >>>>>>>> case > >> > > > > >>>>>>>>>>> we > >> > > > > >>>>>>>>>>>>>>>>>>> should consider getting the other done first. > >> In > >> > > this > >> > > > > >>>>>> case, I > >> > > > > >>>>>>>>>>> feel > >> > > > > >>>>>>>>>>>>>>>>>>> such a dependency is not strong enough, so > >> > > encouraging > >> > > > > >>>>>> the KIP > >> > > > > >>>>>>>>>>>>>>>>>>> contributor to finish what he/she would love > >> to do > >> > > to > >> > > > > >>>>>> close > >> > > > > >>>>>>>> some > >> > > > > >>>>>>>>>>>>>>> gaps > >> > > > > >>>>>>>>>>>>>>>>>>> early would be higher priorities. I did not > >> see by > >> > > just > >> > > > > >>>>>> doing > >> > > > > >>>>>>>>>>> this > >> > > > > >>>>>>>>>>>>>>> we > >> > > > > >>>>>>>>>>>>>>>>>>> could end up in a worse intermediate stage > >> yet, > >> > > but I > >> > > > > >>>>>> could be > >> > > > > >>>>>>>>>>>>>>>>>>> corrected. > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> 2. Regarding the store types --- gain here I'd > >> > > like to > >> > > > > >>>>>> just > >> > > > > >>>>>>>>>>> clarify > >> > > > > >>>>>>>>>>>>>>>>>>> the terms a bit since in the past it has some > >> > > > > >>>>>> confusions: we > >> > > > > >>>>>>>> used > >> > > > > >>>>>>>>>>>>>>>>>>> "impl types" (in hindsight it may not be a > >> good > >> > > name) > >> > > > > >>>>>> for > >> > > > > >>>>>>>>>>> rocksdb / > >> > > > > >>>>>>>>>>>>>>>>>>> memory / custom, and we used "store types" > >> for kv / > >> > > > > >>>>>> windowed / > >> > > > > >>>>>>>>>>>>>>>>>>> sessioned etc, as I said in the JIRA I think > >> the > >> > > > > current > >> > > > > >>>>>>>> proposal > >> > > > > >>>>>>>>>>>>>>> also > >> > > > > >>>>>>>>>>>>>>>>>>> have a good side effect as quality bar to > >> really > >> > > > > >>>>>> enforce us > >> > > > > >>>>>>>> think > >> > > > > >>>>>>>>>>>>>>>>>>> twice when trying to add more store types in > >> the > >> > > future > >> > > > > >>>>>> as it > >> > > > > >>>>>>>>>>> will > >> > > > > >>>>>>>>>>>>>>>>>>> impact API instantiations. In the ideal > >> world, I > >> > > would > >> > > > > >>>>>>>> consider: > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> * We have (timestamped) kv store, versioned kv > >> > > store, > >> > > > > >>>>>> window > >> > > > > >>>>>>>>>>> store, > >> > > > > >>>>>>>>>>>>>>>>>>> session store as first-class DSL store types. > >> Some > >> > > DSL > >> > > > > >>>>>>>> operators > >> > > > > >>>>>>>>>>>>>>> could > >> > > > > >>>>>>>>>>>>>>>>>>> accept multiple store types (e.g. versioned > >> and non > >> > > > > >>>>>> versioned > >> > > > > >>>>>>>>>>>>>>>>>>> kv-store) for semantics / efficiency > >> trade-offs. > >> > > But I > >> > > > > >>>>>> think > >> > > > > >>>>>>>> we > >> > > > > >>>>>>>>>>>>>>> would > >> > > > > >>>>>>>>>>>>>>>>>>> remove un-timestamped kv stores eventually > >> since > >> > > that > >> > > > > >>>>>>>> efficiency > >> > > > > >>>>>>>>>>>>>>>>>>> trade-off is so minimal compared to its usage > >> > > > > >>>>>> limitations. > >> > > > > >>>>>>>>>>>>>>>>>>> * As for list-value store (for stream-stream > >> Join), > >> > > > > >>>>>>>>>>>>>>> memory-lru-cache > >> > > > > >>>>>>>>>>>>>>>>>>> (for PAPI use only), > >> memory-time-ordered-buffer > >> > > (for > >> > > > > >>>>>>>>>>> suppression), > >> > > > > >>>>>>>>>>>>>>>>>>> they would not be exposed as DSL first-class > >> store > >> > > > > >>>>>> types in > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> future. Instead, they would be treated as > >> internal > >> > > used > >> > > > > >>>>>> stores > >> > > > > >>>>>>>>>>>>>>> (e.g. > >> > > > > >>>>>>>>>>>>>>>>>>> list-value store is built on key-value store > >> with > >> > > > > >>>>>> specialized > >> > > > > >>>>>>>>>>> serde > >> > > > > >>>>>>>>>>>>>>>>>>> and putInternal), or continue to be just > >> convenient > >> > > > > >>>>>> OOTB PAPI > >> > > > > >>>>>>>>>>> used > >> > > > > >>>>>>>>>>>>>>>>>>> stores only. > >> > > > > >>>>>>>>>>>>>>>>>>> * As we move on, we will continue to be very, > >> very > >> > > > > >>>>>> strict on > >> > > > > >>>>>>>> what > >> > > > > >>>>>>>>>>>>>>>>>>> would be added as DSL store types (and hence > >> > > requires > >> > > > > >>>>>> changes > >> > > > > >>>>>>>> to > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> proposed APIs), what to be added as > >> convenient OOTB > >> > > > > >>>>>> PAPI store > >> > > > > >>>>>>>>>>>>>>> impls > >> > > > > >>>>>>>>>>>>>>>>>>> only, what to be added as internal used store > >> types > >> > > > > that > >> > > > > >>>>>>>> should > >> > > > > >>>>>>>>>>>>>>> not be > >> > > > > >>>>>>>>>>>>>>>>>>> exposed to users nor customizable at all. > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> 3. Some more detailed thoughts below: > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> 3.a) I originally also think that we can > >> extend the > >> > > > > >>>>>> existing > >> > > > > >>>>>>>>>>>>>>> config, > >> > > > > >>>>>>>>>>>>>>>>>>> rather than replacing it. The difference was > >> that > >> > > I was > >> > > > > >>>>>>>> thinking > >> > > > > >>>>>>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>>>>> order-wise, the runtime would look at the API > >> > > first, > >> > > > > >>>>>> and then > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> config, whereas in your rejected alternative > >> it was > >> > > > > >>>>>> looking at > >> > > > > >>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> config first, and then the API --- that I > >> think is > >> > > a > >> > > > > >>>>>> minor > >> > > > > >>>>>>>> thing > >> > > > > >>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>> either is fine. I'm in agreement that having > >> two > >> > > > > configs > >> > > > > >>>>>>>> would be > >> > > > > >>>>>>>>>>>>>>> more > >> > > > > >>>>>>>>>>>>>>>>>>> confusing to users to learn about their > >> precedence > >> > > > > >>>>>> rather than > >> > > > > >>>>>>>>>>>>>>>>>>> helpful, but if we keep both a config and a > >> public > >> > > API, > >> > > > > >>>>>> then > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> precedence ordering would not be so confusing > >> as > >> > > long > >> > > > > >>>>>> as we > >> > > > > >>>>>>>> state > >> > > > > >>>>>>>>>>>>>>> them > >> > > > > >>>>>>>>>>>>>>>>>>> clearly. For example: > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> * We have DefaultStoreTypeSpec OOTB, in that > >> impl > >> > > we > >> > > > > >>>>>> look at > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> config only, and would only expect either > >> ROCKS or > >> > > > > >>>>>> MEMORY, and > >> > > > > >>>>>>>>>>>>>>> return > >> > > > > >>>>>>>>>>>>>>>>>>> corresponding OOTB store impls; if any other > >> values > >> > > > > >>>>>>>> configured, > >> > > > > >>>>>>>>>>> we > >> > > > > >>>>>>>>>>>>>>>>>>> error out. > >> > > > > >>>>>>>>>>>>>>>>>>> * Users extend that by having > >> MyStoreTypeSpec, in > >> > > which > >> > > > > >>>>>> they > >> > > > > >>>>>>>>>>> could > >> > > > > >>>>>>>>>>>>>>> do > >> > > > > >>>>>>>>>>>>>>>>>>> arbituray things without respecting the > >> config at > >> > > all, > >> > > > > >>>>>> but our > >> > > > > >>>>>>>>>>>>>>>>>>> recommended pattern in docs would still say > >> "look > >> > > into > >> > > > > >>>>>> the > >> > > > > >>>>>>>>>>> config, > >> > > > > >>>>>>>>>>>>>>> if > >> > > > > >>>>>>>>>>>>>>>>>>> it is ROCKS or MEMORY just return fall back to > >> > > > > >>>>>>>>>>>>>>> DefaultStoreTypeSepc; > >> > > > > >>>>>>>>>>>>>>>>>>> otherwise if it's some String you recognize, > >> then > >> > > > > >>>>>> return your > >> > > > > >>>>>>>>>>>>>>>>>>> customized store based on the string value, > >> > > otherwise > >> > > > > >>>>>> error > >> > > > > >>>>>>>> out". > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> 3.b) About the struct-like Params classes, I > >> like > >> > > the > >> > > > > >>>>>> idea a > >> > > > > >>>>>>>> lot > >> > > > > >>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>> wished we would pursue this in the first > >> place, > >> > > but if > >> > > > > >>>>>> we > >> > > > > >>>>>>>> only do > >> > > > > >>>>>>>>>>>>>>> this > >> > > > > >>>>>>>>>>>>>>>>>>> in Spec it would leave some inconsistencies > >> with > >> > > the > >> > > > > >>>>>>>>>>> StoreBuilders > >> > > > > >>>>>>>>>>>>>>>>>>> though arguably the latter is only for PAPI. > >> I'm > >> > > > > >>>>>> wondering if > >> > > > > >>>>>>>> we > >> > > > > >>>>>>>>>>>>>>>>>>> should consider including the changes in > >> > > StoreBuilders > >> > > > > >>>>>> (e.g. > >> > > > > >>>>>>>>>>>>>>>>>>> WindowStoreBuilder(WindowSupplierParams)), > >> and if > >> > > yes, > >> > > > > >>>>>> maybe > >> > > > > >>>>>>>> we > >> > > > > >>>>>>>>>>>>>>> should > >> > > > > >>>>>>>>>>>>>>>>>>> also consider renaming that e.g. > >> > > `WindowSupplierParams` > >> > > > > >>>>>> to > >> > > > > >>>>>>>>>>>>>>>>>>> `WindowStoreSpecParams` too? For this one I > >> only > >> > > have a > >> > > > > >>>>>> "weak > >> > > > > >>>>>>>>>>>>>>> feeling" > >> > > > > >>>>>>>>>>>>>>>>>>> so I can be convinced otherwise :P > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> Thanks, > >> > > > > >>>>>>>>>>>>>>>>>>> Guozhang > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> On Sun, Jul 23, 2023 at 9:52 AM Matthias J. > >> Sax < > >> > > > > >>>>>>>>>>> mj...@apache.org> > >> > > > > >>>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> Thanks for all the input. My intention was > >> not to > >> > > > > >>>>>> block the > >> > > > > >>>>>>>> KIP, > >> > > > > >>>>>>>>>>>>>>> but > >> > > > > >>>>>>>>>>>>>>>>>>>> just to take a step back and try get a > >> holistic > >> > > > > >>>>>> picture and > >> > > > > >>>>>>>>>>>>>>>>> discussion, > >> > > > > >>>>>>>>>>>>>>>>>>>> to explore if there are good/viable > >> alternative > >> > > > > >>>>>> designs. As > >> > > > > >>>>>>>> said > >> > > > > >>>>>>>>>>>>>>>>>>>> originally, I really like to close this gap, > >> and > >> > > was > >> > > > > >>>>>> always > >> > > > > >>>>>>>>>>> aware > >> > > > > >>>>>>>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>>>>>> the current config is not flexible enough. > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> I guess, my "concern" is that the KIP does > >> > > increase > >> > > > > >>>>>> the API > >> > > > > >>>>>>>>>>>>>>> surface > >> > > > > >>>>>>>>>>>>>>>>> area > >> > > > > >>>>>>>>>>>>>>>>>>>> significantly, as we need all kind of > >> > > `StoreTypeSpec` > >> > > > > >>>>>>>>>>>>>>>> implementations, > >> > > > > >>>>>>>>>>>>>>>>>>>> and it might also imply that we need follow > >> up > >> > > KIPs > >> > > > > >>>>>> for new > >> > > > > >>>>>>>>>>>>>>> feature > >> > > > > >>>>>>>>>>>>>>>>>>>> (like in-memory versioned store) that might > >> not > >> > > need a > >> > > > > >>>>>> KIP > >> > > > > >>>>>>>>>>>>>>>> otherwise. > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> The second question is if it might make the > >> > > already > >> > > > > >>>>>> "patchy" > >> > > > > >>>>>>>>>>>>>>>> situation > >> > > > > >>>>>>>>>>>>>>>>>>>> with regard to customization worse. > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> We did de-scope the original KIP-591 for this > >> > > reason, > >> > > > > >>>>>> and > >> > > > > >>>>>>>> given > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>> new > >> > > > > >>>>>>>>>>>>>>>>>>>> situation of the DSL, it seems that it > >> actually > >> > > got > >> > > > > >>>>>> worse > >> > > > > >>>>>>>>>>>>>>> compared > >> > > > > >>>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>>>>> back in the days. > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> Lastly, I hope to make the new versioned > >> stores > >> > > the > >> > > > > >>>>>> default > >> > > > > >>>>>>>> in > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>> DSL > >> > > > > >>>>>>>>>>>>>>>>>>>> and we did not do it in the previous KIP due > >> to > >> > > > > >>>>>> backward > >> > > > > >>>>>>>>>>>>>>>> compatibility > >> > > > > >>>>>>>>>>>>>>>>>>>> issues. Thus, from a DSL point of view, I > >> believe > >> > > > > there > >> > > > > >>>>>>>> should > >> > > > > >>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>>> only > >> > > > > >>>>>>>>>>>>>>>>>>>> "RocksDB", "InMemory", and "Custom" in an > >> ideal > >> > > world. > >> > > > > >>>>>>>>>>>>>>> Introducing > >> > > > > >>>>>>>>>>>>>>>> (I > >> > > > > >>>>>>>>>>>>>>>>> am > >> > > > > >>>>>>>>>>>>>>>>>>>> exaggerating to highlight my point) > >> > > "KvRocksDbSpec", > >> > > > > >>>>>>>>>>>>>>>>>>>> "TimestampeKvRocksDbSpec", > >> "VersionedRocksDbSpec", > >> > > > > >>>>>> plus the > >> > > > > >>>>>>>>>>>>>>>>>>>> corresponding in-memory specs seems to head > >> into > >> > > the > >> > > > > >>>>>> opposite > >> > > > > >>>>>>>>>>>>>>>>> direction. > >> > > > > >>>>>>>>>>>>>>>>>>>> -- My goal is to give users a handle of the > >> > > _physical_ > >> > > > > >>>>>> store > >> > > > > >>>>>>>>>>>>>>>> (RocksDB > >> > > > > >>>>>>>>>>>>>>>>> vs > >> > > > > >>>>>>>>>>>>>>>>>>>> InMemory vs Custom) but not the _logical_ > >> stores > >> > > > > >>>>>> (plain kv, > >> > > > > >>>>>>>>>>>>>>> ts-kv, > >> > > > > >>>>>>>>>>>>>>>>>>>> versioned) which is "dictated" by the DSL > >> itself > >> > > and > >> > > > > >>>>>> should > >> > > > > >>>>>>>> not > >> > > > > >>>>>>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>>>>>>> customizable (we are just in a weird > >> intermediate > >> > > > > >>>>>> situation > >> > > > > >>>>>>>> that > >> > > > > >>>>>>>>>>>>>>> we > >> > > > > >>>>>>>>>>>>>>>>> need > >> > > > > >>>>>>>>>>>>>>>>>>>> to clean up, but not "lean into" IMHO). > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> Thus, I am also not sure if adding > >> > > > > >>>>>> "VersionedRocksDbSpec" > >> > > > > >>>>>>>> would > >> > > > > >>>>>>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>>>> ideal > >> > > > > >>>>>>>>>>>>>>>>>>>> (also, given that it only changes a single > >> store, > >> > > but > >> > > > > >>>>>> not the > >> > > > > >>>>>>>>>>> two > >> > > > > >>>>>>>>>>>>>>>>>>>> windowed stores)? > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> Furthermore, I actually hope that we could > >> use > >> > > the new > >> > > > > >>>>>>>> versioned > >> > > > > >>>>>>>>>>>>>>>> store > >> > > > > >>>>>>>>>>>>>>>>>>>> to replace the window- and sessions- stores, > >> and > >> > > thus > >> > > > > >>>>>> to > >> > > > > >>>>>>>>>>> decrease > >> > > > > >>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>> number of required store types. > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> Admittedly, I am talking a lot about a > >> potential > >> > > > > >>>>>> future, but > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>> goal > >> > > > > >>>>>>>>>>>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>>>>> only to explore opportunities to not get into > >> > > "worse" > >> > > > > >>>>>>>>>>>>>>> intermediate > >> > > > > >>>>>>>>>>>>>>>>>>>> state, that will require a huge deprecation > >> > > surface > >> > > > > >>>>>> area > >> > > > > >>>>>>>> later > >> > > > > >>>>>>>>>>>>>>> on. > >> > > > > >>>>>>>>>>>>>>>> Of > >> > > > > >>>>>>>>>>>>>>>>>>>> course, if there is no better way, and my > >> > > concerns are > >> > > > > >>>>>> not > >> > > > > >>>>>>>>>>>>>>> shared, I > >> > > > > >>>>>>>>>>>>>>>>> am > >> > > > > >>>>>>>>>>>>>>>>>>>> ok to move forward with the KIP. > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> Bottom line: I would personally prefer to > >> keep the > >> > > > > >>>>>> current > >> > > > > >>>>>>>>>>> config > >> > > > > >>>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>>> add a `Custom` option to it, plus adding one > >> new > >> > > > > >>>>>> config that > >> > > > > >>>>>>>>>>>>>>> allows > >> > > > > >>>>>>>>>>>>>>>>>>>> people to set their custom `StoreTypeSpec` > >> class. > >> > > -- I > >> > > > > >>>>>> would > >> > > > > >>>>>>>> not > >> > > > > >>>>>>>>>>>>>>>> add a > >> > > > > >>>>>>>>>>>>>>>>>>>> built-in spec for versioned stores at this > >> point > >> > > (or > >> > > > > >>>>>> any > >> > > > > >>>>>>>> other > >> > > > > >>>>>>>>>>>>>>>>> built-in > >> > > > > >>>>>>>>>>>>>>>>>>>> `StorytypeSpec` implementations). I guess, > >> users > >> > > could > >> > > > > >>>>>> write > >> > > > > >>>>>>>> a > >> > > > > >>>>>>>>>>>>>>>> custom > >> > > > > >>>>>>>>>>>>>>>>>>>> spec if they want to enable versioned store > >> > > across the > >> > > > > >>>>>> board > >> > > > > >>>>>>>> for > >> > > > > >>>>>>>>>>>>>>> now > >> > > > > >>>>>>>>>>>>>>>>>>>> (until we make them the default anyway)? > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> Hope my train of thoughts is halfway > >> reasonable > >> > > and > >> > > > > not > >> > > > > >>>>>>>> totally > >> > > > > >>>>>>>>>>>>>>> off > >> > > > > >>>>>>>>>>>>>>>>>>> track? > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> -Matthias > >> > > > > >>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>> On 7/21/23 15:27, Sophie Blee-Goldman wrote: > >> > > > > >>>>>>>>>>>>>>>>>>>>> I agree with everything Almog said above, > >> and > >> > > will > >> > > > > >>>>>> just add > >> > > > > >>>>>>>> on > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>> two > >> > > > > >>>>>>>>>>>>>>>>>>>>> points: > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> 1. Regarding whether to block this KIP on > >> the > >> > > > > >>>>>> completion of > >> > > > > >>>>>>>>>>>>>>> any or > >> > > > > >>>>>>>>>>>>>>>>> all > >> > > > > >>>>>>>>>>>>>>>>>>>>> future implementations of in-memory version > >> > > stores > >> > > > > (or > >> > > > > >>>>>>>> persist > >> > > > > >>>>>>>>>>>>>>>>>>> suppression > >> > > > > >>>>>>>>>>>>>>>>>>>>> buffers), I feel that would be unfair to > >> this > >> > > feature > >> > > > > >>>>>> which > >> > > > > >>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>>>> completely > >> > > > > >>>>>>>>>>>>>>>>>>>>> unrelated to the semantic improvements > >> offered by > >> > > > > >>>>>> versioned > >> > > > > >>>>>>>>>>>>>>> state > >> > > > > >>>>>>>>>>>>>>>>>>> stores. > >> > > > > >>>>>>>>>>>>>>>>>>>>> It seems like the responsibility of those > >> > > driving the > >> > > > > >>>>>>>> versioned > >> > > > > >>>>>>>>>>>>>>>>> state > >> > > > > >>>>>>>>>>>>>>>>>>>>> stores feature, not Almog/this KIP, to make > >> sure > >> > > that > >> > > > > >>>>>> those > >> > > > > >>>>>>>>>>>>>>> bases > >> > > > > >>>>>>>>>>>>>>>>> are > >> > > > > >>>>>>>>>>>>>>>>>>>>> covered. Further, if anything, this KIP > >> will help > >> > > > > >>>>>> with the > >> > > > > >>>>>>>>>>>>>>> massive > >> > > > > >>>>>>>>>>>>>>>>>>>>> proliferation of StoreSuppliers on the > >> Stores > >> > > factory > >> > > > > >>>>>> class, > >> > > > > >>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>> provide > >> > > > > >>>>>>>>>>>>>>>>>>>>> users with a much easier way to leverage the > >> > > > > versioned > >> > > > > >>>>>>>> stores > >> > > > > >>>>>>>>>>>>>>>>> without > >> > > > > >>>>>>>>>>>>>>>>>>>>> having to muck around directly with the > >> > > > > >>>>>> StoreSuppliers. > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> I also thought about it a bit, and really > >> like > >> > > > > Almog's > >> > > > > >>>>>>>>>>>>>>> suggestion > >> > > > > >>>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>>>>>> introduce an additional StoreSpec for the > >> > > Versioned > >> > > > > >>>>>> state > >> > > > > >>>>>>>>>>>>>>> stores. > >> > > > > >>>>>>>>>>>>>>>>>>> Obviously > >> > > > > >>>>>>>>>>>>>>>>>>>>> we can add the RocksDB one to this KIP now, > >> and > >> > > then > >> > > > > >>>>>> as he > >> > > > > >>>>>>>>>>>>>>>>> mentioned, > >> > > > > >>>>>>>>>>>>>>>>>>>>> there's an easy way to get users onto the > >> > > > > >>>>>>>> IMVersionedStateStore > >> > > > > >>>>>>>>>>>>>>>>> types > >> > > > > >>>>>>>>>>>>>>>>>>> once > >> > > > > >>>>>>>>>>>>>>>>>>>>> they are completed. > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> Lastly, on this note, I want to point out > >> how > >> > > > > >>>>>> smoothly this > >> > > > > >>>>>>>>>>>>>>> solved > >> > > > > >>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>> issue of timestamped stores, which are > >> intended > >> > > to be > >> > > > > >>>>>> the > >> > > > > >>>>>>>> DSL > >> > > > > >>>>>>>>>>>>>>>>> default > >> > > > > >>>>>>>>>>>>>>>>>>> but > >> > > > > >>>>>>>>>>>>>>>>>>>>> are only a special case for RocksDB. Right > >> now > >> > > it can > >> > > > > >>>>>> be > >> > > > > >>>>>>>>>>>>>>> confusing > >> > > > > >>>>>>>>>>>>>>>>>>> for a > >> > > > > >>>>>>>>>>>>>>>>>>>>> user scrolling through the endless Stores > >> class > >> > > and > >> > > > > >>>>>> seeing a > >> > > > > >>>>>>>>>>>>>>>>>>> timestamped > >> > > > > >>>>>>>>>>>>>>>>>>>>> version of the persistent but not in-memory > >> > > stores. > >> > > > > >>>>>> One > >> > > > > >>>>>>>> could > >> > > > > >>>>>>>>>>>>>>>> easily > >> > > > > >>>>>>>>>>>>>>>>>>> assume > >> > > > > >>>>>>>>>>>>>>>>>>>>> there was no timestamped option for IM > >> stores and > >> > > > > >>>>>> that this > >> > > > > >>>>>>>>>>>>>>>> feature > >> > > > > >>>>>>>>>>>>>>>>>>> was > >> > > > > >>>>>>>>>>>>>>>>>>>>> incomplete, if they weren't acutely aware > >> of the > >> > > > > >>>>>> internal > >> > > > > >>>>>>>>>>>>>>>>>>> implementation > >> > > > > >>>>>>>>>>>>>>>>>>>>> details (namely that it's only required for > >> > > RocksDB > >> > > > > >>>>>> for > >> > > > > >>>>>>>>>>>>>>>>> compatibility > >> > > > > >>>>>>>>>>>>>>>>>>>>> reasons). However, with this KIP, all that > >> is > >> > > handled > >> > > > > >>>>>>>>>>>>>>> completely > >> > > > > >>>>>>>>>>>>>>>>>>>>> transparently to the user, and we the devs, > >> who > >> > > *are* > >> > > > > >>>>>> aware > >> > > > > >>>>>>>> of > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> internal > >> > > > > >>>>>>>>>>>>>>>>>>>>> implementation details, are now > >> appropriately the > >> > > > > ones > >> > > > > >>>>>>>>>>>>>>> responsible > >> > > > > >>>>>>>>>>>>>>>>> for > >> > > > > >>>>>>>>>>>>>>>>>>>>> handing the correct store type to a > >> particular > >> > > > > >>>>>> operator. > >> > > > > >>>>>>>> While > >> > > > > >>>>>>>>>>>>>>>>>>> versioned > >> > > > > >>>>>>>>>>>>>>>>>>>>> state stores may not be completely > >> comparable, > >> > > > > >>>>>> depending on > >> > > > > >>>>>>>>>>>>>>>> whether > >> > > > > >>>>>>>>>>>>>>>>>>> we want > >> > > > > >>>>>>>>>>>>>>>>>>>>> users to remain able to easily choose > >> between > >> > > using > >> > > > > >>>>>> them or > >> > > > > >>>>>>>> not > >> > > > > >>>>>>>>>>>>>>>> (vs > >> > > > > >>>>>>>>>>>>>>>>>>>>> timestamped which should be used by all), I > >> still > >> > > > > >>>>>> feel this > >> > > > > >>>>>>>> KIP > >> > > > > >>>>>>>>>>>>>>>> is a > >> > > > > >>>>>>>>>>>>>>>>>>> great > >> > > > > >>>>>>>>>>>>>>>>>>>>> step in the right direction that not only > >> should > >> > > not > >> > > > > >>>>>> be > >> > > > > >>>>>>>>>>>>>>> blocked on > >> > > > > >>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>> completion of the IM implementations, but > >> in fact > >> > > > > >>>>>> should > >> > > > > >>>>>>>>>>>>>>>>> specifically > >> > > > > >>>>>>>>>>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>>>>>>>> done first as it enables an easier way to > >> utilize > >> > > > > >>>>>> those IM > >> > > > > >>>>>>>>>>>>>>>> versioned > >> > > > > >>>>>>>>>>>>>>>>>>>>> stores. Just my 2 cents :) > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> 2. The idea to expand the existing the > >> config > >> > > with a > >> > > > > >>>>>> CUSTOM > >> > > > > >>>>>>>>>>>>>>> enum > >> > > > > >>>>>>>>>>>>>>>>>>> without > >> > > > > >>>>>>>>>>>>>>>>>>>>> introducing another config to specify the > >> CUSTOM > >> > > > > >>>>>> store spec > >> > > > > >>>>>>>>>>>>>>> does > >> > > > > >>>>>>>>>>>>>>>> not > >> > > > > >>>>>>>>>>>>>>>>>>> seem > >> > > > > >>>>>>>>>>>>>>>>>>>>> appropriate, or even possible (for the > >> reasons > >> > > Almog > >> > > > > >>>>>>>> mentioned > >> > > > > >>>>>>>>>>>>>>>>> above > >> > > > > >>>>>>>>>>>>>>>>>>> about > >> > > > > >>>>>>>>>>>>>>>>>>>>> config types, though perhaps there is a way > >> I'm > >> > > not > >> > > > > >>>>>>>> seeing). I > >> > > > > >>>>>>>>>>>>>>> do > >> > > > > >>>>>>>>>>>>>>>>> not > >> > > > > >>>>>>>>>>>>>>>>>>> buy > >> > > > > >>>>>>>>>>>>>>>>>>>>> the argument that we should optimize the > >> API to > >> > > make > >> > > > > >>>>>> it easy > >> > > > > >>>>>>>>>>>>>>> for > >> > > > > >>>>>>>>>>>>>>>>>>> users who > >> > > > > >>>>>>>>>>>>>>>>>>>>> just want to switch to all in-memory > >> stores, as I > >> > > > > >>>>>> truly > >> > > > > >>>>>>>> believe > >> > > > > >>>>>>>>>>>>>>>> this > >> > > > > >>>>>>>>>>>>>>>>>>> is a > >> > > > > >>>>>>>>>>>>>>>>>>>>> very small fraction of the potential > >> userbase of > >> > > this > >> > > > > >>>>>>>> feature > >> > > > > >>>>>>>>>>>>>>>>> (anyone > >> > > > > >>>>>>>>>>>>>>>>>>> who's > >> > > > > >>>>>>>>>>>>>>>>>>>>> actually using this should please chime > >> in!). It > >> > > > > >>>>>> seems very > >> > > > > >>>>>>>>>>>>>>> likely > >> > > > > >>>>>>>>>>>>>>>>>>> that the > >> > > > > >>>>>>>>>>>>>>>>>>>>> majority of users of this feature are > >> actually > >> > > those > >> > > > > >>>>>> with > >> > > > > >>>>>>>>>>>>>>> custom > >> > > > > >>>>>>>>>>>>>>>>> state > >> > > > > >>>>>>>>>>>>>>>>>>>>> stores, as to my knowledge, this has been > >> the > >> > > case > >> > > > > >>>>>> any/every > >> > > > > >>>>>>>>>>>>>>> time > >> > > > > >>>>>>>>>>>>>>>>> this > >> > > > > >>>>>>>>>>>>>>>>>>>>> feature was requested by users. > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> That said, while I don't see any way to get > >> > > around > >> > > > > >>>>>>>> introducing > >> > > > > >>>>>>>>>>>>>>> a > >> > > > > >>>>>>>>>>>>>>>> new > >> > > > > >>>>>>>>>>>>>>>>>>>>> config, I don't personally have a preference > >> > > w.r.t > >> > > > > >>>>>> whether > >> > > > > >>>>>>>> to > >> > > > > >>>>>>>>>>>>>>> keep > >> > > > > >>>>>>>>>>>>>>>>>>> around > >> > > > > >>>>>>>>>>>>>>>>>>>>> the old config or deprecate it. I simply > >> don't > >> > > get > >> > > > > the > >> > > > > >>>>>>>>>>>>>>> impression > >> > > > > >>>>>>>>>>>>>>>> it > >> > > > > >>>>>>>>>>>>>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>>>>>> very heavily used as it stands today, while > >> it > >> > > only > >> > > > > >>>>>> works > >> > > > > >>>>>>>> for > >> > > > > >>>>>>>>>>>>>>>> those > >> > > > > >>>>>>>>>>>>>>>>>>> who > >> > > > > >>>>>>>>>>>>>>>>>>>>> want all in-memory stores. Again, input from > >> > > actual > >> > > > > >>>>>> users > >> > > > > >>>>>>>>>>>>>>> would be > >> > > > > >>>>>>>>>>>>>>>>>>> very > >> > > > > >>>>>>>>>>>>>>>>>>>>> valuable here. In the absence of that data, > >> I > >> > > will > >> > > > > >>>>>> just > >> > > > > >>>>>>>> point > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> fact > >> > > > > >>>>>>>>>>>>>>>>>>>>> that this KIP was proposed by a Streams dev > >> (you > >> > > :P), > >> > > > > >>>>>>>>>>>>>>> abandoned, > >> > > > > >>>>>>>>>>>>>>>>>>> picked up > >> > > > > >>>>>>>>>>>>>>>>>>>>> by another Streams dev, and finally > >> implemented > >> > > > > >>>>>> without ever > >> > > > > >>>>>>>>>>>>>>>> hearing > >> > > > > >>>>>>>>>>>>>>>>>>> from a > >> > > > > >>>>>>>>>>>>>>>>>>>>> user that they would find this useful. This > >> is > >> > > not to > >> > > > > >>>>>>>> disparage > >> > > > > >>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>> original KIP, but just to say again, as I > >> stated > >> > > back > >> > > > > >>>>>> then, > >> > > > > >>>>>>>> it > >> > > > > >>>>>>>>>>>>>>>>> seemed > >> > > > > >>>>>>>>>>>>>>>>>>> like > >> > > > > >>>>>>>>>>>>>>>>>>>>> a major opportunity loss to leave out custom > >> > > state > >> > > > > >>>>>> stores > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> Cheers, > >> > > > > >>>>>>>>>>>>>>>>>>>>> Sophie > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> On Fri, Jul 21, 2023 at 1:52 PM Almog Gavra > >> < > >> > > > > >>>>>>>>>>>>>>>> almog.ga...@gmail.com> > >> > > > > >>>>>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> Thanks for all the feedback folk! Responses > >> > > inline. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> Basically, I'm suggesting two things: > >> first, > >> > > call > >> > > > > >>>>>> out in > >> > > > > >>>>>>>> some > >> > > > > >>>>>>>>>>>>>>>> way > >> > > > > >>>>>>>>>>>>>>>>>>>>>> (perhaps the StoreTypeSpec javadocs) that > >> each > >> > > > > >>>>>>>> StoreTypeSpec > >> > > > > >>>>>>>>>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>>>> considered > >> > > > > >>>>>>>>>>>>>>>>>>>>>> a public contract in itself and should > >> outline > >> > > any > >> > > > > >>>>>> semantic > >> > > > > >>>>>>>>>>>>>>>>>>> guarantees it > >> > > > > >>>>>>>>>>>>>>>>>>>>>> does, or does not, make. Second, we should > >> add a > >> > > > > >>>>>> note on > >> > > > > >>>>>>>>>>>>>>> ordering > >> > > > > >>>>>>>>>>>>>>>>>>>>>> guarantees in the two OOTB specs: for > >> RocksDB we > >> > > > > >>>>>> assert > >> > > > > >>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>> range > >> > > > > >>>>>>>>>>>>>>>>>>> queries > >> > > > > >>>>>>>>>>>>>>>>>>>>>> will honor serialized byte ordering, > >> whereas the > >> > > > > >>>>>> InMemory > >> > > > > >>>>>>>>>>>>>>> flavor > >> > > > > >>>>>>>>>>>>>>>>>>> gives no > >> > > > > >>>>>>>>>>>>>>>>>>>>>> ordering guarantee whatsoever at this time. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> That makes sense to me Sophie! I'll make > >> the > >> > > changes > >> > > > > >>>>>> to the > >> > > > > >>>>>>>>>>>>>>> KIP. > >> > > > > >>>>>>>>>>>>>>>>> And > >> > > > > >>>>>>>>>>>>>>>>>>> @Colt, > >> > > > > >>>>>>>>>>>>>>>>>>>>>> yes I believe that would be the new > >> javadoc for > >> > > the > >> > > > > >>>>>> generic > >> > > > > >>>>>>>>>>>>>>>>>>>>>> ReadOnlyKeyValueStore. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> However, I am wondering if we should close > >> > > others > >> > > > > >>>>>> gaps > >> > > > > >>>>>>>> first? > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> @Matthias, thanks for the review and > >> thoughts! I > >> > > > > >>>>>> think we > >> > > > > >>>>>>>>>>>>>>> should > >> > > > > >>>>>>>>>>>>>>>>>>> separate > >> > > > > >>>>>>>>>>>>>>>>>>>>>> closing other gaps in the product from > >> providing > >> > > > > >>>>>> this as > >> > > > > >>>>>>>>>>>>>>> useful > >> > > > > >>>>>>>>>>>>>>>>>>>>>> functionality to avoid feature creep so > >> long as > >> > > the > >> > > > > >>>>>> API > >> > > > > >>>>>>>>>>>>>>> proposed > >> > > > > >>>>>>>>>>>>>>>>>>> here will > >> > > > > >>>>>>>>>>>>>>>>>>>>>> be suitable for when we want to close those > >> > > > > >>>>>> implementation > >> > > > > >>>>>>>>>>>>>>> gaps! > >> > > > > >>>>>>>>>>>>>>>> My > >> > > > > >>>>>>>>>>>>>>>>>>> general > >> > > > > >>>>>>>>>>>>>>>>>>>>>> proposal is that for things that are not > >> > > > > customizable > >> > > > > >>>>>>>> today by > >> > > > > >>>>>>>>>>>>>>>>>>>>>> default.dsl.store they remain not > >> customizable > >> > > after > >> > > > > >>>>>> this > >> > > > > >>>>>>>> KIP. > >> > > > > >>>>>>>>>>>>>>>> The > >> > > > > >>>>>>>>>>>>>>>>>>> good > >> > > > > >>>>>>>>>>>>>>>>>>>>>> news is, however, that there's no reason > >> why > >> > > this > >> > > > > >>>>>> cannot be > >> > > > > >>>>>>>>>>>>>>>>> extended > >> > > > > >>>>>>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>>>>>>> cover those in the future if we want to - > >> see > >> > > > > >>>>>> specifics > >> > > > > >>>>>>>> below. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> Comments on the specifics below > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> In particular, this holds for the new > >> > > > > >>>>>> versioned-store ... > >> > > > > >>>>>>>>>>>>>>> Should > >> > > > > >>>>>>>>>>>>>>>>>>>>>> versioned stores also be covered by the KIP > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> Is there a reason why we can't introduce a > >> > > > > >>>>>>>>>>>>>>>>>>> VersionedRocksDBStoreTypeSpec > >> > > > > >>>>>>>>>>>>>>>>>>>>>> and if we ever support an in-memory an > >> > > equivalent > >> > > > > >>>>>>>>>>>>>>>>>>>>>> VersionedInMemoryRocksDBStoreTypeSpec? If > >> so, > >> > > then > >> > > > > >>>>>> there > >> > > > > >>>>>>>> would > >> > > > > >>>>>>>>>>>>>>>> not > >> > > > > >>>>>>>>>>>>>>>>>>> need to > >> > > > > >>>>>>>>>>>>>>>>>>>>>> be any additional changes to the API > >> proposed in > >> > > > > >>>>>> this KIP. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> For `suppress()` it's actually other way > >> > > around we > >> > > > > >>>>>> only > >> > > > > >>>>>>>> have > >> > > > > >>>>>>>>>>>>>>> an > >> > > > > >>>>>>>>>>>>>>>>>>> in-memory > >> > > > > >>>>>>>>>>>>>>>>>>>>>> implementation. Do you aim to allow custom > >> > > stores > >> > > > > for > >> > > > > >>>>>>>>>>>>>>>> `suppress()`, > >> > > > > >>>>>>>>>>>>>>>>>>> too? > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> We have three options here: > >> > > > > >>>>>>>>>>>>>>>>>>>>>> 1) we can decide to maintain existing > >> behavior > >> > > and > >> > > > > >>>>>> use the > >> > > > > >>>>>>>>>>>>>>>>> in-memory > >> > > > > >>>>>>>>>>>>>>>>>>>>>> implementation for all stores (not even > >> going > >> > > > > >>>>>> through the > >> > > > > >>>>>>>> API > >> > > > > >>>>>>>>>>>>>>> at > >> > > > > >>>>>>>>>>>>>>>>> all) > >> > > > > >>>>>>>>>>>>>>>>>>>>>> 2a) we can introduce a new parameter to the > >> > > > > >>>>>> KeyValueParams > >> > > > > >>>>>>>>>>>>>>> class > >> > > > > >>>>>>>>>>>>>>>>>>> (boolean > >> > > > > >>>>>>>>>>>>>>>>>>>>>> isTimeOrderedBuffer or something like > >> that) and > >> > > > > >>>>>> return an > >> > > > > >>>>>>>>>>>>>>>> in-memory > >> > > > > >>>>>>>>>>>>>>>>>>> store > >> > > > > >>>>>>>>>>>>>>>>>>>>>> in the implementation of > >> RocksDBStoreTypeSpec > >> > > (this > >> > > > > >>>>>>>> maintains > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> existing > >> > > > > >>>>>>>>>>>>>>>>>>>>>> behavior, and would allow us in the future > >> to > >> > > make > >> > > > > >>>>>> the > >> > > > > >>>>>>>> change > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>>>> return a > >> > > > > >>>>>>>>>>>>>>>>>>>>>> RocksDB store if we ever provide one) > >> > > > > >>>>>>>>>>>>>>>>>>>>>> 2b) same as 2a but we throw an exception > >> if the > >> > > > > >>>>>> requested > >> > > > > >>>>>>>>>>>>>>> store > >> > > > > >>>>>>>>>>>>>>>>> type > >> > > > > >>>>>>>>>>>>>>>>>>> does > >> > > > > >>>>>>>>>>>>>>>>>>>>>> not support that (this is backwards > >> > > incompatible, > >> > > > > >>>>>> and since > >> > > > > >>>>>>>>>>>>>>>>> ROCKS_DB > >> > > > > >>>>>>>>>>>>>>>>>>> is the > >> > > > > >>>>>>>>>>>>>>>>>>>>>> default we probably shouldn't do this) > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> My proposal for now is 1) because as of > >> KIP-825 > >> > > > > >>>>>>>>>>>>>>>>>>>>>> EmitStrategy#ON_WINDOW_CLOSE is the > >> preferred > >> > > way of > >> > > > > >>>>>>>>>>>>>>> suppressing > >> > > > > >>>>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>> that > >> > > > > >>>>>>>>>>>>>>>>>>>>>> is accounted for in this API already. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> Last, I am not sure if the new parameter > >> > > replacing > >> > > > > >>>>>> the > >> > > > > >>>>>>>>>>>>>>> existing > >> > > > > >>>>>>>>>>>>>>>>> one > >> > > > > >>>>>>>>>>>>>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>>> best way to go? > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> I'm happy either way, just let me know > >> which you > >> > > > > >>>>>> prefer - > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> discussion > >> > > > > >>>>>>>>>>>>>>>>>>>>>> around CUSTOM is in the rejected > >> alternatives > >> > > but > >> > > > > I'm > >> > > > > >>>>>>>> happy to > >> > > > > >>>>>>>>>>>>>>>>>>> differ to > >> > > > > >>>>>>>>>>>>>>>>>>>>>> whatever the project conventions are :) > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> If it's matches existing `ROCKS_DB` or > >> > > `IN_MEMORY` > >> > > > > >>>>>> we just > >> > > > > >>>>>>>>>>>>>>>> process > >> > > > > >>>>>>>>>>>>>>>>>>> it as > >> > > > > >>>>>>>>>>>>>>>>>>>>>> we > >> > > > > >>>>>>>>>>>>>>>>>>>>>> do know, and if know we assume it's a fully > >> > > > > >>>>>> qualified class > >> > > > > >>>>>>>>>>>>>>> name > >> > > > > >>>>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>> try to > >> > > > > >>>>>>>>>>>>>>>>>>>>>> instantiate it? > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> Note that there is no functionality for > >> this > >> > > kind of > >> > > > > >>>>>> thing > >> > > > > >>>>>>>> in > >> > > > > >>>>>>>>>>>>>>>>>>>>>> AbstractConfig (it's either a String > >> validated > >> > > enum > >> > > > > >>>>>> or a > >> > > > > >>>>>>>>>>>>>>> class) > >> > > > > >>>>>>>>>>>>>>>> so > >> > > > > >>>>>>>>>>>>>>>>>>> this > >> > > > > >>>>>>>>>>>>>>>>>>>>>> would be a departure from convention. > >> Again, I'm > >> > > > > >>>>>> happy to > >> > > > > >>>>>>>>>>>>>>>> implement > >> > > > > >>>>>>>>>>>>>>>>>>> that if > >> > > > > >>>>>>>>>>>>>>>>>>>>>> it's preferred. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> Also wondering how it would related to the > >> > > existing > >> > > > > >>>>>>>> `Stores` > >> > > > > >>>>>>>>>>>>>>>>>>> factory? > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> StoreTypeSpec will depend on Stores > >> factory - > >> > > > > >>>>>> they're one > >> > > > > >>>>>>>>>>>>>>> layer > >> > > > > >>>>>>>>>>>>>>>>>>> removed. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> You can imagine that StoreTypeSpec is just > >> a > >> > > > > >>>>>> grouping of > >> > > > > >>>>>>>>>>>>>>> methods > >> > > > > >>>>>>>>>>>>>>>>>>> from the > >> > > > > >>>>>>>>>>>>>>>>>>>>>> Stores factory into a convenient package > >> for > >> > > default > >> > > > > >>>>>>>>>>>>>>>> configuration > >> > > > > >>>>>>>>>>>>>>>>>>>>>> purposes. > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> Thanks again for all the detailed thoughts > >> > > Matthias! > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> On Fri, Jul 21, 2023 at 11:50 AM Matthias > >> J. > >> > > Sax < > >> > > > > >>>>>>>>>>>>>>>> mj...@apache.org > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP. Overall I like the > >> idea to > >> > > > > >>>>>> close this > >> > > > > >>>>>>>>>>>>>>> gap. > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> However, I am wondering if we should close > >> > > others > >> > > > > >>>>>> gaps > >> > > > > >>>>>>>>>>>>>>> first? In > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> particular, IIRC, we have a few cases for > >> > > which we > >> > > > > >>>>>> only > >> > > > > >>>>>>>> have > >> > > > > >>>>>>>>>>>>>>> a > >> > > > > >>>>>>>>>>>>>>>>>>> RocksDB > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> implementation for a store, and thus, > >> adding an > >> > > > > >>>>>> in-memory > >> > > > > >>>>>>>>>>>>>>>> version > >> > > > > >>>>>>>>>>>>>>>>>>> for > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> these stores first, to make the current > >> > > `IN_MEMORY` > >> > > > > >>>>>>>> parameter > >> > > > > >>>>>>>>>>>>>>>>> work, > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> might be the first step? > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> In particular, this holds for the new > >> > > > > >>>>>> versioned-store > >> > > > > >>>>>>>> (but I > >> > > > > >>>>>>>>>>>>>>>>>>> actually > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> believe the is some other internal store > >> with > >> > > no > >> > > > > >>>>>> in-memory > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> implementation). -- For `suppress()` it's > >> > > actually > >> > > > > >>>>>> other > >> > > > > >>>>>>>> way > >> > > > > >>>>>>>>>>>>>>>>> around > >> > > > > >>>>>>>>>>>>>>>>>>> we > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> we only have an in-memory implementation. > >> Do > >> > > you > >> > > > > >>>>>> aim to > >> > > > > >>>>>>>> allow > >> > > > > >>>>>>>>>>>>>>>>> custom > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> stores for `suppress()`, too? > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> Btw: Should versioned stores also be > >> covered > >> > > by the > >> > > > > >>>>>> KIP > >> > > > > >>>>>>>> (ie, > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> `StoreTypeSpec`)? We did consider to add > >> a new > >> > > > > >>>>>> option > >> > > > > >>>>>>>>>>>>>>>> `VERSIONED` > >> > > > > >>>>>>>>>>>>>>>>>>> to the > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> existing `default.dsl.store` config, but > >> opted > >> > > out > >> > > > > >>>>>> for > >> > > > > >>>>>>>>>>>>>>> various > >> > > > > >>>>>>>>>>>>>>>>>>> reasons. > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> Last, I am not sure if the new parameter > >> > > replacing > >> > > > > >>>>>> the > >> > > > > >>>>>>>>>>>>>>> existing > >> > > > > >>>>>>>>>>>>>>>>> one > >> > > > > >>>>>>>>>>>>>>>>>>> is > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> the best way to go? Did you put the idea > >> to add > >> > > > > >>>>>> `CUSTOM` > >> > > > > >>>>>>>> to > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> existing > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> config into rejected alternative. > >> Personally, I > >> > > > > >>>>>> would > >> > > > > >>>>>>>> prefer > >> > > > > >>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>> add > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> `CUSTOM` as I would like to optimize to > >> easy > >> > > of use > >> > > > > >>>>>> for > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> majority of > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> users (which don't implement a custom > >> store), > >> > > but > >> > > > > >>>>>> only > >> > > > > >>>>>>>>>>>>>>> switch to > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> in-memory sometimes. -- As an > >> alternative, you > >> > > > > >>>>>> would also > >> > > > > >>>>>>>>>>>>>>> just > >> > > > > >>>>>>>>>>>>>>>>>>> extend > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> `dsl.default.store` (it's just a String) > >> and > >> > > allow > >> > > > > >>>>>> to > >> > > > > >>>>>>>> pass in > >> > > > > >>>>>>>>>>>>>>>>>>> anything. > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> If it's matches existing `ROCKS_DB` or > >> > > `IN_MEMORY` > >> > > > > >>>>>> we just > >> > > > > >>>>>>>>>>>>>>>> process > >> > > > > >>>>>>>>>>>>>>>>>>> it as > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> we do know, and if know we assume it's a > >> fully > >> > > > > >>>>>> qualified > >> > > > > >>>>>>>>>>>>>>> class > >> > > > > >>>>>>>>>>>>>>>>> name > >> > > > > >>>>>>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> try to instantiate it? -- Given that we > >> plan to > >> > > > > >>>>>> keep the > >> > > > > >>>>>>>>>>>>>>>>>>> store-enum, is > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> seems cleaner to keep the existing config > >> and > >> > > keep > >> > > > > >>>>>> both > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>> config > >> > > > > >>>>>>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> enum aligned to each other? > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> It's just preliminary thought. I will > >> need to > >> > > go > >> > > > > >>>>>> back an > >> > > > > >>>>>>>>>>>>>>> take a > >> > > > > >>>>>>>>>>>>>>>>> more > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> detailed look into the code to grok how > >> the > >> > > propose > >> > > > > >>>>>>>>>>>>>>>>> `StoreTypeSpec` > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> falls into place. Also wondering how it > >> would > >> > > > > >>>>>> related to > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> existing > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> `Stores` factory? > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> -Matthias > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> On 7/21/23 6:45 AM, Colt McNealy wrote: > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Sophie— > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Thanks for chiming in here. +1 to the > >> idea of > >> > > > > >>>>>> specifying > >> > > > > >>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>> ordering > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> guarantees that we make in the > >> StorageTypeSpec > >> > > > > >>>>>> javadocs. > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Quick question then. Is the javadoc that > >> says: > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> Order is not guaranteed as bytes > >> > > lexicographical > >> > > > > >>>>>>>> ordering > >> > > > > >>>>>>>>>>>>>>>> might > >> > > > > >>>>>>>>>>>>>>>>>>> not > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> represent key order. > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> no longer correct, and should say: > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> Order guarantees depend on the > >> underlying > >> > > > > >>>>>>>> implementation of > >> > > > > >>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> ReadOnlyKeyValueStore. For more > >> information, > >> > > > > please > >> > > > > >>>>>>>> consult > >> > > > > >>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> [StorageTypeSpec javadocs](....) > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Thanks, > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> Colt McNealy > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> *Founder, LittleHorse.dev* > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> On Thu, Jul 20, 2023 at 9:28 PM Sophie > >> > > > > >>>>>> Blee-Goldman < > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> ableegold...@gmail.com> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> Hey Almog, first off, thanks for the > >> KIP! I > >> > > (and > >> > > > > >>>>>> others) > >> > > > > >>>>>>>>>>>>>>>> raised > >> > > > > >>>>>>>>>>>>>>>>>>>>>> concerns > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> over how restrictive the > >> default.dsl.store > >> > > config > >> > > > > >>>>>> would > >> > > > > >>>>>>>> be > >> > > > > >>>>>>>>>>>>>>> if > >> > > > > >>>>>>>>>>>>>>>>> not > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> extendable to custom store types, > >> especially > >> > > > > >>>>>> given that > >> > > > > >>>>>>>>>>>>>>> this > >> > > > > >>>>>>>>>>>>>>>>>>> seems to > >> > > > > >>>>>>>>>>>>>>>>>>>>>> be > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> the primary userbase of such a feature. > >> At > >> > > the > >> > > > > >>>>>> time we > >> > > > > >>>>>>>>>>>>>>> didn't > >> > > > > >>>>>>>>>>>>>>>>>>> really > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> have > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> any better ideas for a clean way to > >> achieve > >> > > that, > >> > > > > >>>>>> but > >> > > > > >>>>>>>> what > >> > > > > >>>>>>>>>>>>>>> you > >> > > > > >>>>>>>>>>>>>>>>>>>>>> proposed > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> makes a lot of sense to me. Happy to > >> see a > >> > > good > >> > > > > >>>>>>>> solution to > >> > > > > >>>>>>>>>>>>>>>>> this, > >> > > > > >>>>>>>>>>>>>>>>>>> and > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> hopefully others will share my > >> satisfaction > >> > > :P > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> I did have one quick piece of feedback > >> which > >> > > > > >>>>>> arose from > >> > > > > >>>>>>>> an > >> > > > > >>>>>>>>>>>>>>>>>>> unrelated > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> question posed to the dev mailing list > >> w/ > >> > > subject > >> > > > > >>>>>> line > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> "ReadOnlyKeyValueStore#range() > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> Semantics" > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> < > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>> > >> > > https://lists.apache.org/thread/jbckmth8d3mcgg0rd670cpvsgwzqlwrm > >> > > > > >. > >> > > > > >>>>>>>>>>>>>>>>>>> I > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> recommend checking out the full thread > >> for > >> > > > > >>>>>> context, but > >> > > > > >>>>>>>> it > >> > > > > >>>>>>>>>>>>>>>> made > >> > > > > >>>>>>>>>>>>>>>>> me > >> > > > > >>>>>>>>>>>>>>>>>>>>>> think > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> about how we can leverage the new > >> > > StoreTypeSpec > >> > > > > >>>>>> concept > >> > > > > >>>>>>>> as > >> > > > > >>>>>>>>>>>>>>> an > >> > > > > >>>>>>>>>>>>>>>>>>> answer > >> > > > > >>>>>>>>>>>>>>>>>>>>>> to > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> long-standing question in Streams: > >> where can > >> > > we > >> > > > > >>>>>> put > >> > > > > >>>>>>>>>>>>>>> guarantees > >> > > > > >>>>>>>>>>>>>>>>> of > >> > > > > >>>>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> public contract for RocksDB (or other > >> store > >> > > > > >>>>>>>>>>>>>>> implementations) > >> > > > > >>>>>>>>>>>>>>>>> when > >> > > > > >>>>>>>>>>>>>>>>>>> all > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> RocksDB stuff is technically internal. > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> Basically, I'm suggesting two things: > >> first, > >> > > call > >> > > > > >>>>>> out in > >> > > > > >>>>>>>>>>>>>>> some > >> > > > > >>>>>>>>>>>>>>>>> way > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> (perhaps > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> the StoreTypeSpec javadocs) that each > >> > > > > >>>>>> StoreTypeSpec is > >> > > > > >>>>>>>>>>>>>>>>> considered > >> > > > > >>>>>>>>>>>>>>>>>>> a > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> public > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> contract in itself and should outline > >> any > >> > > > > semantic > >> > > > > >>>>>>>>>>>>>>> guarantees > >> > > > > >>>>>>>>>>>>>>>> it > >> > > > > >>>>>>>>>>>>>>>>>>> does, > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> or > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> does not, make. Second, we should add a > >> note > >> > > on > >> > > > > >>>>>> ordering > >> > > > > >>>>>>>>>>>>>>>>>>> guarantees in > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> the > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> two OOTB specs: for RocksDB we assert > >> that > >> > > range > >> > > > > >>>>>> queries > >> > > > > >>>>>>>>>>>>>>> will > >> > > > > >>>>>>>>>>>>>>>>>>> honor > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> serialized byte ordering, whereas the > >> > > InMemory > >> > > > > >>>>>> flavor > >> > > > > >>>>>>>>>>>>>>> gives no > >> > > > > >>>>>>>>>>>>>>>>>>>>>> ordering > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> guarantee whatsoever at this time. > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> Thoughts? > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> -Sophie > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Jul 20, 2023 at 4:28 PM Almog > >> Gavra < > >> > > > > >>>>>>>>>>>>>>>>>>> almog.ga...@gmail.com> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> wrote: > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> Hi All, > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> I would like to propose a KIP to expand > >> > > support > >> > > > > >>>>>> for > >> > > > > >>>>>>>>>>>>>>> default > >> > > > > >>>>>>>>>>>>>>>>> store > >> > > > > >>>>>>>>>>>>>>>>>>>>>> types > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> (KIP-591) to encompass custom store > >> > > > > >>>>>> implementations: > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>> > >> > > > > >>>>>> > >> > > > > >> > >> > > > > > >> > > > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-954%3A+expand+default+DSL+store+configuration+to+custom+types > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> Looking forward to your feedback! > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> Cheers, > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> Almog > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>>> > >> > > > > >>>>>>>>>>>> > >> > > > > >>>>>>>>>>> > >> > > > > >>>>>>>>>> > >> > > > > >>>>>>>> > >> > > > > >>>>>> > >> > > > > >>>>> > >> > > > > >>> > >> > > > > >> > >> > > > > > > >> > > > > > >> > > > >> > >