I do not have a preference for 1 or 2. 1 basically makes us view supported versions for all brokers
On Tuesday, March 15, 2016, Jay Kreps <j...@confluent.io> wrote: > Yeah I think there are two possible approaches: > 1. You get the versions in the metadata request and cache them and > invalidate that cache if you get a version mismatch error (basically > as we do with leadership information). > 2. You check each connection > > I think combining metadata request and version check only makes sense > in (1), right? If it is (2) I don't see how you save anything and the > requests don't really make sense because you're mixing cluster wide > state about partitions with info about the answering broker. > -Jay > > On Tue, Mar 15, 2016 at 4:25 PM, Magnus Edenhill <mag...@edenhill.se > <javascript:;>> wrote: > > Hey Jay, > > > > as discussed earlier it is not safe to cache/relay a broker's version or > > its supported API versions, > > by the time the client connects the broker might have upgraded to another > > version which effectively > > makes this information useless in a cached form. > > > > The complexity of querying for protocol verion is very implementation > > dependent and > > hard to generalize on, I dont foresee any bigger problems adding support > > for an extra protocol version > > querying state in librdkafka, but other client devs should chime in. > > There are already post-connect,pre-operation states for dealing with SSL > > and SASL. > > > > The reason for putting the API versioning stuff in the Metadata request > is > > that it is already used > > for bootstrapping a client and/or connection and thus saves us a > round-trip > > (and possibly a state). > > > > > > For how this will be used; I can't speak for other client devs but aim to > > make a mapping between > > the features my client exposes to a set of specific APIs and their > minimum > > version.. > > E.g.: Balanced consumer groups requires JoinGroup >= V0, LeaveGroup >= > V0, > > SyncGroup >= V0, and so on. > > If those requirements can be fullfilled then the feature is enabled, > > otherwise an error is returned to the user. > > > > /Magnus > > > > > > 2016-03-15 23:35 GMT+01:00 Jay Kreps <j...@confluent.io <javascript:;>>: > > > >> Hey Ashish, > >> > >> Can you expand in the proposal on how this would be used by clients? > >> This proposal only has one slot for api versions, though in fact there > >> is potentially a different version on each broker. I think the > >> proposal is that every single time the client establishes a connection > >> it would then need to issue a metadata request on that connection to > >> check supported versions. Is that correct? > >> > >> The point of merging version information with metadata request was > >> that the client wouldn't have to manage this additional state for each > >> connection, but rather the broker would gather the information and > >> give a summary of all brokers in the cluster. (Managing the state > >> doesn't seem complex but actually since the full state machine for a > >> request is something like begin connecting=>connection complete=>begin > >> sending request=>do work sending=>await response=>do work reading > >> response adding to the state machine around this is not as simple as > >> it seems...you can see the code in the java client around this). > >> > >> It sounds like in this proposal you are proposing merging with the > >> metadata request but not summarizing across the cluster? Can you > >> explain the thinking vs a separate request? > >> > >> It would really be good if the KIP can summarize the whole interaction > >> and how clients will work. > >> > >> -Jay > >> > >> On Tue, Mar 15, 2016 at 3:24 PM, Ashish Singh <asi...@cloudera.com > <javascript:;>> wrote: > >> > Magnus and I had a brief discussion following the KIP call. KIP-35 > >> > < > >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-35+-+Retrieving+protocol+version > >> > > >> > wiki has been updated accordingly. Please review the KIP and vote on > the > >> > corresponding vote thread. > >> > > >> > On Mon, Mar 14, 2016 at 11:27 PM, Ashish Singh <asi...@cloudera.com > <javascript:;>> > >> wrote: > >> > > >> >> I think there is a bit of misunderstanding going on here regarding > >> >> protocol documentation and its versioning. It could be that I am the > one > >> >> who misunderstood it, please correct me if so. > >> >> > >> >> Taking Gwen's example. > >> >> > >> >> 1. 0.10.0 (protocol v4) is released with current KIP-35 > >> >> 2. On trunk, modify produce requests and bump to v5 > >> >> 3. On trunk, we modify metadata requests and bump to v6 > >> >> 4. Now we decide that the metadata change fixes a super critical > issue > >> and > >> >> want to backport the change. What's the protocol version of the next > >> >> release of 0.10.0 - which supports v6 protocol only partially? > >> >> > >> >> As per my understanding, this will be v7. When we say a broker is on > >> >> ApiVersion 7, we do not necessarily mean that it also supports > >> ApiVersion > >> >> up to v7. A broker on ApiVersion v7 should probably mean, please > refer > >> v7 > >> >> of protocol documentation to find out supported protocol versions of > >> this > >> >> broker. > >> >> > >> >> I just added an example on the KIP wiki to elaborate more on protocol > >> >> documentation versioning. Below is the excerpt. > >> >> > >> >> For instance say we have two brokers, BrokerA has ApiVersion 4 and > >> BrokerB > >> >> has ApiVersion 5. This means we should have protocol documentations > for > >> >> ApiVersions 4 and 5. Say we have the following as protocol > documentation > >> >> for these two versions. > >> >> > >> >> Sample Protocol Documentation V4 > >> >> Version: 4 // Comes from ApiVersion > >> >> REQ_A_0: ... > >> >> REQ_A_1: ... > >> >> RESP_A_0: ... > >> >> RESP_A_1: ... > >> >> > >> >> Sample Protocol Documentation V5 > >> >> Version: 5 // Comes from ApiVersion > >> >> REQ_A_1: ... > >> >> REQ_A_2: ... > >> >> RESP_A_1: ... > >> >> RESP_A_2: ... > >> >> > >> >> All a client needs to know to be able to successfully communicate > with a > >> >> broker is what is the supported ApiVersion of the broker. Say via > some > >> >> mechanism, discussed below, client gets to know that BrokerA has > >> ApiVersion > >> >> 4 and BrokerB has ApiVersion 5. With that information, and the > available > >> >> protocol documentations for those ApiVersions client can deduce what > >> >> protocol versions does the broker supports. In this case client will > >> deduce > >> >> that it can use v0 and v1 of REQ_A and RESP_A while talking to > BrokerA, > >> >> while it can use v1 and v2 of REQ_A and RESP_A while talking to > BrokerB. > >> >> > >> >> On Mon, Mar 14, 2016 at 10:50 PM, Ewen Cheslack-Postava < > >> e...@confluent.io <javascript:;> > >> >> > wrote: > >> >> > >> >>> Yeah, Gwen's example is a good one. And it doesn't even have to be > >> thought > >> >>> of in terms of the implementation -- you can think of the protocol > >> itself > >> >>> as effectively being possible to branch and have changes > cherry-picked. > >> >>> Given the way some changes interact and that only some may be > feasible > >> to > >> >>> backport, this may be important. > >> >>> > >> >>> Similarly, it's difficult to make that definition . In practice, we > >> >>> sometimes branch and effectively merge the protocol -- i.e. we > develop > >> 2 > >> >>> KIPs with independent changes at the same time. If you force a > linear > >> >>> model, you also *force* the ordering of implementation, which will > be a > >> >>> pretty serious constraint in a lot of cases. Two protocol-changing > KIPs > >> >>> may > >> >>> occur near in time, but one may be a much larger change. > >> >>> > >> >>> Finally, it might be worth noting that from a client developer's > >> >>> perspective, the linear order may not be all that intuitive when we > >> pile > >> >>> on > >> >>> a bunch of protocol changes in one release. They probably don't > >> actually > >> >>> care about that global protocol version. They'll care more about the > >> types > >> >>> of things Dana was talking about previously: LZ4 support (which > isn't > >> even > >> >>> a protocol change, but an important feature clients might need to > know > >> >>> about!), Kafka-backed offset storage (requires 2 protocol changes), > >> etc. > >> >>> While we want to encourage supporting all features, we should be > >> realistic > >> >>> about how client developers tackle feature development and limited > >> >>> bandwidth. They are probably more feature driven than version > driven. > >> >>> > >> >>> This is what Gwen was saying I had mentioned. The idea of features > is > >> >>> actually separate from what has been described so far and *does* > >> require a > >> >>> mapping to protocol versions, but also allows you to capture more > than > >> >>> that > >> >>> and at more flexible granularity (single request type protocol > version > >> >>> bump > >> >>> or the whole set of requests could change). The idea isn't quite the > >> same > >> >>> as browser feature detection, but that's my frame of reference for > it > >> (see > >> >>> https://developer.mozilla.org/en-US/docs/Browser_Feature_Detection > ), > >> the > >> >>> process of trying to sort out supported features and protocols > based on > >> >>> browser version IDs (sort of equivalent to broker implementation > >> versions > >> >>> here) is a huge mess. Going entirely the other route (say, only > >> enabling a > >> >>> feature in CSS3 if *all* CSS3 features are implemented) is really > >> >>> restrictive. > >> >>> > >> >>> I don't have a concrete proposal right now, but something like > >> "features" > >> >>> that sit somewhere between a global protocol version number and only > >> >>> individual request versions more accurately captures what we want to > >> >>> express, in my opinion. > >> >>> > >> >>> -Ewen > >> >>> > >> >>> On Mon, Mar 14, 2016 at 6:45 PM, Gwen Shapira <g...@confluent.io > <javascript:;>> > >> wrote: > >> >>> > >> >>> > Jay, > >> >>> > > >> >>> > Ewen had a good example: > >> >>> > > >> >>> > 1. 0.10.0 (protocol v4) is released with current KIP-35 > >> >>> > 2. On trunk, modify produce requests and bump to v5 > >> >>> > 3. On trunk, we modify metadata requests and bump to v6 > >> >>> > 4. Now we decide that the metadata change fixes a super critical > >> issue > >> >>> and > >> >>> > want to backport the change. What's the protocol version of the > next > >> >>> > release of 0.10.0 - which supports v6 protocol only partially? > >> >>> > > >> >>> > Gwen > >> >>> > > >> >>> > On Mon, Mar 14, 2016 at 6:38 PM, Jay Kreps <j...@confluent.io > <javascript:;>> wrote: > >> >>> > > >> >>> > > Hey Dana, > >> >>> > > > >> >>> > > I am actually thinking about it differently. Basically I think > you > >> are > >> >>> > > imagining a world in which the Kafka code is the source of > truth, > >> and > >> >>> > > the Kafka developers make random changes that inflict pain on > you > >> at > >> >>> > > will. The protocol documentation is basically just some > >> semi-accurate > >> >>> > > description of what the code does. It sounds like this isn't too > >> far > >> >>> > > from the actual world. :-) In that world I agree that the best > we > >> >>> > > could do would be to assign some id to versions (the md5 of the > >> Kafka > >> >>> > > jar, maybe) and put in various checks around that in clients to > >> try to > >> >>> > > keep things working. > >> >>> > > > >> >>> > > But imagine a different approach where we try to really treat > the > >> >>> > > protocol as a document and treat that as the source of truth. We > >> try > >> >>> > > to make this document cover what is and isn't specified and > make it > >> >>> > > cover enough to support client implementations and a given Kafka > >> >>> > > version covers some range of protocols explicitly. There is a > >> version > >> >>> > > of this document for each protocol version. The code implements > the > >> >>> > > protocol rather than vice versa. > >> >>> > > > >> >>> > > So in other words protocol changes are totally ordered and > separate > >> >>> > > from code development (we might develop them together but the > >> protocol > >> >>> > > assignment would come when you checked in the new protocol > version > >> >>> > > which would happen with your code). > >> >>> > > > >> >>> > > This was really the intention with the protocol originally > (though > >> we > >> >>> > > were doing it on a per-api basis), but I think that > understanding > >> was > >> >>> > > not shared by the full team and we have not done a great job of > >> >>> > > important things like documentation or explaining how this are > >> >>> > > supposed to work so we fall back on the "the protocol is > whatever > >> the > >> >>> > > code does" thing. > >> >>> > > > >> >>> > > Does that make sense? In that sense think one of the more > important > >> >>> > > things we could get out of this would not be more versioning > >> features > >> >>> > > so much as clear docs and processes around protocol versioning. > >> >>> > > > >> >>> > > -Jay > >> >>> > > > >> >>> > > On Mon, Mar 14, 2016 at 6:22 PM, Dana Powers < > >> dana.pow...@gmail.com <javascript:;>> > >> >>> > > wrote: > >> >>> > > > Is a linear protocol int consistent with the current release > >> model? > >> >>> It > >> >>> > > > seems like that would break down w/ the multiple release > branches > >> >>> that > >> >>> > > are > >> >>> > > > all simultaneously maintained? Or is it implicit that no patch > >> >>> release > >> >>> > > can > >> >>> > > > ever bump the protocol int? Or maybe the protocol int gets > some > >> >>> extra > >> >>> > > > "wiggle" on minor / major releases to create unallocated > version > >> >>> ints > >> >>> > > that > >> >>> > > > could be used on future patch releases / backports? > >> >>> > > > > >> >>> > > > I think the protocol version int does make sense for folks > >> deploying > >> >>> > from > >> >>> > > > trunk. > >> >>> > > > > >> >>> > > > -Dana > >> >>> > > > > >> >>> > > > On Mon, Mar 14, 2016 at 6:13 PM, Jay Kreps <j...@confluent.io > <javascript:;>> > >> >>> wrote: > >> >>> > > > > >> >>> > > >> Yeah I think that is the point--we have a proposal for a new > >> >>> protocol > >> >>> > > >> versioning scheme and a vote on it but it doesn't actually > >> describe > >> >>> > > >> how versioning will work yet! I gave my vague impression > based > >> on > >> >>> this > >> >>> > > >> thread, but I want to make sure that is correct and get it > >> written > >> >>> > > >> down before we adopt it. > >> >>> > > >> > >> >>> > > >> -Jay > >> >>> > > >> > >> >>> > > >> On Mon, Mar 14, 2016 at 5:58 PM, Gwen Shapira < > >> g...@confluent.io <javascript:;>> > >> >>> > > wrote: > >> >>> > > >> > On Mon, Mar 14, 2016 at 5:31 PM, Jay Kreps < > j...@confluent.io <javascript:;>> > >> >>> > 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 <javascript:;> > >> >>> > > > > >> >>> > > >> >> 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 <javascript:;> > >> >>> > > > > >> >>> > > >> >> wrote: > >> >>> > > >> >> > > >> >>> > > >> >> > > Hi Jason, > >> >>> > > >> >> > > > >> >>> > > >> >> > > On Mon, Mar 14, 2016 at 4:04 PM, Jason Gustafson < > >> >>> > > >> ja...@confluent.io <javascript:;>> > >> >>> > > >> >> > > 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 <javascript:;>> > >> >>> > > >> >> > > wrote: > >> >>> > > >> >> > > > > >> >>> > > >> >> > > > > On Mon, Mar 14, 2016 at 2:12 PM, Ismael Juma < > >> >>> > > ism...@juma.me.uk <javascript:;> > >> >>> > > >> > > >> >>> > > >> >> > > wrote: > >> >>> > > >> >> > > > > > >> >>> > > >> >> > > > > > On Mon, Mar 14, 2016 at 8:45 PM, Gwen Shapira < > >> >>> > > >> g...@confluent.io <javascript:;> > >> >>> > > >> >> > > >> >>> > > >> >> > > > 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 > >> >>> > > >> >> > > > >> >>> > > >> >> > > >> >>> > > >> >> > >> >>> > > >> > >> >>> > > > >> >>> > > >> >>> > >> >>> > >> >>> > >> >>> -- > >> >>> Thanks, > >> >>> Ewen > >> >>> > >> >> > >> >> > >> >> > >> >> -- > >> >> > >> >> Regards, > >> >> Ashish > >> >> > >> > > >> > > >> > > >> > -- > >> > > >> > Regards, > >> > Ashish > >> > -- Ashish 🎤h