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

Reply via email to