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 >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>>> >> > > > > >>>>>>>>>>>>> >> > > > > >>>>>>>>>>>> >> > > > > >>>>>>>>>>> >> > > > > >>>>>>>>>> >> > > > > >>>>>>>> >> > > > > >>>>>> >> > > > > >>>>> >> > > > > >>> >> > > > > >> >> > > > > > >> > > > > >> > > >> >