I have performance concerns about this proposal, because each time a
window/session store is accessed, a new (unnecessary) object needs to be
created, and accessing the store in the processors is on the hot code path.


-Matthias


On 6/20/19 10:57 AM, John Roesler wrote:
> Hi again, all,
> 
> After wrestling with some other issues around the window interface,
> I'd propose that we consider normalizing the WindowStore (and
> SessionStore) interfaces with respect to KeyValueStore. We can't
> actually make the classes related because they'll clash on the
> deprecated methods, but we can align them. Doing so would be an
> ergonomic advantage, since all our provided store interfaces would
> have the same "shape".
> 
> Specifically, this means that we would deprecate any method that takes
> a raw "K key, long windowStartTime" or returns a raw "K key", and
> instead always take as arguments Windowed<K> keys and also return
> Windowed<K> results. This proposal already comes close to this, by
> re-using the KeyValueIterator<Windowed<K, V>>, so it would just be a
> few tweaks to "perfect" it.
> 
> What do you think?
> 
> Thanks,
> -John
> 
> On Tue, May 28, 2019 at 2:58 PM Matthias J. Sax <matth...@confluent.io> wrote:
>>
>> Let's see what other think about (2)
>>
>>
>>
>> (3) Interesting. My reasoning follows the code:
>>
>> For example, `RocksDbKeyValueBytesStoreSupplier#metricsScope()`returns
>> "rocksdb-state" and this is concatenated later in `MeteredKeyValueStore`
>> that adds a tag
>>
>>   key:       metricScope + "-id"
>>   value:     name()                  // this is the store name
>>
>> Hence, the `-state` part comes from the supplier and thus it seems to be
>> part of `[store-type]` (ie, `store-type` == metricScope()` -- not sure
>> if this interpretation holds).
>>
>> If it's not part of `[store-type]` the supplier should not return it as
>> `metricScope()` IMHO, but the `MeteredKeyValueStore` should add it
>> together with `-id` suffix from my understanding.
>>
>> Thoughts?
>>
>>
>>
>> (5) Renaming to `streams` might imply that we need to rename _all_
>> metrics, not just the store metrics that are affected, to avoid
>> inconsistencies.
>>
>> If we really want to rename it, I would rather suggest to do it as part
>> of KIP-444, that is a larger rework anyway. It seems to be out of scope
>> for this KIP.
>>
>>
>> -Matthias
>>
>>
>> On 5/28/19 12:30 PM, Bruno Cadonna wrote:
>>> Hi Matthias,
>>>
>>> 2)
>>> Yes, this is how I meant it.
>>> I am still in favour of `value-by-...` instead of `get`, because it
>>> gives you immediately the meaning of the metric without the need to
>>> know the API of the stores.
>>>
>>> 3)
>>> I asked to avoid misunderstandings because in KIP-444, `-state-` is
>>> stated explicitly in the tag.
>>>
>>> 5)
>>> The question was not about correctness. I know that we use `stream` in
>>> the metrics group. The question was rather if we want to change it.
>>> The streams metrics interface is called `StreamsMetrics`. I understand
>>> that this has low priority. Just wanted to mention it.
>>>
>>> Best,
>>> Bruno
>>>
>>>
>>> On Tue, May 28, 2019 at 9:08 PM Matthias J. Sax <matth...@confluent.io> 
>>> wrote:
>>>>
>>>> Thanks Bruno.
>>>>
>>>> I updated the KIP without changing the metric name yet -- want to
>>>> discuss this first.
>>>>
>>>>
>>>>
>>>> 1) I am also ok to keep `all()`
>>>>
>>>>
>>>> 2) That's a good idea. To make sure I understand your suggestion
>>>> correctly, below the mapping between metric name an methods.
>>>> (Some metric names are use by multiple stores):
>>>>
>>>> (ReadOnly)KeyValueStore:
>>>>
>>>>>> value-by-key : ReadOnlyKeyValueStore#get(K key)
>>>>
>>>> -> replaces `get` metric
>>>>
>>>> I am actually not sure if I like this. Just keeping `get` instead of
>>>> `value-by-key`, `value-by-key-and-time` seems more reasonable to me.
>>>>
>>>>
>>>>
>>>> (ReadOnly)WindowStore:
>>>>
>>>>>> value-by-key-and-time : ReadOnlyWindowStore#get(K key, long 
>>>>>> windowStartTime)
>>>>
>>>> I think a simple `get` might be better
>>>>
>>>>>> range-by-key-and-time-range : ReadOnlyWindowStore#range(K key, Instant 
>>>>>> from, Instant to)
>>>>>> range-by-key-and-time-range : WindowStore#range(K key, long fromTime, 
>>>>>> long toTime)
>>>>
>>>>>> range-by-key-range-and-time-range : ReadOnlyWindowStore#range(K from, K 
>>>>>> to, Instant from, Instant to)
>>>>>> range-by-key-range-and-time-range : WindowStore#range(K from, K to, long 
>>>>>> fromTime, long toTime)
>>>>
>>>>>> range-by-time-range : ReadOnlyWindowStore#range(Instant from, Instant to)
>>>>>> range-by-time-range : WindowStore#range(long fromTime, long toTime)
>>>>
>>>>>> range-all : ReadOnlyWindowStore#all()
>>>>
>>>>
>>>> (ReadOnly)SessionStore:
>>>>
>>>>>> range-by-key : ReadOnlySessionStore#range(K key)
>>>>
>>>>>> range-by-key-range : ReadOnlySessionStore#range(K from, K to)
>>>>>> range-by-key-and-time-range : SessionStore#range(K key, long 
>>>>>> earliestSessionEndTime, long latestSessionStartTime)
>>>>
>>>>>> range-by-key-range-and-time-range : SessionStore#range(K keyFrom, K 
>>>>>> keyTo, long earliestSessionEndTime, long latestSessionStartTime)
>>>>
>>>>>> value-by-key-and-time : SessionStore#get(K key, long sessionStartTime, 
>>>>>> long sessionEndTime)
>>>>
>>>> I think a simple `get` might be better
>>>>
>>>>>> range-all : ReadOnlyKeyValueStore#all()
>>>>
>>>>
>>>>
>>>>
>>>> 3) the `state-` part is already contained in `[storeType]` do I think
>>>> it's correct as-is
>>>>
>>>>
>>>> 4) Ack. Fixed.
>>>>
>>>>
>>>> 5) I think `stream` (plural) is correct. Cf
>>>> https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/state/internals/MeteredKeyValueStore.java#L87
>>>>
>>>>
>>>>
>>>> -Matthias
>>>>
>>>>
>>>> On 5/28/19 3:26 AM, Bruno Cadonna wrote:
>>>>> Hi all,
>>>>>
>>>>> My comments on this KIP:
>>>>>
>>>>> 1. I would use `all()` instead of `range()` because the functionality
>>>>> is immediately clear without the need to look at the parameter list.
>>>>>
>>>>> 2. I would decouple method names from metrics name, because this
>>>>> allows us to change one naming independently from the other in the
>>>>> future. From the previous discussion on this thread, I have also the
>>>>> feeling that the naming requirements differ between Java code and
>>>>> metrics.
>>>>>
>>>>> My proposal for the metric names is the following:
>>>>>
>>>>> value-by-key
>>>>> range-by-key
>>>>> value-by-key-and-time
>>>>> range-by-key-range
>>>>> range-by-time-range
>>>>> range-by-key-and-time-range
>>>>> range-by-key-range-and-time-range
>>>>> range-all
>>>>>
>>>>> I omitted the metric types like latency-avg, etc. The first word
>>>>> denotes whether the query is a point query (`value`) or a range query
>>>>> (`range`). The words after the `by` denote the parameter types of the
>>>>> query. `range-all` is a special case. I hope, I did not miss any.
>>>>> We could also prefix the above names with `get-` if you think, it
>>>>> would make the names clearer.
>>>>>
>>>>> 3. Should `[storeType]-id` be `[storeType]-state-id`?
>>>>>
>>>>> 4. Some method signatures in the KIP under comment `// new` have still
>>>>> the `@Deprecated` annotation. Copy&Paste error?
>>>>>
>>>>> 5. Should `type = stream-[storeType]-metrics` be `type =
>>>>> streams-[storeType]-metrics` or do we need to keep `stream` for
>>>>> historical/backward-compatibility reasons?
>>>>>
>>>>> Best,
>>>>> Bruno
>>>>>
>>>>> On Fri, May 24, 2019 at 5:46 AM Matthias J. Sax <matth...@confluent.io> 
>>>>> wrote:
>>>>>>
>>>>>> Thanks John and Guozhang.
>>>>>>
>>>>>> I also lean towards different metric names.
>>>>>>
>>>>>> While updating the KIP, I also realized that the whole store API for
>>>>>> window and session store is actually rather inconsistent. Hence, I
>>>>>> extended the scope of this KIP to cleanup both interfaces and changed
>>>>>> the KIP name to
>>>>>>
>>>>>>    "Cleanup built-in Store interfaces"
>>>>>>
>>>>>> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=103094198
>>>>>>
>>>>>> I also included a small change to KeyValueStore to align all built-in
>>>>>> stores holistically.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Looking forward to your feedback.
>>>>>>
>>>>>>
>>>>>>
>>>>>> -Matthias
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 5/7/19 1:19 AM, Guozhang Wang wrote:
>>>>>>> Thanks John.
>>>>>>>
>>>>>>> I think I'm convinced about not collapsing the metrics measuring for
>>>>>>> various function calls. Regarding the possible solution I'm a bit 
>>>>>>> inclined
>>>>>>> to just distinguish on the metric names directly over on tags: since our
>>>>>>> current metrics naming are a tad messed up anyways, fixing them in one 
>>>>>>> shot
>>>>>>> as a breaking change sounds reasonable to me.
>>>>>>>
>>>>>>>
>>>>>>> Guozhang
>>>>>>>
>>>>>>>
>>>>>>> On Mon, May 6, 2019 at 9:14 AM John Roesler <j...@confluent.io> wrote:
>>>>>>>
>>>>>>>> Thanks all (or range? ;) ) for the discussion. Good points all around.
>>>>>>>>
>>>>>>>> Although I see the allure of naming the metrics the same as the things
>>>>>>>> they're measuring, it seems not to be perfect. Seconding Matthias's 
>>>>>>>> latter
>>>>>>>> thought, I think it's likely you'd want to measure the method calls
>>>>>>>> independently, since the different range variants would have wildly
>>>>>>>> different characteristics, which could then lead you to want to orient 
>>>>>>>> the
>>>>>>>> storage differently to support particular use cases.
>>>>>>>>
>>>>>>>> Pointing out some structural characteristics (I know you all know this
>>>>>>>> stuff, I'm just constructing a table for analysis):
>>>>>>>> * Java supports method-name overloading. *Different* methods can have 
>>>>>>>> the
>>>>>>>> same names, distinguished by arg lists; it doesn't change the fact that
>>>>>>>> they are different methods.
>>>>>>>> * Metrics does not support metric-name overloading, but metric names do
>>>>>>>> have some structure we could exploit, if you consider the tags.
>>>>>>>>
>>>>>>>> It seems to me that there's actually more domain mismatch if we just 
>>>>>>>> have
>>>>>>>> one metric named "range", since (e.g., in the SessionStore proposal 
>>>>>>>> above)
>>>>>>>> the Java API has *four* methods named "range".
>>>>>>>>
>>>>>>>> Two potential solutions I see:
>>>>>>>> * hierarchical metric names: "range-single-key-all-time",
>>>>>>>> "range-key-range-all-time", "range-single-key-time-range",
>>>>>>>> "range-key-range-time-range", maybe with better names... I'm not the 
>>>>>>>> best
>>>>>>>> at this stuff. Hopefully, you see the point, though... they all start 
>>>>>>>> with
>>>>>>>> "range", which provides the association to the method, and all have a
>>>>>>>> suffix which identifies the overload being measured.
>>>>>>>> * tagged metric names: "range" {"variant": "single-key-all-time"}, 
>>>>>>>> "range"
>>>>>>>> {"variant": "key-range-all-time"}, "range" {"variant":
>>>>>>>> "single-key-time-range"}, "range" {"variant": "key-range-time-range"} 
>>>>>>>> . Or
>>>>>>>> you could even split the tags up semantically, but my instinct says 
>>>>>>>> that
>>>>>>>> that would just make it harder to digest the metrics later on.
>>>>>>>>
>>>>>>>> Just some ideas.
>>>>>>>> -John
>>>>>>>>
>>>>>>>> On Fri, Apr 26, 2019 at 3:51 AM Matthias J. Sax <matth...@confluent.io>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Thanks for the input Guozhang. I was not aware of those dependencies.
>>>>>>>>>
>>>>>>>>> It might be good to align this KIP with the metrics cleanup. Not sure
>>>>>>>>> atm, if we should use different metric names for different overloads,
>>>>>>>>> even if those have the same method name?
>>>>>>>>>
>>>>>>>>> If we rename all method to `range()` and use the same metric name for
>>>>>>>>> all, one could argue that this is still fine, because the metric
>>>>>>>>> collects how often a range query is executed (regardless of the range
>>>>>>>>> itself).
>>>>>>>>>
>>>>>>>>> On the other hand, this would basically be a "roll up". It could still
>>>>>>>>> be valuable to distinguish between single-key-time-range,
>>>>>>>>> key-range-time-range, and all-range queries. Users could still 
>>>>>>>>> aggregate
>>>>>>>>> those later if they are not interested in the details, while it's not
>>>>>>>>> possible for user to split a pre-aggregated metric into it's 
>>>>>>>>> component.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Input from others might be helpful here, too.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> -Matthias
>>>>>>>>>
>>>>>>>>> On 4/11/19 6:00 PM, Guozhang Wang wrote:
>>>>>>>>>> While working at KIP-444 (https://github.com/apache/kafka/pull/6498) 
>>>>>>>>>> I
>>>>>>>>>> realized there are a bunch of issues on metric names v.s. function
>>>>>>>> names,
>>>>>>>>>> e.g. some function named `fetchAll` are actually measure with 
>>>>>>>>>> `fetch`,
>>>>>>>>> etc.
>>>>>>>>>> So in that KIP I proposed to make the function name aligned with
>>>>>>>> metrics
>>>>>>>>>> name. So suppose we rename the functions from `fetch` to `range` I'd
>>>>>>>>>> suggest we make this change as part of KIP-444 as well. Note that it
>>>>>>>>> means
>>>>>>>>>> different functions with the same name `range` will be measured 
>>>>>>>>>> under a
>>>>>>>>>> single metric then.
>>>>>>>>>>
>>>>>>>>>> But still for function named `all` it will be measured under a 
>>>>>>>>>> separate
>>>>>>>>>> metric named `all`, so I'm just clarifying with you if that's the
>>>>>>>>> intention.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Guozhang
>>>>>>>>>>
>>>>>>>>>> On Thu, Apr 11, 2019 at 2:04 PM Matthias J. Sax 
>>>>>>>>>> <matth...@confluent.io
>>>>>>>>>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> I did not see a reason to rename `all()` to `range()`. `all()` does
>>>>>>>> not
>>>>>>>>>>> take any parameters to limit a range and is a good name IMHO. But I 
>>>>>>>>>>> am
>>>>>>>>>>> not married to keep `all()` and if we think we should rename it, 
>>>>>>>>>>> too,
>>>>>>>> I
>>>>>>>>>>> am fine with it.
>>>>>>>>>>>
>>>>>>>>>>> Not sure what connection you make to metrics though. Can you
>>>>>>>> elaborate?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Would be interested to hear others opinions on this, too.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> -Matthias
>>>>>>>>>>>
>>>>>>>>>>> On 4/11/19 8:38 AM, Guozhang Wang wrote:
>>>>>>>>>>>> I like the renaming, since it also aligns with our metrics cleanup
>>>>>>>>>>>> (KIP-444) which touches upon the store level metrics as well.
>>>>>>>>>>>>
>>>>>>>>>>>> One question: you seems still suggesting to keep "all" with the
>>>>>>>> current
>>>>>>>>>>>> name (and also using a separate metric for it), what's the 
>>>>>>>>>>>> difference
>>>>>>>>>>>> between this one and other "range" functions?
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Apr 11, 2019 at 2:26 AM Matthias J. Sax <
>>>>>>>> matth...@confluent.io
>>>>>>>>>>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks for the input.
>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Just to clarify the naming conflicts is between the newly added
>>>>>>>>>>> function
>>>>>>>>>>>>>>> and the old functions that we want to deprecate / remove right?
>>>>>>>> The
>>>>>>>>>>>>>
>>>>>>>>>>>>> Yes, the conflict is just fort the existing `fetch()` methods for
>>>>>>>>> which
>>>>>>>>>>>>> we want to change the return type.
>>>>>>>>>>>>>
>>>>>>>>>>>>> IMHO, we should not make a breaking change in a minor release. 
>>>>>>>>>>>>> Thus,
>>>>>>>>> we
>>>>>>>>>>>>> could either only deprecate those fetch methods that return
>>>>>>>>>>>>> `WindowStoreIterator` and do a "clean cut" in 3.0.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Or we, follow the renaming path. No get a clean renaming, we need 
>>>>>>>>>>>>> to
>>>>>>>>>>>>> consider all methods that are called "fetch":
>>>>>>>>>>>>>
>>>>>>>>>>>>> ReadOnlyWindowStore:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> V fetch(K, long)
>>>>>>>>>>>>>> WindowStoreIterator<V> fetch(K, Instant, Instant)
>>>>>>>>>>>>>> KeyValueIterator<Windowed<K>, V> fetch(K, K, Instant, Instant)
>>>>>>>>>>>>>
>>>>>>>>>>>>> WindowStore:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> WindowStoreIterator<V> fetch(K, long, long)
>>>>>>>>>>>>>> WindowStoreIterator<V> fetch(K, Instant, Instant)>
>>>>>>>>>>>>> KeyValueIterator<Windowed<K>, V> fetch(K, K, long, long)
>>>>>>>>>>>>>> KeyValueIterator<Windowed<K>, V> fetch(K, K, Instant, Instant)
>>>>>>>>>>>>>
>>>>>>>>>>>>> There is also fetchAll(long, long) and fetchAll(Instant, Instant)
>>>>>>>> that
>>>>>>>>>>>>> fetch over all keys.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Maybe we could rename `V fetch(K, long)` to `V get(K, long)` and
>>>>>>>>> rename
>>>>>>>>>>>>> all `fetch()/fetchAll()` to `range()`? There is actually no reason
>>>>>>>> to
>>>>>>>>>>>>> have range()/rangeAll().
>>>>>>>>>>>>>
>>>>>>>>>>>>> If we do this, we might consider to rename methods for 
>>>>>>>>>>>>> SessionStore,
>>>>>>>>>>>>> too. There is
>>>>>>>>>>>>>
>>>>>>>>>>>>>> ReadOnlySessionStore#fetch(K)
>>>>>>>>>>>>>> ReadOnlySessionStore#fetch(K, K)
>>>>>>>>>>>>>> SessionStore#findSessions(K, long, long)
>>>>>>>>>>>>>> SessionStore#findSessions(K, K, long, long)
>>>>>>>>>>>>>> SessionStore#fetchSession(K, long, long);
>>>>>>>>>>>>>
>>>>>>>>>>>>> Consistent renaming might be:
>>>>>>>>>>>>>
>>>>>>>>>>>>> ReadOnlySessionStore#range(K)
>>>>>>>>>>>>> ReadOnlySessionStore#range(K, K)
>>>>>>>>>>>>> SessionStore#range(K, long, long)
>>>>>>>>>>>>> SessionStore#range(K, K, long, long)
>>>>>>>>>>>>> SessionStore#get(K, long, long);
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Not sure if extensive renaming might have too big of an impact.
>>>>>>>>> However,
>>>>>>>>>>>>> `range()` and `get()` might actually be better names than 
>>>>>>>>>>>>> `fetch()`,
>>>>>>>>>>>>> thus, it might also provide some additional value.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thoughts?
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 3/27/19 10:19 AM, Guozhang Wang wrote:
>>>>>>>>>>>>>> Hello Matthias,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Just to clarify the naming conflicts is between the newly added
>>>>>>>>>>> function
>>>>>>>>>>>>>> and the old functions that we want to deprecate / remove right? 
>>>>>>>>>>>>>> The
>>>>>>>>>>>>>> existing ones have different signatures with parameters so that
>>>>>>>> they
>>>>>>>>>>>>> should
>>>>>>>>>>>>>> not have conflicts.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I was thinking about just make the change directly without
>>>>>>>>> deprecating
>>>>>>>>>>>>>> existing ones which would require users of 2.3 to make code 
>>>>>>>>>>>>>> changes
>>>>>>>>> --
>>>>>>>>>>>>> this
>>>>>>>>>>>>>> code change looks reasonably straight-forward to me and not much
>>>>>>>>> worth
>>>>>>>>>>>>>> deferring to later when the deprecated ones are removed.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On the other hand, just deprecating "WindowIterator" without add
>>>>>>>> new
>>>>>>>>>>>>>> functions seems not very useful for users either since it is only
>>>>>>>>> used
>>>>>>>>>>> as
>>>>>>>>>>>>>> an indicator but users cannot make code changes during this phase
>>>>>>>>>>>>> anyways,
>>>>>>>>>>>>>> so it is still a `one-cut` deal when we eventually remove the
>>>>>>>>>>> deprecated
>>>>>>>>>>>>>> ones and add the new one.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hence I'm slightly inclining to trade compatibility and replace 
>>>>>>>>>>>>>> it
>>>>>>>>> with
>>>>>>>>>>>>> new
>>>>>>>>>>>>>> functions in one release, but if people have a good idea of the
>>>>>>>>>>> renaming
>>>>>>>>>>>>>> approach (I do not have a good one on top of my head :) I can 
>>>>>>>>>>>>>> also
>>>>>>>> be
>>>>>>>>>>>>>> convinced that way.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Mon, Mar 11, 2019 at 10:41 AM Matthias J. Sax <
>>>>>>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I am open to change the return type to
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> KeyValueIterator<Windowed<K>, V>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> However, this requires to rename
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> #fetch(K key, long startTimestamp, long endTimestamp)
>>>>>>>>>>>>>>> #fetch(K key, Instant startTimestamp, Instant endTimestamp)
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> to avoid naming conflicts.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> What new name would you suggest? The existing methods are called
>>>>>>>>>>>>>>> `fetch()`, `fetchAll()`, `all()`, `put()`.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> While I think it would be good to get fully aligned return 
>>>>>>>>>>>>>>> types,
>>>>>>>> I
>>>>>>>>> am
>>>>>>>>>>>>>>> not sure how we can get aligned method names (without renaming 
>>>>>>>>>>>>>>> all
>>>>>>>>> of
>>>>>>>>>>>>>>> them...)? If we think it's worth to rename all to get this 
>>>>>>>>>>>>>>> cleaned
>>>>>>>>>>> up, I
>>>>>>>>>>>>>>> am no opposed.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thoughts?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 3/11/19 10:27 AM, Guozhang Wang wrote:
>>>>>>>>>>>>>>>> I was thinking about changing the return type even, to
>>>>>>>>>>>>>>>> `KeyValueIterator<Windowed<K>, V>` since it is confusing to 
>>>>>>>>>>>>>>>> users
>>>>>>>>>>> about
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> key typed `Long` (Streams javadoc today did not explain it
>>>>>>>> clearly
>>>>>>>>>>>>>>> either),
>>>>>>>>>>>>>>>> note it is not backward compatible at all.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Personally I'd prefer to just deprecate the API and new new 
>>>>>>>>>>>>>>>> ones
>>>>>>>>> that
>>>>>>>>>>>>>>>> return `KeyValueIterator<Windowed<K>, V>` directly, but if most
>>>>>>>>>>> people
>>>>>>>>>>>>>>> felt
>>>>>>>>>>>>>>>> it is too intrusive for compatibility I can be convinced with
>>>>>>>>>>>>>>>> `KeyValueIterator<Long, V>` as well.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Mon, Mar 11, 2019 at 10:17 AM Sophie Blee-Goldman <
>>>>>>>>>>>>>>> sop...@confluent.io>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I remember thinking this while working on window stores, am
>>>>>>>>>>> definitely
>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>> it.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Mon, Mar 11, 2019 at 9:20 AM John Roesler 
>>>>>>>>>>>>>>>>> <j...@confluent.io
>>>>>>>>>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Sounds great to me. Thanks, Matthias!
>>>>>>>>>>>>>>>>>> -John
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Sun, Mar 10, 2019 at 11:58 PM Matthias J. Sax <
>>>>>>>>>>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I would like to propose KIP-439 to deprecate interface
>>>>>>>>>>>>>>>>>>> `WindowStoreIterator`.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-439%3A+Deprecate+Interface+WindowStoreIterator
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Looking forward to your feedback.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to