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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to