Thanks David for the clarification. That sounds good. On Mon, Sep 23, 2019 at 12:35 AM David Jacot <dja...@confluent.io> wrote:
> 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 > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > >> > > > >> > > >> > > >