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> 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>:
>
>> 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> 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>
>> 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
>> >> > 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>
>> 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> 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>
>> >>> > > 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>
>> >>> 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>
>> >>> > > wrote:
>> >>> > > >> > 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
>> >>> > > >> >> > >
>> >>> > > >> >> >
>> >>> > > >> >>
>> >>> > > >>
>> >>> > >
>> >>> >
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Thanks,
>> >>> Ewen
>> >>>
>> >>
>> >>
>> >>
>> >> --
>> >>
>> >> Regards,
>> >> Ashish
>> >>
>> >
>> >
>> >
>> > --
>> >
>> > Regards,
>> > Ashish
>>

Reply via email to