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

Reply via email to