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