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
>>>>>>>>>>>>>>>>>>>>>>>>> single
>>>>>>>>>>>>>>>>>>>>>>>>>> record. Whereas the ProcessorContext
>>>>>>> exists
>>>>>>>>> for
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> lifetime
>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> Processor. Sot it doesn't make sense
>>>>> to
>>>>>>>> cast a
>>>>>>>>>>>>>>>>> ProcessorContext
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>> RecordContext.
>>>>>>>>>>>>>>>>>>>>>>>>>> You mentioned above passing the
>>>>>>>>>>>>>> InternalProcessorContext
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> init()
>>>>>>>>>>>>>>>>>>>>>>>>>> calls. It is internal for a reason
>>>>> and i
>>>>>>>> think
>>>>>>>>>> it
>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>> remain
>>>>>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>>>> way.
>>>>>>>>>>>>>>>>>>>>>>>>>> It might be better to move the
>>>>>>>> recordContext()
>>>>>>>>>>>> method
>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>>>>>>>>>>>>> InternalProcessorContext to
>>>>>>>> ProcessorContext.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> In the KIP you have an example
>>>>> showing:
>>>>>>>>>>>>>>>>>>>>>>>>>> richMapper.init((RecordContext)
>>>>>>>>>> processorContext);
>>>>>>>>>>>>>>>>>>>>>>>>>> But the interface is:
>>>>>>>>>>>>>>>>>>>>>>>>>> public interface RichValueMapper<V,
>>>>> VR>
>>>>>> {
>>>>>>>>>>>>>>>>>>>>>>>>>>     VR apply(final V value, final
>>>>>>>>> RecordContext
>>>>>>>>>>>>>>>>> recordContext);
>>>>>>>>>>>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>>>>>>>>>>> i.e., there is no init(...), besides
>>>>> as
>>>>>>>> above
>>>>>>>>>> this
>>>>>>>>>>>>>>> wouldn't
>>>>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>>>>>>>>> sense.
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>>>>>>>>> Damian
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, 4 Jul 2017 at 23:30 Jeyhun
>>>>>>> Karimov <
>>>>>>>>>>>>>>>>>> je.kari...@gmail.com
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Matthias,
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Actually my intend was to provide
>>>> to
>>>>>>>>>>>> RichInitializer
>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> later
>>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>>> could
>>>>>>>>>>>>>>>>>>>>>>>>>>> provide the context of the record
>>>> as
>>>>>> you
>>>>>>>> also
>>>>>>>>>>>>>> mentioned.
>>>>>>>>>>>>>>>>>>>>>>>>>>> I remove that not to confuse the
>>>>> users.
>>>>>>>>>>>>>>>>>>>>>>>>>>> Regarding the RecordContext and
>>>>>>>>>> ProcessorContext
>>>>>>>>>>>>>>>>> interfaces, I
>>>>>>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>>>>>>>>>>>>>> realized the
>>>> InternalProcessorContext
>>>>>>>> class.
>>>>>>>>>>>> Can't
>>>>>>>>>>>>> we
>>>>>>>>>>>>>>> pass
>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>>>>>>>>>>>>>>> parameter to init() method of
>>>>>> processors?
>>>>>>>>> Then
>>>>>>>>>> we
>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>> able
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>> get
>>>>>>>>>>>>>>>>>>>>>>>>>>> RecordContext easily with just a
>>>>> method
>>>>>>>> call.
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Jun 29, 2017 at 10:14 PM
>>>>>> Matthias
>>>>>>>> J.
>>>>>>>>>> Sax
>>>>>>>>>>>> <
>>>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> One more thing:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> I don't think `RichInitializer`
>>>> does
>>>>>>> make
>>>>>>>>>>>> sense. As
>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>> don't
>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>>>>> any
>>>>>>>>>>>>>>>>>>>>>>>>>>>> input record, there is also no
>>>>>> context.
>>>>>>> We
>>>>>>>>>>>> could of
>>>>>>>>>>>>>>>> course
>>>>>>>>>>>>>>>>>>>> provide
>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>> context of the record that
>>>> triggers
>>>>>> the
>>>>>>>> init
>>>>>>>>>>>> call,
>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>> seems
>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>>>>>>> semantically questionable. Also,
>>>> the
>>>>>>>> context
>>>>>>>>>> for
>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>> first
>>>>>>>>>>>>>>>>>>>> record
>>>>>>>>>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>>>>>>>>>>> be provided by the consecutive
>>>> call
>>>>> to
>>>>>>>>>> aggregate
>>>>>>>>>>>>>>> anyways.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 6/29/17 1:11 PM, Matthias J.
>>>> Sax
>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for updating the KIP.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I have one concern with regard to
>>>>>>>> backward
>>>>>>>>>>>>>>>> compatibility.
>>>>>>>>>>>>>>>>>> You
>>>>>>>>>>>>>>>>>>>>>>>>> suggest
>>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> use RecrodContext as base
>>>> interface
>>>>>> for
>>>>>>>>>>>>>>>> ProcessorContext.
>>>>>>>>>>>>>>>>>> This
>>>>>>>>>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> break compatibility.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think, we should just have two
>>>>>>>>> independent
>>>>>>>>>>>>>>> interfaces.
>>>>>>>>>>>>>>>>> Our
>>>>>>>>>>>>>>>>>>> own
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ProcessorContextImpl class would
>>>>>>>> implement
>>>>>>>>>>>> both.
>>>>>>>>>>>>>> This
>>>>>>>>>>>>>>>>> allows
>>>>>>>>>>>>>>>>>>> us
>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> cast
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it to `RecordContext` and thus
>>>>> limit
>>>>>>> the
>>>>>>>>>>>> visible
>>>>>>>>>>>>>>> scope.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 6/27/17 1:35 PM, Jeyhun
>>>> Karimov
>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I updated the KIP w.r.t.
>>>>> discussion
>>>>>>> and
>>>>>>>>>>>> comments.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Basically I eliminated overloads
>>>>> for
>>>>>>>>>>>> particular
>>>>>>>>>>>>>>> method
>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>>>>>>> more
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> than 3.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> As we can see there are a lot of
>>>>>>>> overloads
>>>>>>>>>>>> (and
>>>>>>>>>>>>>> more
>>>>>>>>>>>>>>>> will
>>>>>>>>>>>>>>>>>>> come
>>>>>>>>>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>>>>>>>>>> KIP-149
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> :) )
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> So, is it wise to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wait the result of constructive
>>>>> DSL
>>>>>>>> thread
>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> extend KIP to address this issue
>>>>> as
>>>>>>> well
>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> continue as it is?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Jun 14, 2017 at 11:29 PM
>>>>>>>> Guozhang
>>>>>>>>>>>> Wang <
>>>>>>>>>>>>>>>>>>>>>>>>> wangg...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> LGTM. Thanks!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Jun 13, 2017 at 2:20
>>>> PM,
>>>>>>> Jeyhun
>>>>>>>>>>>> Karimov
>>>>>>>>>>>>> <
>>>>>>>>>>>>>>>>>>>>>>>>>>> je.kari...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the comment
>>>> Matthias.
>>>>>>> After
>>>>>>>>> all
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> discussion
>>>>>>>>>>>>>>>>>>>>>>>>> (thanks
>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>> all
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> participants), I think this
>>>>>> (single
>>>>>>>>> method
>>>>>>>>>>>> that
>>>>>>>>>>>>>>>> passes
>>>>>>>>>>>>>>>>>> in a
>>>>>>>>>>>>>>>>>>>>>>>>>>>> RecordContext
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> object) is the best
>>>> alternative.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Just a side note: I think
>>>>>> KAFKA-3907
>>>>>>>> [1]
>>>>>>>>>> can
>>>>>>>>>>>>> also
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>>> integrated
>>>>>>>>>>>>>>>>>>>>>>>>>> into
>>>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KIP by adding related method
>>>>>> inside
>>>>>>>>>>>>> RecordContext
>>>>>>>>>>>>>>>>>>> interface.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/KAFKA-3907
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jeyhun
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Jun 13, 2017 at 7:50
>>>> PM
>>>>>>>> Matthias
>>>>>>>>>> J.
>>>>>>>>>>>>> Sax <
>>>>>>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would like to push this
>>>>>>> discussion
>>>>>>>>>>>> further.
>>>>>>>>>>>>> It
>>>>>>>>>>>>>>>> seems
>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>> got
>>>>>>>>>>>>>>>>>>>>>>>>>> nice
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> alternatives (thanks for the
>>>>>>> summary
>>>>>>>>>>>> Jeyhun!).
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> With respect to RichFunctions
>>>>> and
>>>>>>>>>> allowing
>>>>>>>>>>>>> them
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>>>> stateful, I
>>>>>>>>>>>>>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> my doubt as expressed
>>>> already.
>>>>>> From
>>>>>>>> my
>>>>>>>>>>>>>>>> understanding,
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>> idea
>>>>>>>>>>>>>>>>>>>>>>>>>> was
>>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> give access to record
>>>> metadata
>>>>>>>>>> information
>>>>>>>>>>>>> only.
>>>>>>>>>>>>>>> If
>>>>>>>>>>>>>>>>> you
>>>>>>>>>>>>>>>>>>> want
>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> do
>>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> stateful computation you
>>>> should
>>>>>>>> rather
>>>>>>>>>> use
>>>>>>>>>>>>>>>>> #transform().
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Furthermore, as pointed out,
>>>> we
>>>>>>> would
>>>>>>>>>> need
>>>>>>>>>>>> to
>>>>>>>>>>>>>>> switch
>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> supplier-pattern introducing
>>>>> many
>>>>>>>> more
>>>>>>>>>>>>>> overloads.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> For those reason, I advocate
>>>>> for
>>>>>> a
>>>>>>>>> simple
>>>>>>>>>>>>>>> interface
>>>>>>>>>>>>>>>>>> with a
>>>>>>>>>>>>>>>>>>>>>>>>> single
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> method
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that passes in a
>>>> RecordContext
>>>>>>>> object.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 6/6/17 5:15 PM, Guozhang
>>>>> Wang
>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the comprehensive
>>>>>>>> summary!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Personally I'd prefer the
>>>>> option
>>>>>>> of
>>>>>>>>>>>> passing
>>>>>>>>>>>>>>>>>> RecordContext
>>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> additional
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> parameter into he overloaded
>>>>>>>> function.
>>>>>>>>>> But
>>>>>>>>>>>>> I'm
>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>> open
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>> other
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> arguments
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if there are sth. that I
>>>> have
>>>>>>>>>> overlooked.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Jun 5, 2017 at 3:19
>>>>> PM,
>>>>>>>> Jeyhun
>>>>>>>>>>>>> Karimov
>>>>>>>>>>>>>> <
>>>>>>>>>>>>>>>>>>>>>>>>>>>> je.kari...@gmail.com
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for your comments
>>>>>> Matthias
>>>>>>>> and
>>>>>>>>>>>>>> Guozhang.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Below I mention the quick
>>>>>> summary
>>>>>>>> of
>>>>>>>>>> the
>>>>>>>>>>>>> main
>>>>>>>>>>>>>>>>>>> alternatives
>>>>>>>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>>>>> looked
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> introduce the Rich
>>>> functions
>>>>> (I
>>>>>>>> will
>>>>>>>>>>>> refer
>>>>>>>>>>>>> to
>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>> Rich
>>>>>>>>>>>>>>>>>>>>>>>>>>> functions
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> until we
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> find better/another name).
>>>>>>>> Initially
>>>>>>>>>> the
>>>>>>>>>>>>>>> proposed
>>>>>>>>>>>>>>>>>>>>>>>>> alternatives
>>>>>>>>>>>>>>>>>>>>>>>>>>> was
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> backwards-compatible, so I
>>>>> will
>>>>>>> not
>>>>>>>>>>>> mention
>>>>>>>>>>>>>>> them.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The related discussions are
>>>>>>> spread
>>>>>>>> in
>>>>>>>>>>>>> KIP-149
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>>>>>> KIP
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (KIP-159)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> discussion threads.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. The idea of rich
>>>> functions
>>>>>>> came
>>>>>>>>> into
>>>>>>>>>>>> the
>>>>>>>>>>>>>>> stage
>>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>>>>>>> KIP-149,
>>>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> discussion thread. As a
>>>>> result
>>>>>> we
>>>>>>>>>>>> extended
>>>>>>>>>>>>>>> KIP-149
>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>> support
>>>>>>>>>>>>>>>>>>>>>>>>>>> Rich
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> functions as well.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2.  To as part of the Rich
>>>>>>>> functions,
>>>>>>>>>> we
>>>>>>>>>>>>>>> provided
>>>>>>>>>>>>>>>>> init
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (ProcessorContext)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> method. Afterwards, Dammian
>>>>>>>> suggested
>>>>>>>>>>>> that
>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>>>>>>> provide
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ProcessorContext to users.
>>>>> As a
>>>>>>>>> result,
>>>>>>>>>>>> we
>>>>>>>>>>>>>>>> separated
>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>> two
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> problems
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> into
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> two separate KIPs, as it
>>>>> seems
>>>>>>> they
>>>>>>>>> can
>>>>>>>>>>>> be
>>>>>>>>>>>>>>> solved
>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>>> parallel.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - One approach we
>>>> considered
>>>>>> was
>>>>>>> :
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> public interface
>>>>>>>>> ValueMapperWithKey<K,
>>>>>>>>>> V,
>>>>>>>>>>>
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to