Hi all,

The vote has passed with +3 binding votes (Colin McCabe, Gwen Shapira,
Jason Gustafson) and +3 non binding votes (Mickael Maison, Konstantine
Karantasis, Kevin Lu). \o/

Thanks to everyone that reviewed and helped improve this proposal, and
huge thanks to Colin for his great feedback.

Best,
David

On Mon, Sep 23, 2019 at 9:28 AM David Jacot <dja...@confluent.io> wrote:

> Hi Jason,
>
> The response will be a flexible version but the response header won't be
> (only for the api versions response). I have forgotten to change this point
> in the KIP. I will make this point clearer.
>
> I didn't know that INVALID_REQUEST already exists. Yes, it makes sense to
> reuse it then.
>
> Best,
> David
>
> On Sat, Sep 21, 2019 at 3:02 AM Kevin Lu <lu.ke...@berkeley.edu> wrote:
>
>> +1 (non-binding)
>>
>> Definitely needed this before as it would have saved me some time from
>> trying to guess a client's version from api version/source code. Thanks
>> for
>> the KIP!
>>
>> Regards,
>> Kevin
>>
>> On Fri, Sep 20, 2019 at 4:29 PM Jason Gustafson <ja...@confluent.io>
>> wrote:
>>
>> > +1 from me. This is a clever solution. Kind of a pity we couldn't work
>> > flexible version support into the response, but I understand why it is
>> > difficult.
>> >
>> > One minor nitpick: the INVALID_REQUEST error already exists. Are you
>> > intending to reuse it?
>> >
>> > Thanks,
>> > Jason
>> >
>> > On Fri, Sep 20, 2019 at 3:50 PM Konstantine Karantasis <
>> > konstant...@confluent.io> wrote:
>> >
>> > > Quite useful KIP from an operational standpoint and I also like it in
>> its
>> > > most recent revised form.
>> > >
>> > > +1 (non-binding).
>> > >
>> > > Konstantine
>> > >
>> > >
>> > > On Fri, Sep 20, 2019 at 9:55 AM Gwen Shapira <g...@confluent.io>
>> wrote:
>> > >
>> > > > +1 (binding)
>> > > >
>> > > > Thanks for the KIP, David and for the help with the design, Colin. I
>> > > > think it looks great now.
>> > > >
>> > > > On Fri, Sep 20, 2019 at 9:42 AM Colin McCabe <cmcc...@apache.org>
>> > wrote:
>> > > > >
>> > > > > On Fri, Sep 20, 2019, at 01:45, David Jacot wrote:
>> > > > > > > Thanks for the clarification.  The proposed behavior sounds
>> > > > reasonable.
>> > > > > > > Can you add a note about the implementation on the client?
>> The
>> > > > client
>> > > > > > > needs to be prepared to handle > a response that doesn't
>> include
>> > > the
>> > > > > > > versions, as well, since v1 did not.
>> > > > > >
>> > > > > > I have added a note about the implementation in the KIP. In
>> short,
>> > > > when the
>> > > > > > client receives an unsupported version, it defaults to version
>> 0.
>> > As
>> > > > > > version 0 contains both the ErrorCode and the ApiKeys fields,
>> the
>> > > > client
>> > > > > > can check the error and in case of UNSUPPORTED_VERSION, it can
>> > check
>> > > > the
>> > > > > > ApiKeys to get the supported versions. If not present, it
>> default
>> > to
>> > > > > > version 0.
>> > > > > >
>> > > > > > > Hmm. Like we discussed above, there is a very important
>> > difference
>> > > > in the
>> > > > > > > v3 response, which is that the versions will be included even
>> if
>> > > the
>> > > > > > > client's version was higher than what the broker supports.
>> > > > > > > We should add a comment about that.
>> > > > > >
>> > > > > > Yeah. I think the change that we propose to enhance the
>> handling of
>> > > > > > unsupported versions of ApiVersionsRequest/Response is
>> orthogonal
>> > to
>> > > > the
>> > > > > > version bump. Concretely, the versions will be included in the
>> > > > > > ApiVersionsResponse v0 - the request/response used by the broker
>> > when
>> > > > > > failing back - so it is a bit misleading to say that starting
>> from
>> > > > version
>> > > > > > 3, the broker populate the ApiKeys field with the information
>> about
>> > > the
>> > > > > > supported versions of the AVR. I would rather put a note saying:
>> > > > Starting
>> > > > > > from Apache Kafka 2.4, ApiKeys field is populated with the
>> > supported
>> > > > > > versions of the ApiVersionsRequest when an UNSUPPORTED_VERSION
>> > error
>> > > is
>> > > > > > returned. Would this work for you?
>> > > > >
>> > > > > Thanks for the clarification.  Yes, that makes sense.  Adding the
>> > > > additional fields doesn't need to be tied to the version of
>> > > > ApiVersionsResponse.
>> > > > >
>> > > > > Keep in mind, though, that you still have to handle responses from
>> > > older
>> > > > brokers, which will not include this information.  I assume that you
>> > will
>> > > > distinguish those responses based on the length of the response.  We
>> > > should
>> > > > add this detail to the KIP.
>> > > > >
>> > > > > +1 (binding) after that change.
>> > > > >
>> > > > > cheers,
>> > > > > Colin
>> > > > >
>> > > > > >
>> > > > > > > Agreed.  This is a good use-case for INVALID_REQUEST.  We
>> should
>> > > add
>> > > > a
>> > > > > > comment that this is now a valid error.
>> > > > > >
>> > > > > > I have documented the error in the Public Interfaces section.
>> > > > > >
>> > > > > > Best,
>> > > > > > David
>> > > > > >
>> > > > > > On Thu, Sep 19, 2019 at 10:52 PM Colin McCabe <
>> cmcc...@apache.org>
>> > > > wrote:
>> > > > > >
>> > > > > > > On Wed, Sep 18, 2019, at 23:44, David Jacot wrote:
>> > > > > > > > Hi Colin,
>> > > > > > > >
>> > > > > > > > Thank you for your feedback! Please find my comments/answers
>> > > below:
>> > > > > > > >
>> > > > > > > > *> Nitpick: in the intro paragraph, "Operators of Apache
>> Kafka
>> > > > clusters
>> > > > > > > > have literally no information about the clients connected to
>> > > their
>> > > > > > > > clusters" seems a bit too strong.  We have some information,
>> > > > right?  For
>> > > > > > > > example, the client ID, where clients are connecting from,
>> etc.
>> > > > Maybe it
>> > > > > > > > would be clearer to say "very little information about the
>> type
>> > > of
>> > > > client
>> > > > > > > > software..."*
>> > > > > > > >
>> > > > > > > > That's fair. I will update it.
>> > > > > > > >
>> > > > > > > > *> Instead of ClientName and ClientVersion, how about
>> > > > ClientSoftwareName
>> > > > > > > > and ClientSoftwareVersion?  This might make it clearer what
>> the
>> > > > fields
>> > > > > > > are
>> > > > > > > > for.  I can see people getting confused about the difference
>> > > > between
>> > > > > > > > ClientName and ClientId, which sound pretty similar.  Adding
>> > > > "Software"
>> > > > > > > to
>> > > > > > > > the field name makes it much clearer what the difference is
>> > > > between these
>> > > > > > > > fields.*
>> > > > > > > >
>> > > > > > > > Good point. I like your suggestion. I will update it.
>> > > > > > > >
>> > > > > > > > *> In the "ApiVersions Request/Response Handling" section,
>> it
>> > > > seems like
>> > > > > > > > there is some out-of-date text.  Specifically, it says "we
>> > > propose
>> > > > to add
>> > > > > > > > the supported version of the ApiVersionsRequest in the
>> response
>> > > > sent back
>> > > > > > > > to the client alongside the error...".  But on the other
>> hand,
>> > > > elsewhere
>> > > > > > > in
>> > > > > > > > the KIP, we say "ApiVersionsResponse is bumped to version 3
>> but
>> > > > does not
>> > > > > > > > have any changes in the schema"  Based on the offline
>> > discussion
>> > > > we had,
>> > > > > > > > the correct text is the latter (we're not changing
>> > > > ApiVersionsRerponse).
>> > > > > > > > So we should remove the text about adding stuff to
>> > > > ApiVersionsResponse.*
>> > > > > > > >
>> > > > > > > > Sorry for the confusion. I think my usage of the word "add"
>> is
>> > > not
>> > > > > > > > appropriate here. The ApiVersionsResponse won't change as
>> you
>> > > > said. My
>> > > > > > > > proposal is to provide the supported versions of the
>> > > > ApiVersionsRequest
>> > > > > > > in
>> > > > > > > > the response by populating the existing `api_versions`
>> field.
>> > In
>> > > > the
>> > > > > > > > current version, when an error occurs, the `api_versions` is
>> > > empty
>> > > > in the
>> > > > > > > > response. Providing it enables the client to re-send the
>> latest
>> > > > version
>> > > > > > > > supported by the broker instead of defaulting to zero. I
>> will
>> > > > update the
>> > > > > > > > KIP to make this clearer.
>> > > > > > >
>> > > > > > > Thanks for the clarification.  The proposed behavior sounds
>> > > > reasonable.
>> > > > > > > Can you add a note about the implementation on the client?
>> The
>> > > > client
>> > > > > > > needs to be prepared to handle a response that doesn't include
>> > the
>> > > > > > > versions, as well, since v1 did not.
>> > > > > > >
>> > > > > > > >
>> > > > > > > > *> In a similar vein, the comment "  // Version 3 is
>> similar to
>> > > > version
>> > > > > > > 2"
>> > > > > > > > should be " // Version 3 is identical to version 2" or
>> > something
>> > > > like
>> > > > > > > > that.  Although I guess technically things which are
>> identical
>> > > are
>> > > > also
>> > > > > > > > similar, the current phrasing could be misleading.*
>> > > > > > > >
>> > > > > > > > Good point. I will use `Version 3 is the same as version 2.`
>> > > which
>> > > > is the
>> > > > > > > > statement already used in other requests/responses.
>> > > > > > >
>> > > > > > > Hmm. Like we discussed above, there is a very important
>> > difference
>> > > > in the
>> > > > > > > v3 response, which is that the versions will be included even
>> if
>> > > the
>> > > > > > > client's version was higher than what the broker supports.  We
>> > > > should add a
>> > > > > > > comment about that.
>> > > > > > >
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > *> Now that KIP-482 has been accepted, I think there are a
>> few
>> > > > things
>> > > > > > > that
>> > > > > > > > are worth clarifying in the KIP.  Firstly,
>> ApiVersionsRequest
>> > v3
>> > > > should
>> > > > > > > be
>> > > > > > > > a "flexible version".  Mainly, that means its request header
>> > will
>> > > > support
>> > > > > > > > optional tagged fields.  However, ApiVersionsResponse v3
>> will
>> > > *not*
>> > > > > > > support
>> > > > > > > > optional tagged fields in its response header.  This is
>> > necessary
>> > > > > > > because--
>> > > > > > > > as you said-- the broker must look at a fixed offset to find
>> > the
>> > > > error
>> > > > > > > > code, regardless of the response version.*
>> > > > > > > > Right. I have put it because I thought your PR would do it.
>> I
>> > > will
>> > > > update
>> > > > > > > > this. By the way, it means that the request/response must be
>> > > > updated to
>> > > > > > > the
>> > > > > > > > generated ones, isn't it? AVR is still using the old
>> mechanism.
>> > > > > > >
>> > > > > > > Yeah, I think we should move to the new mechanism.  It should
>> be
>> > > > very easy
>> > > > > > > for the request.  The response may be slightly more difficult,
>> > but
>> > > > probably
>> > > > > > > not that much more.
>> > > > > > >
>> > > > > > > >
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > *> I think we should force client software names and
>> versions
>> > to
>> > > > follow a
>> > > > > > > > regular expression and disconnect if they do not.  This will
>> > > > prevent
>> > > > > > > issues
>> > > > > > > > when using these strings in metrics names.  Probably we want
>> > > > something
>> > > > > > > > like:> [\.\-A-Za-z0-9]?[\.\-A-Za-z0-9 ]*[\.\-A-Za-z0-9]?>
>> > Notice
>> > > > this
>> > > > > > > does
>> > > > > > > > _not* include underscores, since they get converted to dots
>> in
>> > > JMX,
>> > > > > > > causing
>> > > > > > > > ambiguity.  It also doesn't allow the first or last
>> character
>> > to
>> > > > be a
>> > > > > > > > space.*
>> > > > > > > >
>> > > > > > > > I do agree and I have already put something along those
>> lines
>> > in
>> > > > the
>> > > > > > > > proposal. See the "Validation" chapter. I have proposed to
>> use
>> > a
>> > > > more
>> > > > > > > > restrictive validation which does not allow white spaces. I
>> > think
>> > > > spaces
>> > > > > > > > wouldn't be used in software name nor version. Is it OK for
>> you
>> > > if
>> > > > we
>> > > > > > > stick
>> > > > > > > > to the more restrictive one? Thank your letting me know
>> about
>> > the
>> > > > > > > > underscores. I have missed this.
>> > > > > > >
>> > > > > > > Yeah, the one you proposed sounds fine.
>> > > > > > >
>> > > > > > > >
>> > > > > > > > Regarding disconnecting when the validation fails, this is
>> > what I
>> > > > have
>> > > > > > > > proposed as well. Magnus has brought a good point though.
>> Using
>> > > an
>> > > > > > > explicit
>> > > > > > > > error like `INVALID_REQUEST` may be better. In this case,
>> the
>> > > > client
>> > > > > > > would
>> > > > > > > > have to disconnect when it happens. I will update the KIP to
>> > > > reflect
>> > > > > > > this.
>> > > > > > >
>> > > > > > > Agreed.  This is a good use-case for INVALID_REQUEST.  We
>> should
>> > > add
>> > > > a
>> > > > > > > comment that this is now a valid error.
>> > > > > > >
>> > > > > > > best,
>> > > > > > > Colin
>> > > > > > >
>> > > > > > >
>> > > > > > > >
>> > > > > > > > Best,
>> > > > > > > > David
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > On Wed, Sep 18, 2019 at 9:46 PM Colin McCabe <
>> > cmcc...@apache.org
>> > > >
>> > > > wrote:
>> > > > > > > >
>> > > > > > > > > That's fair.  We could use the existing error code in the
>> > > > response and
>> > > > > > > > > pass back something like INVALID_REQUEST.
>> > > > > > > > >
>> > > > > > > > > I'm not sure if we want to add an error string field just
>> for
>> > > > this
>> > > > > > > > > (although they're a good idea in general...)
>> > > > > > > > >
>> > > > > > > > > best,
>> > > > > > > > > Colin
>> > > > > > > > >
>> > > > > > > > > On Wed, Sep 18, 2019, at 12:31, Magnus Edenhill wrote:
>> > > > > > > > > > > I think we should force client software names and
>> > versions
>> > > to
>> > > > > > > follow a
>> > > > > > > > > > regular expression and disconnect if they do not.
>> > > > > > > > > >
>> > > > > > > > > > Disconnecting is not really a great error propagation
>> > method
>> > > > since it
>> > > > > > > > > > leaves the client oblivious to what went wrong.
>> > > > > > > > > > Instead suggest we return an ApiVersionResponse with an
>> > error
>> > > > code
>> > > > > > > and a
>> > > > > > > > > > human-readable error message field.
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > > Den ons 18 sep. 2019 kl 20:05 skrev Colin McCabe <
>> > > > cmcc...@apache.org
>> > > > > > > >:
>> > > > > > > > > >
>> > > > > > > > > > > Hi David,
>> > > > > > > > > > >
>> > > > > > > > > > > Thanks for the KIP!
>> > > > > > > > > > >
>> > > > > > > > > > > Nitpick: in the intro paragraph, "Operators of Apache
>> > Kafka
>> > > > > > > clusters
>> > > > > > > > > have
>> > > > > > > > > > > literally no information about the clients connected
>> to
>> > > their
>> > > > > > > clusters"
>> > > > > > > > > > > seems a bit too strong.  We have some information,
>> right?
>> > > > For
>> > > > > > > > > example, the
>> > > > > > > > > > > client ID, where clients are connecting from, etc.
>> Maybe
>> > > it
>> > > > would
>> > > > > > > be
>> > > > > > > > > > > clearer to say "very little information about the
>> type of
>> > > > client
>> > > > > > > > > > > software..."
>> > > > > > > > > > >
>> > > > > > > > > > > Instead of ClientName and ClientVersion, how about
>> > > > > > > ClientSoftwareName
>> > > > > > > > > and
>> > > > > > > > > > > ClientSoftwareVersion?  This might make it clearer
>> what
>> > the
>> > > > fields
>> > > > > > > are
>> > > > > > > > > > > for.  I can see people getting confused about the
>> > > difference
>> > > > > > > between
>> > > > > > > > > > > ClientName and ClientId, which sound pretty similar.
>> > > Adding
>> > > > > > > > > "Software" to
>> > > > > > > > > > > the field name makes it much clearer what the
>> difference
>> > is
>> > > > between
>> > > > > > > > > these
>> > > > > > > > > > > fields.
>> > > > > > > > > > >
>> > > > > > > > > > > In the "ApiVersions Request/Response Handling"
>> section,
>> > it
>> > > > seems
>> > > > > > > like
>> > > > > > > > > > > there is some out-of-date text.  Specifically, it says
>> > "we
>> > > > propose
>> > > > > > > to
>> > > > > > > > > add
>> > > > > > > > > > > the supported version of the ApiVersionsRequest in the
>> > > > response
>> > > > > > > sent
>> > > > > > > > > back
>> > > > > > > > > > > to the client alongside the error...".  But on the
>> other
>> > > > hand,
>> > > > > > > > > elsewhere in
>> > > > > > > > > > > the KIP, we say "ApiVersionsResponse is bumped to
>> > version 3
>> > > > but
>> > > > > > > does
>> > > > > > > > > not
>> > > > > > > > > > > have any changes in the schema"  Based on the offline
>> > > > discussion we
>> > > > > > > > > had,
>> > > > > > > > > > > the correct text is the latter (we're not changing
>> > > > > > > > > ApiVersionsRerponse).
>> > > > > > > > > > > So we should remove the text about adding stuff to
>> > > > > > > ApiVersionsResponse.
>> > > > > > > > > > >
>> > > > > > > > > > > In a similar vein, the comment "  // Version 3 is
>> similar
>> > > to
>> > > > > > > version 2"
>> > > > > > > > > > > should be " // Version 3 is identical to version 2" or
>> > > > something
>> > > > > > > like
>> > > > > > > > > > > that.  Although I guess technically things which are
>> > > > identical are
>> > > > > > > also
>> > > > > > > > > > > similar, the current phrasing could be misleading.
>> > > > > > > > > > >
>> > > > > > > > > > > Now that KIP-482 has been accepted, I think there are
>> a
>> > few
>> > > > things
>> > > > > > > that
>> > > > > > > > > > > are worth clarifying in the KIP.  Firstly,
>> > > > ApiVersionsRequest v3
>> > > > > > > > > should be
>> > > > > > > > > > > a "flexible version".  Mainly, that means its request
>> > > header
>> > > > will
>> > > > > > > > > support
>> > > > > > > > > > > optional tagged fields.  However, ApiVersionsResponse
>> v3
>> > > > will *not*
>> > > > > > > > > support
>> > > > > > > > > > > optional tagged fields in its response header.  This
>> is
>> > > > necessary
>> > > > > > > > > because--
>> > > > > > > > > > > as you said-- the broker must look at a fixed offset
>> to
>> > > find
>> > > > the
>> > > > > > > error
>> > > > > > > > > > > code, regardless of the response version.
>> > > > > > > > > > >
>> > > > > > > > > > > I think we should force client software names and
>> > versions
>> > > to
>> > > > > > > follow a
>> > > > > > > > > > > regular expression and disconnect if they do not.
>> This
>> > > will
>> > > > > > > prevent
>> > > > > > > > > issues
>> > > > > > > > > > > when using these strings in metrics names.  Probably
>> we
>> > > want
>> > > > > > > something
>> > > > > > > > > like:
>> > > > > > > > > > >
>> > > > > > > > > > > [\.\-A-Za-z0-9]?[\.\-A-Za-z0-9 ]*[\.\-A-Za-z0-9]?
>> > > > > > > > > > >
>> > > > > > > > > > > Notice this does _not* include underscores, since they
>> > get
>> > > > > > > converted to
>> > > > > > > > > > > dots in JMX, causing ambiguity.  It also doesn't allow
>> > the
>> > > > first or
>> > > > > > > > > last
>> > > > > > > > > > > character to be a space.
>> > > > > > > > > > >
>> > > > > > > > > > > best,
>> > > > > > > > > > > Colin
>> > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > > > On Mon, Sep 16, 2019, at 04:39, Mickael Maison wrote:
>> > > > > > > > > > > > +1 (non binding)
>> > > > > > > > > > > > Thanks for the KIP!
>> > > > > > > > > > > >
>> > > > > > > > > > > > On Mon, Sep 16, 2019 at 12:07 PM David Jacot <
>> > > > > > > dja...@confluent.io>
>> > > > > > > > > > > wrote:
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > Hi all,
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > I would like to start a vote on KIP-511:
>> > > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > >
>> > > > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-511%3A+Collect+and+Expose+Client%27s+Name+and+Version+in+the+Brokers
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > Best,
>> > > > > > > > > > > > > David
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > >
>> > >
>> >
>>
>

Reply via email to