On Mon, Mar 14, 2016 at 5:31 PM, Jay Kreps <j...@confluent.io> wrote:
> Couple of missing things: > > This KIP doesn't have a proposal on versioning it just gives different > options, it'd be good to get a concrete proposal in the KIP. Here is my > understanding of what we are proposing (can someone sanity check and if > correct, update the kip): > > 1. We will augment the existing api_version field in the header with a > protocol_version that will begin at some initial value and increment by > 1 > every time we make a changes to any of the api_versions (question: > including internal apis?). > Jay, this part was not in the KIP and was never discussed. Are you proposing adding this? Or is it just an assumption you made? > 2. The protocol_version will be added to the metadata request > 3. We will also add a string that this proposal is calling VersionString > which will describe the build of kafka in some way. The clients should > not > under any circumstances do anything with this string other than print it > out to the user. > > One thing I'm not sure about: I think currently metadata sits in the client > for 10 mins by default. Say a client bootstraps and then a server is > downgraded to an earlier version, won't the client's metadata version > indicate that that client handles a version it doesn't actually handle any > more? We need to document how clients will handle this. > > Here are some comments on other details: > > 1. As a minor thing I think we should avoid naming the fields VersionId > and VersionString which sort of implies they are both used for > versioning. > I think we should call them something like ProtocolVersion and > BuildDescription, with BuildDescription being totally unspecified other > than that it is some kind of human readable string describing a > particular > Kafka build. We really don't want a client attempting to use this > string in > any way as that would always be the wrong thing to do in the versioning > scheme we are proposing, you should always use the protocol version. > 2. Does making the topics field in the metadata request nullable > actually make sense? We have a history of wanting to add magical values > rather than fields. Currently topics=[a] means give me information about > topic a, topics=[] means give me information about all topics, and we > are > proposing topics=null would mean don't give me topics. I don't have a > strong opinion. > 3. I prefer Jason's proposal on using a conservative metadata version > versus the empty response hack. However I think that may actually > exacerbate the downgrade scenario I described. > 4. I agree with Jason that we should really look at the details of the > implementation so we know it works--implementing server support without > actually trying it is kind of risky. > > As a meta comment: I'd really like to encourage us to think of the protocol > as a document that includes the following things: > > - The binary format, error codes, etc > - The request/response interaction > - The semantics of each request in different cases > - Instructions on how to use this to implement a client > > This document is versioned with the protocol number and is the source of > truth for the protocol. > > Part of any protocol change needs to be an update to the instructions on > how to use that part of the protocol. We should be opinionated. If there > are two options there should be a reason, and then we need to document both > and say exactly when to use each. > > I think we also need to get a "how to" document on protocol changes just so > people know what they need to do to add a new protocol feature. > > -Jay > > On Mon, Mar 14, 2016 at 4:51 PM, Jason Gustafson <ja...@confluent.io> > wrote: > > > > > > > Are you suggesting this as a solution for the problem where a KIP-35 > > aware > > > client sends a higher version of metadata req, say v2, to a KIP-35 > aware > > > broker that only supports up to v1. > > > > > > Yes, that's right. In that case, the client first sends v1, finds out > that > > the broker supports v2, and then sends v2 (if it has any reason to do > so). > > > > We had a bit of discussion on such scenarios, and it seemed to be a > chicken > > > and egg problem that is hard to avoid. Your suggestion definitely makes > > > sense, however it falls under the purview of clients. > > > > > > That basically means clients should figure it out for themselves? Might > be > > nice to have a better answer. > > > > KIP-35 only aims on adding support for getting the version info from a > > > broker. This definitely can be utilized by our clients. However, that > can > > > follow KIP-35 changes. Does this sound reasonable to you? > > > > > > It may be OK, but I'm a little concerned about offering a feature that we > > don't support ourselves. Sometimes it's not until implementation that we > > find out whether it really works as expected. And if we're eventually > > planning to support it, I feel we should think through some of the cases > a > > bit more. For example, the upgrade and downgrade cases that Becket > > mentioned earlier. It doesn't feel too great to support this feature > unless > > we can offer guidance on how to use it. > > > > -Jason > > > > > > > > On Mon, Mar 14, 2016 at 4:20 PM, Ashish Singh <asi...@cloudera.com> > wrote: > > > > > Hi Jason, > > > > > > On Mon, Mar 14, 2016 at 4:04 PM, Jason Gustafson <ja...@confluent.io> > > > wrote: > > > > > > > Perhaps clients should always send the oldest version of the metadata > > > > request which supports KIP-35 when initially connecting to the > cluster. > > > > Depending on the versions in the response, it can upgrade to a more > > > recent > > > > version. Then maybe we don't need the empty response hack? > > > > > > > Are you suggesting this as a solution for the problem where a KIP-35 > > aware > > > client sends a higher version of metadata req, say v2, to a KIP-35 > aware > > > broker that only supports up to v1. > > > > > > We had a bit of discussion on such scenarios, and it seemed to be a > > chicken > > > and egg problem that is hard to avoid. Your suggestion definitely makes > > > sense, however it falls under the purview of clients. > > > > > > > > > > > One thing that's not clear to me is whether the ultimate goal of this > > KIP > > > > is to have our clients support multiple broker versions. It would be > a > > > > little weird to have this feature if our own clients don't use it. > > > > > > > KIP-35 only aims on adding support for getting the version info from a > > > broker. This definitely can be utilized by our clients. However, that > can > > > follow KIP-35 changes. Does this sound reasonable to you? > > > > > > > > > > > -Jason > > > > > > > > On Mon, Mar 14, 2016 at 3:34 PM, Ashish Singh <asi...@cloudera.com> > > > wrote: > > > > > > > > > On Mon, Mar 14, 2016 at 2:12 PM, Ismael Juma <ism...@juma.me.uk> > > > wrote: > > > > > > > > > > > On Mon, Mar 14, 2016 at 8:45 PM, Gwen Shapira <g...@confluent.io > > > > > > wrote: > > > > > > > > > > > > > > > I don't see how it helps. If the client is communicating > with a > > > > > broker > > > > > > > that > > > > > > > > does not support KIP-35, that broker will simply close the > > > > > connection. > > > > > > If > > > > > > > > the broker supports KIP-35, then it will provide the broker > > > > version. > > > > > I > > > > > > > > don't envisage a scenario where a broker does not support > > KIP-35, > > > > but > > > > > > > > implements the new behaviour of sending an empty response. Do > > > you? > > > > > > > > > > > > > > > > Are you sure about that? Per KIP-35, the broker supplies the > > > > version > > > > > in > > > > > > > response to Metadata request, not in response to anything else. > > > > > > > If the client sends producer request version 42 (accidentally > or > > > due > > > > to > > > > > > > premature upgrade) to KIP-35-compactible broker - we want to > see > > an > > > > > empty > > > > > > > packet and not a connection close. > > > > > > > Sending a broker version was deemed impractical IIRC. > > > > > > > > > > > > > > > > > > > OK, so this is a different case than the one Ashish described > > > ("client > > > > > that > > > > > > wants to support broker versions that do not provide broker > version > > > in > > > > > > metadata and broker versions that provides version info in > > > metadata"). > > > > > So, > > > > > > you are suggesting that if a client is communicating with a > broker > > > that > > > > > > implements KIP-35 and it receives an empty response, it will > assume > > > > that > > > > > > the broker doesn't support the request version and it won't try > to > > > > parse > > > > > > the response? I think it would be good to explain this kind of > > thing > > > in > > > > > > detail in the KIP. > > > > > > > > > > > Actually even in this case and the case I mentioned, closing > > connection > > > > > should be fine. Lets think about possible reasons that could lead > to > > > this > > > > > issue. > > > > > > > > > > 1. Client has incorrect mapping of supported protocols for a broker > > > > > version. > > > > > 2. Client misread broker version from metadata response. > > > > > 3. Client constructed unsupported protocol version by mistake. > > > > > > > > > > In all the above cases irrespective of what broker does, client > will > > > keep > > > > > sending wrong request version. > > > > > > > > > > At this point, I think sending an empty packet instead of closing > > > > > connection is a nice to have and not mandatory requirement. Like in > > the > > > > > above case, a client can catch parsing error and be sure that there > > is > > > > > something wrong in the protocol version it is sending. However, a > > > generic > > > > > connection close does not really provide any information on > probable > > > > cause. > > > > > > > > > > What do you guys suggest? > > > > > > > > > > > > > > > > > Ismael > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > Regards, > > > > > Ashish > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Regards, > > > Ashish > > > > > >