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