Hi all, I have updated the KIP to incorporate Colin's feedback.
Best, David On Thu, Sep 19, 2019 at 8:44 AM David Jacot <dja...@confluent.io> 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. > > *> 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. > > > *> 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. > > > > *> 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. > > 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. > > 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 >> > > > >> > > >> > >> >