I'd like to make an exception for this KIP if it's PR can get in before the the code freeze date, as it's a low risk small KIP that is unlikely to introduce regression.
Guozhang On Wed, Sep 20, 2017 at 2:01 AM, Matthias J. Sax <matth...@confluent.io> wrote: > @Damian, this KIP goes into 1.1 but not 1.0, so we need to go the > deprecation way... > > I would be happy to get it into 1.0 and avoid the deprecation. But > strictly speaking, the KIP vote deadline passed already... Not sure if > there is any exception from this. > > > -Matthias > > On 9/19/17 12:17 AM, Damian Guy wrote: > > Hi Richard, > > > > Thanks for the KIP. Looks good, just one thing: we don't need to > deprecate > > StreamBuilder#merge as it has been added during this release cycle. It > can > > just be removed. > > > > Thanks, > > Damian > > > > On Mon, 18 Sep 2017 at 23:22 Richard Yu <yohan.richard...@gmail.com> > wrote: > > > >> The discussion should not stay idle. Since this issue is so small, we > >> should move it into the voting phase. > >> > >> On Sun, Sep 17, 2017 at 1:39 PM, Matthias J. Sax <matth...@confluent.io > > > >> wrote: > >> > >>> Thanks for updating the KIP. > >>> > >>> You are of course right, that we internally need access to > >>> InternalStreamBuilder, but that should not be too hard and effectively > >>> be an internal implementation detail. > >>> > >>> > >>> Two more comments: > >>> > >>> the new method should be > >>> > >>>> KStream<K,V> merge(KStream<K,V> stream); > >>> > >>> and not > >>> > >>>> <K,V> KStream<K,V> merge(KStream<K,V> streams); > >>> > >>> as in the KIP? The prefix `<K,V>` is not required for non-static > methods > >>> and it should be singular (not plural) as parameter name? > >>> > >>> Can you also add an explicit sentence, that the new method does not use > >>> varargs anymore but a single KStream parameter (in contrast to the old > >>> method). And mention that this is no limitation as calls to new merge() > >>> can be chained. > >>> > >>> > >>> > >>> Thanks a lot! > >>> > >>> -Matthias > >>> > >>> > >>> > >>> On 9/17/17 10:32 AM, Richard Yu wrote: > >>>> Correction: When the current merge() method is called with multiple > >>>> streams, a warning will be printed (or logged), but this should not > >>> hinder > >>>> ability to read the log. > >>>> There is a missing unchecked warning suppression for the old method. > >>>> However, it is not high priority due to deprecation of the old merge() > >>>> method. > >>>> > >>>> > >>>> On Sun, Sep 17, 2017 at 9:37 AM, Richard Yu < > >> yohan.richard...@gmail.com> > >>>> wrote: > >>>> > >>>>> With regards to Xavier's comment, this practice I do no think applies > >> to > >>>>> this PR. There is not much potential here for warnings to be thrown. > >>> Note > >>>>> that in StreamsBuilder's merge, their is no > >>> @SuppressWarnings("unchecked")--indicating > >>>>> that warnings is sparse, if not nonexistent. > >>>>> > >>>>> > >>>>> On Sun, Sep 17, 2017 at 9:10 AM, Richard Yu < > >> yohan.richard...@gmail.com > >>>> > >>>>> wrote: > >>>>> > >>>>>> KIP-202 has been changed according to the conditions of your > >>> suggestion. > >>>>>> > >>>>>> On Sun, Sep 17, 2017 at 8:51 AM, Richard Yu < > >>> yohan.richard...@gmail.com> > >>>>>> wrote: > >>>>>> > >>>>>>> I added StreamsBuilder under the assumption that > >> InternalStreamBuilder > >>>>>>> would be required to merge > >>>>>>> two streams. However, if that is not the case, then I would still > >>> need a > >>>>>>> couple of things: > >>>>>>> > >>>>>>> 1) An InternalStreamBuilder instance to instantiate a new KStream > >>>>>>> > >>>>>>> 2) The merge_name that the merged streams will be given > >>>>>>> > >>>>>>> 3) Need access to the corresponding InternalStreamBuilder's > >>>>>>> InternalTopologyBuilder to add a processor (for the new KStreams) > >>>>>>> > >>>>>>> All these parameters are associated with InternalStreamsBuilder, > >> thus > >>> it > >>>>>>> is essential towards merging the streams. > >>>>>>> We are left with three options (taking into account the restriction > >>> that > >>>>>>> InternalStreamsBuilder's reference scope is mostly limited to > within > >>> the > >>>>>>> org.apache.kafka.streams.kstream.internals package): > >>>>>>> > >>>>>>> a) Find a way to pass InternalStreamsBuilder indirectly into the > >>> class. > >>>>>>> (using StreamsBuilder) > >>>>>>> > >>>>>>> b) Find the matching InternalStreamBuilder within the method that > >>>>>>> corresponds to the streams about to be merged. > >>>>>>> > >>>>>>> or c) Use the local InternalStreamsBuilder inherited from > >>>>>>> AbstractStream, assuming that it is the correct builder > >>>>>>> > >>>>>>> From your suggestion, that would mean using the c option I > mentioned > >>>>>>> earlier. This choice of implementation works, but it could also > >>> include the > >>>>>>> risk that the local InternalStreamsBuilder might not be the correct > >>> one > >>>>>>> (just something one might want to keep in mind, since I will change > >>> it) > >>>>>>> > >>>>>>> On Sun, Sep 17, 2017 at 12:06 AM, Matthias J. Sax < > >>> matth...@confluent.io > >>>>>>>> wrote: > >>>>>>> > >>>>>>>> Hi Richard, > >>>>>>>> > >>>>>>>> Thanks a lot for the KIP! > >>>>>>>> > >>>>>>>> I have three question: > >>>>>>>> - why is the new merge() method static? > >>>>>>>> - why does the new merge() method take StreamsBuilder as a > >>> parameter? > >>>>>>>> - did you think about Xavier's comment (see the JIRA in case you > >> did > >>>>>>>> not notice it yet) about varargs vs adding some overloads to merge > >>>>>>>> stream? > >>>>>>>> > >>>>>>>> My personal take is that merge() should not be static and not take > >>>>>>>> StreamsBuilder. The idea of the JIRA was to get a more natural > API: > >>>>>>>> > >>>>>>>> // old > >>>>>>>> KStream merged = StreamsBuilder.merge(stream1, stream2); > >>>>>>>> // new > >>>>>>>> KStream merge = stream1.merge(stream2); > >>>>>>>> > >>>>>>>> > >>>>>>>> Having pointed out the second pattern, it should actually be fine > >> to > >>> get > >>>>>>>> rid of varargs in merger() at all, as users could chain multiple > >>> calls > >>>>>>>> to merge() after each other: > >>>>>>>> > >>>>>>>> KStream multiMerged = stream1.merge(s2).merge(s3).merge(s4); > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> -Matthias > >>>>>>>> > >>>>>>>> On 9/16/17 9:36 PM, Richard Yu wrote: > >>>>>>>>> Hi, > >>>>>>>>> Please take a look at: > >>>>>>>>> > >>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- > >>>>>>>>> 202+Move+merge%28%29+from+StreamsBuilder+to+KStream > >>>>>>>>> > >>>>>>>>> Thanks > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >>> > >>> > >> > > > > -- -- Guozhang