I just re-read the KIP.

One minor comment: we don't need to introduce any deprecated methods.
Thus, RichValueTransformer#punctuate can be removed completely instead
of introducing it as deprecated.

Otherwise looks good to me.

Thanks for being so patient!


-Matthias

On 11/1/17 9:16 PM, Guozhang Wang wrote:
> Jeyhun,
> 
> I think I'm convinced to not do KAFKA-3907 in this KIP. We should think
> carefully if we should add this functionality to the DSL layer moving
> forward since from what we discovered working on it the conclusion is that
> it would require revamping the public APIs quite a lot, and it's not clear
> if it is a good trade-off than asking users to call process() instead.
> 
> 
> Guozhang
> 
> 
> On Wed, Nov 1, 2017 at 4:50 AM, Damian Guy <damian....@gmail.com> wrote:
> 
>> Hi Jeyhun, thanks, looks good.
>> Do we need to remove the line that says:
>>
>>    - on-demand commit() feature
>>
>> Cheers,
>> Damian
>>
>> On Tue, 31 Oct 2017 at 23:07 Jeyhun Karimov <je.kari...@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I removed the 'commit()' feature, as we discussed. It simplified  the
>>> overall design of KIP a lot.
>>> If it is ok, I would like to start a VOTE thread.
>>>
>>> Cheers,
>>> Jeyhun
>>>
>>> On Fri, Oct 27, 2017 at 5:28 PM Matthias J. Sax <matth...@confluent.io>
>>> wrote:
>>>
>>>> Thanks. I understand what you are saying, but I don't agree that
>>>>
>>>>> but also we need a commit() method
>>>>
>>>> I would just not provide `commit()` at DSL level and close the
>>>> corresponding Jira as "not a problem" or similar.
>>>>
>>>>
>>>> -Matthias
>>>>
>>>> On 10/27/17 3:42 PM, Jeyhun Karimov wrote:
>>>>> Hi Matthias,
>>>>>
>>>>> Thanks for your comments. I agree that this is not the best way to
>> do.
>>> A
>>>>> bit of history behind this design.
>>>>>
>>>>> Prior doing this, I tried to provide ProcessorContext itself as an
>>>> argument
>>>>> in Rich interfaces. However, we dont want to give users that
>>> flexibility
>>>>> and “power”. Moreover, ProcessorContext contains processor level
>>>>> information and not Record level info. The only thing we need ij
>>>>> ProcessorContext is commit() method.
>>>>>
>>>>> So, as far as I understood, we need recor context (offset, timestamp
>>> and
>>>>> etc) but also we need a commit() method ( we dont want to provide
>>>>> ProcessorContext as a parameter so users can use
>>>> ProcessorContext.commit()
>>>>> ).
>>>>>
>>>>> As a result, I thought to “propagate” commit() call from
>> RecordContext
>>> to
>>>>> ProcessorContext() .
>>>>>
>>>>>
>>>>> If there is a misunderstanding in motvation/discussion of
>> KIP/included
>>>>> jiras please let me know.
>>>>>
>>>>>
>>>>> Cheers,
>>>>> Jeyhun
>>>>>
>>>>>
>>>>> On Fri 27. Oct 2017 at 12:39, Matthias J. Sax <matth...@confluent.io
>>>
>>>> wrote:
>>>>>
>>>>>> I am personally still not convinced, that we should add `commit()`
>> at
>>>> all.
>>>>>>
>>>>>> @Guozhang: you created the original Jira. Can you elaborate a little
>>>>>> bit? Isn't requesting commits a low level API that should not be
>>> exposed
>>>>>> in the DSL? Just want to understand the motivation better. Why would
>>>>>> anybody that uses the DSL ever want to request a commit? To me,
>>>>>> requesting commits is useful if you manipulated state explicitly,
>> ie,
>>>>>> via Processor API.
>>>>>>
>>>>>> Also, for the solution: it seem rather unnatural to me, that we add
>>>>>> `commit()` to `RecordContext` -- from my understanding,
>>> `RecordContext`
>>>>>> is an helper object that provide access to record meta data.
>>> Requesting
>>>>>> a commit is something quite different. Additionally, a commit does
>> not
>>>>>> commit a specific record but a `RecrodContext` is for a specific
>>> record.
>>>>>>
>>>>>> To me, this does not seem to be a sound API design if we follow this
>>>> path.
>>>>>>
>>>>>>
>>>>>> -Matthias
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 10/26/17 10:41 PM, Jeyhun Karimov wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> Thanks for your suggestions.
>>>>>>>
>>>>>>> I have some comments, to make sure that there is no
>> misunderstanding.
>>>>>>>
>>>>>>>
>>>>>>> 1. Maybe we can deprecate the `commit()` in ProcessorContext, to
>>>> enforce
>>>>>>>> user to consolidate this call as
>>>>>>>> "processorContext.recordContext().commit()". And internal
>>>> implementation
>>>>>>>> of
>>>>>>>> `ProcessorContext.commit()` in `ProcessorContextImpl` is also
>>> changed
>>>> to
>>>>>>>> this call.
>>>>>>>
>>>>>>>
>>>>>>> - I think we should not deprecate `ProcessorContext.commit()`. The
>>> main
>>>>>>> intuition that we introduce `commit()` in `RecordContext` is that,
>>>>>>> `RecordContext` is the one which is provided in Rich interfaces. So
>>> if
>>>>>> user
>>>>>>> wants to commit, then there should be some method inside
>>>> `RecordContext`
>>>>>> to
>>>>>>> do so. Internally, `RecordContext.commit()` calls
>>>>>>> `ProcessorContext.commit()`  (see the last code snippet in
>> KIP-159):
>>>>>>>
>>>>>>> @Override
>>>>>>>     public void process(final K1 key, final V1 value) {
>>>>>>>
>>>>>>>         recordContext = new RecordContext() {               //
>>>>>>> recordContext initialization is added in this KIP
>>>>>>>             @Override
>>>>>>>             public void commit() {
>>>>>>>                 context().commit();
>>>>>>>             }
>>>>>>>
>>>>>>>             @Override
>>>>>>>             public long offset() {
>>>>>>>                 return context().recordContext().offset();
>>>>>>>             }
>>>>>>>
>>>>>>>             @Override
>>>>>>>             public long timestamp() {
>>>>>>>                 return context().recordContext().timestamp();
>>>>>>>             }
>>>>>>>
>>>>>>>             @Override
>>>>>>>             public String topic() {
>>>>>>>                 return context().recordContext().topic();
>>>>>>>             }
>>>>>>>
>>>>>>>             @Override
>>>>>>>             public int partition() {
>>>>>>>                 return context().recordContext().partition();
>>>>>>>             }
>>>>>>>       };
>>>>>>>
>>>>>>>
>>>>>>> So, we cannot deprecate `ProcessorContext.commit()` in this case
>> IMO.
>>>>>>>
>>>>>>>
>>>>>>> 2. Add the `task` reference to the impl class,
>>>> `ProcessorRecordContext`,
>>>>>> so
>>>>>>>> that it can implement the commit call itself.
>>>>>>>
>>>>>>>
>>>>>>> - Actually, I don't think that we need `commit()` in
>>>>>>> `ProcessorRecordContext`. The main intuition is to "transfer"
>>>>>>> `ProcessorContext.commit()` call to Rich interfaces, to support
>>>>>>> user-specific committing.
>>>>>>>  To do so, we introduce `commit()` method in `RecordContext()` just
>>>> only
>>>>>> to
>>>>>>> call ProcessorContext.commit() inside. (see the above code snippet)
>>>>>>> So, in Rich interfaces, we are not dealing with
>>>> `ProcessorRecordContext`
>>>>>>> at all, and we leave all its methods as it is.
>>>>>>> In this KIP, we made `RecordContext` to be the parent class of
>>>>>>> `ProcessorRecordContext`, just because of they share quite amount
>> of
>>>>>>> methods and it is logical to enable inheritance between those two.
>>>>>>>
>>>>>>> 3. In the wiki page, the statement that "However, call to a
>> commit()
>>>>>> method,
>>>>>>>> is valid only within RecordContext interface (at least for now),
>> we
>>>>>> throw
>>>>>>>> an exception in ProcessorRecordContext.commit()." and the code
>>> snippet
>>>>>>>> below would need to be updated as well.
>>>>>>>
>>>>>>>
>>>>>>> - I think above explanation covers this as well.
>>>>>>>
>>>>>>>
>>>>>>> I want to gain some speed to this KIP, as it has gone though many
>>>> changes
>>>>>>> based on user/developer needs, both in
>>>>>> documentation-/implementation-wise.
>>>>>>>
>>>>>>>
>>>>>>> Cheers,
>>>>>>> Jeyhun
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Oct 24, 2017 at 1:41 AM Guozhang Wang <wangg...@gmail.com>
>>>>>> wrote:
>>>>>>>
>>>>>>>> Thanks for the information Jeyhun. I had also forgot about
>>> KAFKA-3907
>>>>>> with
>>>>>>>> this KIP..
>>>>>>>>
>>>>>>>> Thinking a bit more, I'm now inclined to go with what we agreed
>>>> before,
>>>>>> to
>>>>>>>> add the commit() call to `RecordContext`. A few minor tweaks on
>> its
>>>>>>>> implementation:
>>>>>>>>
>>>>>>>> 1. Maybe we can deprecate the `commit()` in ProcessorContext, to
>>>> enforce
>>>>>>>> user to consolidate this call as
>>>>>>>> "processorContext.recordContext().commit()". And internal
>>>> implementation
>>>>>>>> of
>>>>>>>> `ProcessorContext.commit()` in `ProcessorContextImpl` is also
>>> changed
>>>> to
>>>>>>>> this call.
>>>>>>>>
>>>>>>>> 2. Add the `task` reference to the impl class,
>>>>>> `ProcessorRecordContext`, so
>>>>>>>> that it can implement the commit call itself.
>>>>>>>>
>>>>>>>> 3. In the wiki page, the statement that "However, call to a
>> commit()
>>>>>>>> method,
>>>>>>>> is valid only within RecordContext interface (at least for now),
>> we
>>>>>> throw
>>>>>>>> an exception in ProcessorRecordContext.commit()." and the code
>>> snippet
>>>>>>>> below would need to be updated as well.
>>>>>>>>
>>>>>>>>
>>>>>>>> Guozhang
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mon, Oct 23, 2017 at 1:40 PM, Matthias J. Sax <
>>>> matth...@confluent.io
>>>>>>>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Fair point. This is a long discussion and I totally forgot that
>> we
>>>>>>>>> discussed this.
>>>>>>>>>
>>>>>>>>> Seems I changed my opinion about including KAFKA-3907...
>>>>>>>>>
>>>>>>>>> Happy to hear what others think.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> -Matthias
>>>>>>>>>
>>>>>>>>> On 10/23/17 1:20 PM, Jeyhun Karimov wrote:
>>>>>>>>>> Hi Matthias,
>>>>>>>>>>
>>>>>>>>>> It is probably my bad, the discussion was a bit long in this
>>>> thread. I
>>>>>>>>>> proposed the related issue in the related KIP discuss thread [1]
>>> and
>>>>>>>> got
>>>>>>>>> an
>>>>>>>>>> approval [2,3].
>>>>>>>>>> Maybe I misunderstood.
>>>>>>>>>>
>>>>>>>>>> [1]
>>>>>>>>>> http://search-hadoop.com/m/Kafka/uyzND19Asmg1GKKXT1?subj=
>>>>>>>>> Re+DISCUSS+KIP+159+Introducing+Rich+functions+to+Streams
>>>>>>>>>> [2]
>>>>>>>>>> http://search-hadoop.com/m/Kafka/uyzND1kpct22GKKXT1?subj=
>>>>>>>>> Re+DISCUSS+KIP+159+Introducing+Rich+functions+to+Streams
>>>>>>>>>> [3]
>>>>>>>>>> http://search-hadoop.com/m/Kafka/uyzND1G6TGIGKKXT1?subj=
>>>>>>>>> Re+DISCUSS+KIP+159+Introducing+Rich+functions+to+Streams
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Mon, Oct 23, 2017 at 8:44 PM Matthias J. Sax <
>>>>>> matth...@confluent.io
>>>>>>>>>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Interesting.
>>>>>>>>>>>
>>>>>>>>>>> I thought that https://issues.apache.org/
>> jira/browse/KAFKA-4125
>>> is
>>>>>>>> the
>>>>>>>>>>> main motivation for this KIP :)
>>>>>>>>>>>
>>>>>>>>>>> I also think, that we should not expose the full
>> ProcessorContext
>>>> at
>>>>>>>> DSL
>>>>>>>>>>> level.
>>>>>>>>>>>
>>>>>>>>>>> Thus, overall I am not even sure if we should fix KAFKA-3907 at
>>>> all.
>>>>>>>>>>> Manual commits are something DSL users should not worry about
>> --
>>>> and
>>>>>>>> if
>>>>>>>>>>> one really needs this, an advanced user can still insert a
>> dummy
>>>>>>>>>>> `transform` to request a commit from there.
>>>>>>>>>>>
>>>>>>>>>>> -Matthias
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On 10/18/17 5:39 AM, Jeyhun Karimov wrote:
>>>>>>>>>>>> Hi,
>>>>>>>>>>>>
>>>>>>>>>>>> The main intuition is to solve [1], which is part of this KIP.
>>>>>>>>>>>> I agree with you that this might not seem semantically correct
>>> as
>>>> we
>>>>>>>>> are
>>>>>>>>>>>> not committing record state.
>>>>>>>>>>>> Alternatively, we can remove commit() from RecordContext and
>> add
>>>>>>>>>>>> ProcessorContext (which has commit() method) as an extra
>>> argument
>>>> to
>>>>>>>>> Rich
>>>>>>>>>>>> methods:
>>>>>>>>>>>>
>>>>>>>>>>>> instead of
>>>>>>>>>>>> public interface RichValueMapper<V, VR, K> {
>>>>>>>>>>>>     VR apply(final V value,
>>>>>>>>>>>>              final K key,
>>>>>>>>>>>>              final RecordContext recordContext);
>>>>>>>>>>>> }
>>>>>>>>>>>>
>>>>>>>>>>>> we can adopt
>>>>>>>>>>>>
>>>>>>>>>>>> public interface RichValueMapper<V, VR, K> {
>>>>>>>>>>>>     VR apply(final V value,
>>>>>>>>>>>>              final K key,
>>>>>>>>>>>>              final RecordContext recordContext,
>>>>>>>>>>>>              final ProcessorContext processorContext);
>>>>>>>>>>>> }
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> However, in this case, a user can get confused as
>>> ProcessorContext
>>>>>>>> and
>>>>>>>>>>>> RecordContext share some methods with the same name.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Cheers,
>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> [1] https://issues.apache.org/jira/browse/KAFKA-3907
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Oct 17, 2017 at 3:19 AM Guozhang Wang <
>>> wangg...@gmail.com
>>>>>
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Regarding #6 above, I'm still not clear why we would need
>>>>>> `commit()`
>>>>>>>>> in
>>>>>>>>>>>>> both ProcessorContext and RecordContext, could you elaborate
>> a
>>>> bit
>>>>>>>>> more?
>>>>>>>>>>>>>
>>>>>>>>>>>>> To me `commit()` is really a processor context not a record
>>>> context
>>>>>>>>>>>>> logically: when you call that function, it means we would
>>> commit
>>>>>> the
>>>>>>>>>>> state
>>>>>>>>>>>>> of the whole task up to this processed record, not only that
>>>> single
>>>>>>>>>>> record
>>>>>>>>>>>>> itself.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Mon, Oct 16, 2017 at 9:19 AM, Jeyhun Karimov <
>>>>>>>> je.kari...@gmail.com
>>>>>>>>>>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks for the feedback.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 0. RichInitializer definition seems missing.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> - Fixed.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>  I'd suggest moving the key parameter in the RichValueXX and
>>>>>>>>>>> RichReducer
>>>>>>>>>>>>>>> after the value parameters, as well as in the templates;
>> e.g.
>>>>>>>>>>>>>>> public interface RichValueJoiner<V1, V2, VR, K> {
>>>>>>>>>>>>>>>     VR apply(final V1 value1, final V2 value2, final K key,
>>>> final
>>>>>>>>>>>>>>> RecordContext
>>>>>>>>>>>>>>> recordContext);
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> - Fixed.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2. Some of the listed functions are not necessary since
>> their
>>>>>>>> pairing
>>>>>>>>>>>>> APIs
>>>>>>>>>>>>>>> are being deprecated in 1.0 already:
>>>>>>>>>>>>>>> <KR> KGroupedStream<KR, V> groupBy(final
>> RichKeyValueMapper<?
>>>>>>>> super
>>>>>>>>> K,
>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>> super V, KR> selector,
>>>>>>>>>>>>>>>                                    final Serde<KR>
>> keySerde,
>>>>>>>>>>>>>>>                                    final Serde<V>
>> valSerde);
>>>>>>>>>>>>>>> <VT, VR> KStream<K, VR> leftJoin(final KTable<K, VT> table,
>>>>>>>>>>>>>>>                                  final RichValueJoiner<?
>>> super
>>>> K,
>>>>>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>> ? super VT, ? extends VR> joiner,
>>>>>>>>>>>>>>>                                  final Serde<K> keySerde,
>>>>>>>>>>>>>>>                                  final Serde<V> valSerde);
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -Fixed
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 3. For a few functions where we are adding three APIs for a
>>>> combo
>>>>>>>> of
>>>>>>>>>>> both
>>>>>>>>>>>>>>> mapper / joiner, or both initializer / aggregator, or
>> adder /
>>>>>>>>>>>>> subtractor,
>>>>>>>>>>>>>>> I'm wondering if we can just keep one that use "rich"
>>> functions
>>>>>>>> for
>>>>>>>>>>>>> both;
>>>>>>>>>>>>>>> so that we can have less overloads and let users who only
>>> want
>>>> to
>>>>>>>>>>>>> access
>>>>>>>>>>>>>>> one of them to just use dummy parameter declarations. For
>>>>>> example:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <GK, GV, RV> KStream<K, RV> join(final GlobalKTable<GK, GV>
>>>>>>>>>>>>> globalKTable,
>>>>>>>>>>>>>>>                                  final RichKeyValueMapper<?
>>>> super
>>>>>>>>> K, ?
>>>>>>>>>>>>>>> super
>>>>>>>>>>>>>>>  V, ? extends GK> keyValueMapper,
>>>>>>>>>>>>>>>                                  final RichValueJoiner<?
>>> super
>>>> K,
>>>>>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>> ? super GV, ? extends RV> joiner);
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -Agreed. Fixed.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 4. For TimeWindowedKStream, I'm wondering why we do not make
>>> its
>>>>>>>>>>>>>>> Initializer also "rich" functions? I.e.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> - It was a typo. Fixed.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 5. We need to move "RecordContext" from
>>>> o.a.k.processor.internals
>>>>>>>> to
>>>>>>>>>>>>>>> o.a.k.processor.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 6. I'm not clear why we want to move `commit()` from
>>>>>>>>> ProcessorContext
>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> RecordContext?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> -
>>>>>>>>>>>>>> Because it makes sense logically and  to reduce code
>>> maintenance
>>>>>>>>> (both
>>>>>>>>>>>>>> interfaces have offset() timestamp() topic() partition()
>>>>>>>> methods),  I
>>>>>>>>>>>>>> inherit ProcessorContext from RecordContext.
>>>>>>>>>>>>>> Since we need commit() method both in ProcessorContext and
>> in
>>>>>>>>>>>>> RecordContext
>>>>>>>>>>>>>> I move commit() method to parent class (RecordContext).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Oct 11, 2017 at 12:59 AM, Guozhang Wang <
>>>>>>>> wangg...@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Jeyhun,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks for the updated KIP, here are my comments.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 0. RichInitializer definition seems missing.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 1. I'd suggest moving the key parameter in the RichValueXX
>>> and
>>>>>>>>>>>>>> RichReducer
>>>>>>>>>>>>>>> after the value parameters, as well as in the templates;
>> e.g.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> public interface RichValueJoiner<V1, V2, VR, K> {
>>>>>>>>>>>>>>>     VR apply(final V1 value1, final V2 value2, final K key,
>>>> final
>>>>>>>>>>>>>>> RecordContext
>>>>>>>>>>>>>>> recordContext);
>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> My motivation is that for lambda expression in J8, users
>> that
>>>>>>>> would
>>>>>>>>>>> not
>>>>>>>>>>>>>>> care about the key but only the context, or vice versa, is
>>>> likely
>>>>>>>> to
>>>>>>>>>>>>>> write
>>>>>>>>>>>>>>> it as (value1, value2, dummy, context) -> ... than putting
>>> the
>>>>>>>> dummy
>>>>>>>>>>> at
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> beginning of the parameter list. Generally speaking we'd
>> like
>>>> to
>>>>>>>>> make
>>>>>>>>>>>>> all
>>>>>>>>>>>>>>> the "necessary" parameters prior to optional ones.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2. Some of the listed functions are not necessary since
>> their
>>>>>>>>> pairing
>>>>>>>>>>>>>> APIs
>>>>>>>>>>>>>>> are being deprecated in 1.0 already:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <KR> KGroupedStream<KR, V> groupBy(final
>> RichKeyValueMapper<?
>>>>>>>> super
>>>>>>>>> K,
>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>> super V, KR> selector,
>>>>>>>>>>>>>>>                                    final Serde<KR>
>> keySerde,
>>>>>>>>>>>>>>>                                    final Serde<V>
>> valSerde);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <VT, VR> KStream<K, VR> leftJoin(final KTable<K, VT> table,
>>>>>>>>>>>>>>>                                  final RichValueJoiner<?
>>> super
>>>> K,
>>>>>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>> ? super VT, ? extends VR> joiner,
>>>>>>>>>>>>>>>                                  final Serde<K> keySerde,
>>>>>>>>>>>>>>>                                  final Serde<V> valSerde);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 3. For a few functions where we are adding three APIs for a
>>>> combo
>>>>>>>> of
>>>>>>>>>>>>> both
>>>>>>>>>>>>>>> mapper / joiner, or both initializer / aggregator, or
>> adder /
>>>>>>>>>>>>> subtractor,
>>>>>>>>>>>>>>> I'm wondering if we can just keep one that use "rich"
>>> functions
>>>>>>>> for
>>>>>>>>>>>>> both;
>>>>>>>>>>>>>>> so that we can have less overloads and let users who only
>>> want
>>>> to
>>>>>>>>>>>>> access
>>>>>>>>>>>>>>> one of them to just use dummy parameter declarations. For
>>>>>> example:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <GK, GV, RV> KStream<K, RV> join(final GlobalKTable<GK, GV>
>>>>>>>>>>>>> globalKTable,
>>>>>>>>>>>>>>>                                  final RichKeyValueMapper<?
>>>> super
>>>>>>>>> K, ?
>>>>>>>>>>>>>>> super
>>>>>>>>>>>>>>>  V, ? extends GK> keyValueMapper,
>>>>>>>>>>>>>>>                                  final RichValueJoiner<?
>>> super
>>>> K,
>>>>>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>> ? super GV, ? extends RV> joiner);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <VR> KTable<K, VR> aggregate(final RichInitializer<K, VR>
>>>>>>>>> initializer,
>>>>>>>>>>>>>>>                              final RichAggregator<? super
>> K,
>>> ?
>>>>>>>> super
>>>>>>>>>>> V,
>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>> aggregator,
>>>>>>>>>>>>>>>                              final Materialized<K, VR,
>>>>>>>>>>>>>> KeyValueStore<Bytes,
>>>>>>>>>>>>>>> byte[]>> materialized);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Similarly for KGroupedTable, a bunch of aggregate() are
>>>>>> deprecated
>>>>>>>>> so
>>>>>>>>>>>>> we
>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>> not need to add its rich functions any more.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 4. For TimeWindowedKStream, I'm wondering why we do not
>> make
>>>> its
>>>>>>>>>>>>>>> Initializer also "rich" functions? I.e.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> <VR> KTable<Windowed<K>, VR> aggregate(final
>>>> RichInitializer<VR,
>>>>>>>> K>
>>>>>>>>>>>>>>> initializer,
>>>>>>>>>>>>>>>                                        final
>> RichAggregator<?
>>>>>>>> super
>>>>>>>>> K,
>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>> super V, VR> aggregator);
>>>>>>>>>>>>>>> <VR> KTable<Windowed<K>, VR> aggregate(final
>>>> RichInitializer<VR,
>>>>>>>> K>
>>>>>>>>>>>>>>> initializer,
>>>>>>>>>>>>>>>                                        final
>> RichAggregator<?
>>>>>>>> super
>>>>>>>>> K,
>>>>>>>>>>>>> ?
>>>>>>>>>>>>>>> super V, VR> aggregator,
>>>>>>>>>>>>>>>                                        final
>> Materialized<K,
>>>> VR,
>>>>>>>>>>>>>>> WindowStore<Bytes, byte[]>> materialized);
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 5. We need to move "RecordContext" from
>>>> o.a.k.processor.internals
>>>>>>>> to
>>>>>>>>>>>>>>> o.a.k.processor.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 6. I'm not clear why we want to move `commit()` from
>>>>>>>>> ProcessorContext
>>>>>>>>>>>>> to
>>>>>>>>>>>>>>> RecordContext? Conceptually I think it would better staying
>>> in
>>>>>> the
>>>>>>>>>>>>>>> ProcessorContext. Do you find this not doable in the
>> internal
>>>>>>>>>>>>>>> implementations?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Fri, Sep 22, 2017 at 1:09 PM, Ted Yu <
>> yuzhih...@gmail.com
>>>>
>>>>>>>>> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>    recordContext = new RecordContext() {               //
>>>>>>>>>>>>> recordContext
>>>>>>>>>>>>>>>> initialization is added in this KIP
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> This code snippet seems to be standard - would it make
>> sense
>>>> to
>>>>>>>>> pull
>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>> into a (sample) RecordContext implementation ?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Cheers
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Fri, Sep 22, 2017 at 12:14 PM, Jeyhun Karimov <
>>>>>>>>>>>>> je.kari...@gmail.com
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi Ted,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks for your comments. I added a couple of comments in
>>> KIP
>>>>>> to
>>>>>>>>>>>>>>> clarify
>>>>>>>>>>>>>>>>> some points.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> bq. provides a hybrd solution
>>>>>>>>>>>>>>>>>> Typo in hybrid.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> - My bad. Thanks for the correction.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> It would be nice if you can name some Value operator as
>>>>>>>> examples.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> - I added the corresponding interface names to KIP.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> <VR> KTable<K, VR> aggregate(final Initializer<VR>
>>>> initializer,
>>>>>>>>>>>>>>>>>>                              final Aggregator<? super
>> K, ?
>>>>>>>> super
>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>>> adder,
>>>>>>>>>>>>>>>>>> The adder doesn't need to be RichAggregator ?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> - Exactly. However, there are 2 Aggregator-type arguments
>>> in
>>>>>> the
>>>>>>>>>>>>>>> related
>>>>>>>>>>>>>>>>> method. So, I had to overload all possible their Rich
>>>>>>>>> counterparts:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> // adder with non-rich, subtrctor is rich
>>>>>>>>>>>>>>>>> <VR> KTable<K, VR> aggregate(final Initializer<VR>
>>>> initializer,
>>>>>>>>>>>>>>>>>                              final Aggregator<? super K,
>> ?
>>>>>> super
>>>>>>>>> V,
>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>> adder,
>>>>>>>>>>>>>>>>>                              final RichAggregator<? super
>>> K,
>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>> subtractor,
>>>>>>>>>>>>>>>>>                              final Materialized<K, VR,
>>>>>>>>>>>>>>>> KeyValueStore<Bytes,
>>>>>>>>>>>>>>>>> byte[]>> materialized);
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> // adder withrich, subtrctor is non-rich
>>>>>>>>>>>>>>>>> <VR> KTable<K, VR> aggregate(final Initializer<VR>
>>>> initializer,
>>>>>>>>>>>>>>>>>                              final RichAggregator<? super
>>> K,
>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>> adder,
>>>>>>>>>>>>>>>>>                              final Aggregator<? super K,
>> ?
>>>>>> super
>>>>>>>>> V,
>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>> subtractor,
>>>>>>>>>>>>>>>>>                              final Materialized<K, VR,
>>>>>>>>>>>>>>>> KeyValueStore<Bytes,
>>>>>>>>>>>>>>>>> byte[]>> materialized);
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> // both adder and subtractor are rich
>>>>>>>>>>>>>>>>> <VR> KTable<K, VR> aggregate(final Initializer<VR>
>>>> initializer,
>>>>>>>>>>>>>>>>>                              final RichAggregator<? super
>>> K,
>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>> adder,
>>>>>>>>>>>>>>>>>                              final RichAggregator<? super
>>> K,
>>>> ?
>>>>>>>>>>>>> super
>>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>> subtractor,
>>>>>>>>>>>>>>>>>                              final Materialized<K, VR,
>>>>>>>>>>>>>>>> KeyValueStore<Bytes,
>>>>>>>>>>>>>>>>> byte[]>> materialized);
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Can you explain a bit about the above implementation ?
>>>>>>>>>>>>>>>>>>    void commit () {
>>>>>>>>>>>>>>>>>>      throw new UnsupportedOperationException("commit()
>> is
>>>> not
>>>>>>>>>>>>>>>> supported
>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>> this context");
>>>>>>>>>>>>>>>>>> Is the exception going to be replaced with real code in
>>> the
>>>> PR
>>>>>>>> ?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> - I added some comments both inside and outside the code
>>>>>>>> snippets
>>>>>>>>>>>>> in
>>>>>>>>>>>>>>> KIP.
>>>>>>>>>>>>>>>>> Specifically, for the code snippet above, we add
>> *commit()*
>>>>>>>> method
>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>> *RecordContext* interface.
>>>>>>>>>>>>>>>>> However, we want  *commit()* method to be used only for
>>>>>>>>>>>>>> *RecordContext*
>>>>>>>>>>>>>>>>> instances (at least for now), so we add
>>>>>>>>>>>>> UnsupportedOperationException
>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>> all classes/interfaces that extend/implement
>>> *RecordContext.*
>>>>>>>>>>>>>>>>> In general, 1) we make RecordContext publicly available
>>>> within
>>>>>>>>>>>>>>>>> ProcessorContext,  2) initialize its instance within all
>>>>>>>> required
>>>>>>>>>>>>>>>>> Processors and 3) pass it as an argument to the related
>>> Rich
>>>>>>>>>>>>>> interfaces
>>>>>>>>>>>>>>>>> inside Processors.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> On Fri, Sep 22, 2017 at 6:44 PM Ted Yu <
>>> yuzhih...@gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> bq. provides a hybrd solution
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Typo in hybrid.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> bq. accessing read-only keys within XXXValues operators
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> It would be nice if you can name some Value operator as
>>>>>>>> examples.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> <VR> KTable<K, VR> aggregate(final Initializer<VR>
>>>>>> initializer,
>>>>>>>>>>>>>>>>>>                              final Aggregator<? super
>> K, ?
>>>>>>>> super
>>>>>>>>>>>>> V,
>>>>>>>>>>>>>>> VR>
>>>>>>>>>>>>>>>>>> adder,
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> The adder doesn't need to be RichAggregator ?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>   public RecordContext recordContext() {
>>>>>>>>>>>>>>>>>>     return this.recordContext();
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Can you explain a bit about the above implementation ?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>    void commit () {
>>>>>>>>>>>>>>>>>>      throw new UnsupportedOperationException("commit()
>> is
>>>> not
>>>>>>>>>>>>>>>> supported
>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>> this context");
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Is the exception going to be replaced with real code in
>>> the
>>>> PR
>>>>>>>> ?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Cheers
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> On Fri, Sep 22, 2017 at 9:28 AM, Jeyhun Karimov <
>>>>>>>>>>>>>>> je.kari...@gmail.com>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Dear community,
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> I updated the related KIP [1]. Please feel free to
>>> comment.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>>>>>>>>>>> 159%3A+Introducing+Rich+functions+to+Streams
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Fri, Sep 22, 2017 at 12:20 AM Jeyhun Karimov <
>>>>>>>>>>>>>>>> je.kari...@gmail.com>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hi Damian,
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks for the update. I working on it and will
>> provide
>>> an
>>>>>>>>>>>>>> update
>>>>>>>>>>>>>>>>> soon.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Thu, Sep 21, 2017 at 4:50 PM Damian Guy <
>>>>>>>>>>>>>> damian....@gmail.com
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Hi Jeyhun,
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> All KIP-182 API PRs have now been merged. So you can
>>>>>>>>>>>>> consider
>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>> stable.
>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>> Damian
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Thu, 21 Sep 2017 at 15:23 Jeyhun Karimov <
>>>>>>>>>>>>>>> je.kari...@gmail.com
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Thanks a lot for your comments. For the single
>>> interface
>>>>>>>>>>>>>>>> (RichXXX
>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>> XXXWithKey) solution, I have already submitted a PR
>>> but
>>>>>>>>>>>>>>> probably
>>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>> outdated (when the KIP first proposed), I need to
>>>> revisit
>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>> one.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> @Guozhang, from our (offline) discussion, I
>> understood
>>>>>>>>>>>>> that
>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>> may
>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>>>>>>>>> it merge this KIP into the upcoming release, as
>>> KIP-159
>>>> is
>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>> voted
>>>>>>>>>>>>>>>>>>> yet
>>>>>>>>>>>>>>>>>>>>>> (because we want both KIP-149 and KIP-159 to be as
>> an
>>>>>>>>>>>>>> "atomic"
>>>>>>>>>>>>>>>>>> merge).
>>>>>>>>>>>>>>>>>>>>> So
>>>>>>>>>>>>>>>>>>>>>> I decided to wait until KIP-182 gets stable (there
>> are
>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>> minor
>>>>>>>>>>>>>>>>>>>>> updates
>>>>>>>>>>>>>>>>>>>>>> AFAIK) and update the KIP accordingly. Please
>> correct
>>> me
>>>>>>>>>>>>> if
>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>> am
>>>>>>>>>>>>>>>>>> wrong
>>>>>>>>>>>>>>>>>>>>> or I
>>>>>>>>>>>>>>>>>>>>>> misunderstood.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On Thu, Sep 21, 2017 at 4:11 PM Damian Guy <
>>>>>>>>>>>>>>>> damian....@gmail.com>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> +1
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> On Thu, 21 Sep 2017 at 13:46 Guozhang Wang <
>>>>>>>>>>>>>>>> wangg...@gmail.com>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> +1 for me as well for collapsing.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun, could you update the wiki accordingly to
>>> show
>>>>>>>>>>>>>>> what's
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> final
>>>>>>>>>>>>>>>>>>>>>>>> updates post KIP-182 that needs to be done in
>>> KIP-159
>>>>>>>>>>>>>>>>> including
>>>>>>>>>>>>>>>>>>>>>> KIP-149?
>>>>>>>>>>>>>>>>>>>>>>>> The child page I made is just a suggestion, but
>> you
>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>> still
>>>>>>>>>>>>>>>>>>>>> need to
>>>>>>>>>>>>>>>>>>>>>>>> update your proposal for people to comment and
>> vote
>>>>>>>>>>>>> on.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Sep 14, 2017 at 10:37 PM, Ted Yu <
>>>>>>>>>>>>>>>> yuzhih...@gmail.com
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> +1
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> One interface is cleaner.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Sep 14, 2017 at 7:26 AM, Bill Bejeck <
>>>>>>>>>>>>>>>>>> bbej...@gmail.com
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> +1 for me on collapsing the RichXXXX and
>>>>>>>>>>>>>>>> ValueXXXXWithKey
>>>>>>>>>>>>>>>>>>>>>> interfaces
>>>>>>>>>>>>>>>>>>>>>>>>> into 1
>>>>>>>>>>>>>>>>>>>>>>>>>> interface.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>>>>> Bill
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Sep 13, 2017 at 11:31 AM, Jeyhun
>> Karimov <
>>>>>>>>>>>>>>>>>>>>>>> je.kari...@gmail.com
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Damian,
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for your feedback. Actually, this (what
>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>> propose)
>>>>>>>>>>>>>>>>>>>>> was
>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> first
>>>>>>>>>>>>>>>>>>>>>>>>>>> idea of KIP-149. Then we decided to divide it
>>>>>>>>>>>>> into
>>>>>>>>>>>>>>> two
>>>>>>>>>>>>>>>>>>> KIPs. I
>>>>>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>>>>>>>>>> expressed my opinion that keeping the two
>>>>>>>>>>>>>> interfaces
>>>>>>>>>>>>>>>>> (Rich
>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>> withKey)
>>>>>>>>>>>>>>>>>>>>>>>>>>> separate would add more overloads. So, email
>>>>>>>>>>>>>>>> discussion
>>>>>>>>>>>>>>>>>>>>> resulted
>>>>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>>>>>>>>> would not be a problem.
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Our initial idea was similar to :
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> public abstract class RichValueMapper<K, V, VR>
>>>>>>>>>>>>>>>>>> implements
>>>>>>>>>>>>>>>>>>>>>>>>>>> ValueMapperWithKey<K, V, VR>, RichFunction {
>>>>>>>>>>>>>>>>>>>>>>>>>>> ......
>>>>>>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> So, we check the type of object, whether it is
>>>>>>>>>>>>>>> RichXXX
>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>>> XXXWithKey
>>>>>>>>>>>>>>>>>>>>>>>>>> inside
>>>>>>>>>>>>>>>>>>>>>>>>>>> the called method and continue accordingly.
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> If this is ok with the community, I would like
>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>> revert
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>> current
>>>>>>>>>>>>>>>>>>>>>>>>>> design
>>>>>>>>>>>>>>>>>>>>>>>>>>> to this again.
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Sep 13, 2017 at 3:02 PM Damian Guy <
>>>>>>>>>>>>>>>>>>>>> damian....@gmail.com
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jeyhun,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for sending out the update. I guess i
>>>>>>>>>>>>> was
>>>>>>>>>>>>>>>>>> thinking
>>>>>>>>>>>>>>>>>>>>> more
>>>>>>>>>>>>>>>>>>>>>>>> along
>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>> lines of option 2 where we collapse the
>>>>>>>>>>>>> RichXXXX
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>> ValueXXXXWithKey
>>>>>>>>>>>>>>>>>>>>>>>>>> etc
>>>>>>>>>>>>>>>>>>>>>>>>>>>> interfaces into 1 interface that has all of
>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>> arguments. I
>>>>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>>>> then
>>>>>>>>>>>>>>>>>>>>>>>>>>>> only need to add one additional overload for
>>>>>>>>>>>>>> each
>>>>>>>>>>>>>>>>>>> operator?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Damian
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, 13 Sep 2017 at 10:59 Jeyhun Karimov <
>>>>>>>>>>>>>>>>>>>>>>> je.kari...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dear all,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would like to resume the discussion on
>>>>>>>>>>>>>>> KIP-159.
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>> (and
>>>>>>>>>>>>>>>>>>>>>>>> Guozhang)
>>>>>>>>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that releasing KIP-149 and KIP-159 in the
>>>>>>>>>>>>> same
>>>>>>>>>>>>>>>>> release
>>>>>>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>>>>>>>>>>>>> sense
>>>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> avoid a release with "partial" public APIs.
>>>>>>>>>>>>>>> There
>>>>>>>>>>>>>>>>> is a
>>>>>>>>>>>>>>>>>>> KIP
>>>>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>>>>>>>>>> proposed
>>>>>>>>>>>>>>>>>>>>>>>>>>>> by
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Guozhang (and approved by me) to unify both
>>>>>>>>>>>>>>> KIPs.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Please feel free to comment on this.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> https://cwiki.apache.org/
>>>>>>>>>>>>>>> confluence/pages/viewpage.
>>>>>>>>>>>>>>>>>>>>>>>>>>> action?pageId=73637757
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Jul 21, 2017 at 2:00 AM Jeyhun
>>>>>>>>>>>>>> Karimov <
>>>>>>>>>>>>>>>>>>>>>>>>> je.kari...@gmail.com
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Matthias, Damian, all,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for your comments and sorry for
>>>>>>>>>>>>>>>> super-late
>>>>>>>>>>>>>>>>>>>>> update.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Sure, the DSL refactoring is not blocking
>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>> KIP.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I made some changes to KIP document based
>>>>>>>>>>>>> on
>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>>>> prototype.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Please feel free to comment.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Jul 7, 2017 at 9:35 PM Matthias J.
>>>>>>>>>>>>>>> Sax <
>>>>>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would not block this KIP with regard to
>>>>>>>>>>>>>> DSL
>>>>>>>>>>>>>>>>>>>>> refactoring.
>>>>>>>>>>>>>>>>>>>>>>>> IMHO,
>>>>>>>>>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> just finish this one and the DSL
>>>>>>>>>>>>>> refactoring
>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>> help
>>>>>>>>>>>>>>>>>>>>>> later
>>>>>>>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> reduce the number of overloads.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 7/7/17 5:28 AM, Jeyhun Karimov wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I am following the related thread in
>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> mailing
>>>>>>>>>>>>>>>>>>> list
>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>>>> looking
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> forward
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for one-shot solution for overloads
>>>>>>>>>>>>>> issue.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Jul 7, 2017 at 10:32 AM Damian
>>>>>>>>>>>>>> Guy
>>>>>>>>>>>>>>> <
>>>>>>>>>>>>>>>>>>>>>>>>>> damian....@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jeyhun,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> About overrides, what other
>>>>>>>>>>>>> alternatives
>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>> have?
>>>>>>>>>>>>>>>>>>>>>> For
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> backwards-compatibility we have to
>>>>>>>>>>>>> add
>>>>>>>>>>>>>>>> extra
>>>>>>>>>>>>>>>>>>>>> methods
>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>> existing
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ones.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> It wasn't clear to me in the KIP if
>>>>>>>>>>>>>> these
>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>> new
>>>>>>>>>>>>>>>>>>>>>> methods
>>>>>>>>>>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> replacing
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> existing ones.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Also, we are currently discussing
>>>>>>>>>>>>>> options
>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>> replacing
>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> overrides.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Damian
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> About ProcessorContext vs
>>>>>>>>>>>>>> RecordContext,
>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>> right.
>>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> need to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> implement a prototype to understand
>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> full
>>>>>>>>>>>>>>>>>>>>> picture
>>>>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>>>>> some
>>>>>>>>>>>>>>>>>>>>>>>>>>> parts
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KIP might not be as straightforward
>>>>>>>>>>>>> as
>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>> thought.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Jul 5, 2017 at 10:40 AM
>>>>>>>>>>>>> Damian
>>>>>>>>>>>>>>> Guy
>>>>>>>>>>>>>>>> <
>>>>>>>>>>>>>>>>>>>>>>>>>>> damian....@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> HI Jeyhun,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Is the intention that these methods
>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>> new
>>>>>>>>>>>>>>>>>>>>> overloads
>>>>>>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KStream,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTable, etc?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> It is worth noting that a
>>>>>>>>>>>>>>> ProcessorContext
>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>>>> RecordContext.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> A
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> RecordContext, as it stands, only
>>>>>>>>>>>>>> exists
>>>>>>>>>>>>>>>>>> during
>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> processing
>>>>>>>>>>>>>>>>>>>>>>>>>>>> of a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>
> 
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to