Thank you for the comments! I agree with these changes. So is the general protocol to update the same KIP, or is to scrap the current KIP and create a new one since it's beyond the scope of the original KIP? I am happy to do either.
On Wed, Jul 4, 2018 at 1:48 PM Matthias J. Sax <matth...@confluent.io> wrote: > Sounds good to me. > > -Matthias > > On 7/4/18 10:53 AM, Guozhang Wang wrote: > > After looked through the current TopologyDescription I think I'd want to > > combine the suggestions from John and Matthias on the API proposal. The > > motivations is that we have two relatively different functionalities > > provided from the APIs today: > > > > 1. Each interface's public functions, like > > SourceNode#topics(), GlobalStore#source(), which returns non-String typed > > data. The hope was to let users programmatically leverage on those APIs > for > > runtime checking. > > 2. Each interface's impl class also have an implicit toString() > overridden > > to print the necessary information. This was designed for debugging > > purposes only during development cycles. > > > > What we've observed so far, though, is that users leverage 2) much more > > than 1) in practice, since it is more convienent to parse strings than > > recursively calling the APIs to get non-string fields. On the other hand, > > the discussion controversy is more around 1), not 2). As for 2) people > seem > > to be on the right page anyways: print the topic lists if it is not > > dynamic, or print extractor string format otherwise. For 1) above we > should > > probably have all three `Set<String> topics()`, `Pattern topicPattern()` > > and `TopicNameExtractor topicExtractor()`; while for 2) I feel > comfortable > > relying on the TopicNameExtractor#toString() in `Source#toString()` impl > > since even if users do not override this function, the default value > > `className@hashcode` still looks fine to me. > > > > > > Guozhang > > > > > > > > On Tue, Jul 3, 2018 at 11:22 PM, Matthias J. Sax <matth...@confluent.io> > > wrote: > > > >> I just double checked the discussion thread of KIP-120 that introduced > >> `TopologyDescription`. Back than the argument was, that using the > >> simplest option might be sufficient because the description is mostly > >> used for debugging. > >> > >> Not sure if this argument holds. It seem that people built first more > >> sophisticated tools using TopologyDescription. > >> > >> Final note: if we really want to add `topicPattern()` we might want to > >> deprecate `topic()` and replace with `Set<String> topics()`, because a > >> source node can take a multiple topics, too. > >> > >> Just adding this for completeness of context to the discussion. > >> > >> > >> -Matthias > >> > >> On 7/3/18 11:09 PM, Matthias J. Sax wrote: > >>> John, > >>> > >>> I am a little bit on the fence. In retrospective, it might have been > >>> better to add `topic()` and `topicPattern()` to source node and return > a > >>> proper `Pattern` object instead of the pattern as a String. > >>> > >>> All other "payload" is just names and thus String naturally. From my > >>> point of view `TopologyDescription` should represent the `Topology` in > a > >>> "machine readable" form plus a default "human readable" from via > >>> `toString()` -- this does not imply that all return types should be > >> String. > >>> > >>> Let me know what you think. If you agree, we could even add > >>> `Source#topicPattern()` in another KIP. > >>> > >>> > >>> -Matthias > >>> > >>> On 6/26/18 3:45 PM, John Roesler wrote: > >>>> Sorry for the late comment, > >>>> > >>>> Looking at the other pieces of TopologyDescription, I noticed that > >> pretty > >>>> much all of the "payload" of these description nodes are strings. > >> Should we > >>>> consider returning a string from `topicNameExtractor()` instead? > >>>> > >>>> In fact, if we did that, we could consider calling `toString()` on the > >>>> extractor instead of returning the class name. This would allow > authors > >> of > >>>> the extractors to provide more information about the extractor than > just > >>>> its name. This might be especially useful in the case of anonymous > >>>> implementations. > >>>> > >>>> Thanks for the KIP, > >>>> -John > >>>> > >>>> On Mon, Jun 25, 2018 at 11:52 PM Ted Yu <yuzhih...@gmail.com> wrote: > >>>> > >>>>> My previous response was talking about the new method in > >>>>> InternalTopologyBuilder. > >>>>> The exception just means there is no uniform extractor for all the > >> sinks. > >>>>> > >>>>> On Mon, Jun 25, 2018 at 8:02 PM, Matthias J. Sax < > >> matth...@confluent.io> > >>>>> wrote: > >>>>> > >>>>>> Ted, > >>>>>> > >>>>>> Why? Each sink can have a different TopicNameExtractor. > >>>>>> > >>>>>> > >>>>>> -Matthias > >>>>>> > >>>>>> On 6/25/18 5:19 PM, Ted Yu wrote: > >>>>>>> If there are different TopicNameExtractor classes from multiple > sink > >>>>>> nodes, > >>>>>>> the new method should throw exception alerting user of such > scenario. > >>>>>>> > >>>>>>> > >>>>>>> On Mon, Jun 25, 2018 at 2:23 PM, Bill Bejeck <bbej...@gmail.com> > >>>>> wrote: > >>>>>>> > >>>>>>>> Thanks for the KIP! > >>>>>>>> > >>>>>>>> Overall I'm +1 on the KIP. I have one question. > >>>>>>>> > >>>>>>>> The KIP states that the method "topicNameExtractor()" is added to > >> the > >>>>>>>> InternalTopologyBuilder.java. > >>>>>>>> > >>>>>>>> It could be that I'm missing something, but wow does this work if > a > >>>>> user > >>>>>>>> has provided different TopicNameExtractor instances to multiple > sink > >>>>>> nodes? > >>>>>>>> > >>>>>>>> Thanks, > >>>>>>>> Bill > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On Mon, Jun 25, 2018 at 1:25 PM Guozhang Wang <wangg...@gmail.com > > > >>>>>> wrote: > >>>>>>>> > >>>>>>>>> Yup I agree, generally speaking the `toString()` output is not > >>>>>>>> recommended > >>>>>>>>> to be relied on programmatically in user's code, but we've > observed > >>>>>>>>> convenience-beats-any-other-reasons again and again in > development > >>>>>>>>> unfortunately. I think we should still not claiming it is part of > >> the > >>>>>>>>> public APIs that would not be changed anyhow in the future, but > >> just > >>>>>>>>> mentioning it in the wiki for people to be aware is fine. > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Guozhang > >>>>>>>>> > >>>>>>>>> On Sun, Jun 24, 2018 at 5:01 PM, Matthias J. Sax < > >>>>>> matth...@confluent.io> > >>>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>>> Thanks for the KIP! > >>>>>>>>>> > >>>>>>>>>> I am don't have any further comments. > >>>>>>>>>> > >>>>>>>>>> For Guozhang's comment: if we mention anything about > `toString()`, > >>>>> we > >>>>>>>>>> should make explicit that `toString()` output is still not > public > >>>>>>>>>> contract and users should not rely on the output. > >>>>>>>>>> > >>>>>>>>>> Furhtermore, for the actual uses output, I would replace > "topic:" > >> by > >>>>>>>>>> "extractor class:" to make the difference obvious. > >>>>>>>>>> > >>>>>>>>>> I am just hoping that people actually to not rely on > `toString()` > >>>>> what > >>>>>>>>>> defeats the purpose to the `TopologyDescription` class that was > >>>>>>>>>> introduced to avoid the dependency... (Just a side comment, not > >>>>> really > >>>>>>>>>> related to this KIP proposal itself). > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> If there are no further comments in the next days, feel free to > >>>>> start > >>>>>>>>>> the VOTE and open a PR. > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> -Matthias > >>>>>>>>>> > >>>>>>>>>> On 6/22/18 6:04 PM, Guozhang Wang wrote: > >>>>>>>>>>> Thanks for writing the KIP! > >>>>>>>>>>> > >>>>>>>>>>> I'm +1 on the proposed changes over all. One minor suggestion: > we > >>>>>>>>> should > >>>>>>>>>>> also mention that the `Sink#toString` will also be updated, in > a > >>>>> way > >>>>>>>>> that > >>>>>>>>>>> if `topic()` returns null, use the other call, etc. This is > >> because > >>>>>>>>>>> although we do not explicitly state the following logic as > public > >>>>>>>>>> protocols: > >>>>>>>>>>> > >>>>>>>>>>> ``` > >>>>>>>>>>> > >>>>>>>>>>> "Sink: " + name + " (topic: " + topic() + ")\n <-- " + > >>>>>>>>>>> nodeNames(predecessors); > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> ``` > >>>>>>>>>>> > >>>>>>>>>>> There are already some users that rely on > >>>>>>>>> `topology.describe().toString( > >>>>>>>>>> )` > >>>>>>>>>>> to have runtime checks on the returned string values, so > changing > >>>>>>>> this > >>>>>>>>>>> means that their app will break and hence need to make code > >>>>> changes. > >>>>>>>>>>> > >>>>>>>>>>> Guozhang > >>>>>>>>>>> > >>>>>>>>>>> On Wed, Jun 20, 2018 at 7:20 PM, Nishanth Pradeep < > >>>>>>>>> nishanth...@gmail.com > >>>>>>>>>>> > >>>>>>>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>>> Hello Everyone, > >>>>>>>>>>>> > >>>>>>>>>>>> I have created a new KIP to discuss extending > >> TopologyDescription. > >>>>>>>> You > >>>>>>>>>> can > >>>>>>>>>>>> find it here: > >>>>>>>>>>>> > >>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- > >>>>>>>>>>>> 321%3A+Add+method+to+get+TopicNameExtractor+in+ > >> TopologyDescription > >>>>>>>>>>>> > >>>>>>>>>>>> Please provide any feedback that you might have. > >>>>>>>>>>>> > >>>>>>>>>>>> Best, > >>>>>>>>>>>> Nishanth Pradeep > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> -- Guozhang > >>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>> > >>>> > >>> > >> > >> > > > > > >