I'm a fan of separating feature support/versions into a separate request
from metadata -- they're different requests and I don't see how the current
model of metadata can properly map to the request version info we need. The
complexity of support differing across brokers seems like something clients
need to handle regardless of any solution we come up with here (current
auto detection approaches are vulnerable to similar issues).

More importantly -- has this KIP ever made it over to the kafka-clients
list, or have we reached out to other client library developers? My brief
scan of the list suggests it hasn't, but maybe I missed something. We've
got Magnus & Dana participating, which is great and accounts for some
really important clients, but have we reached out as broadly as we can to
other client developers to get feedback? We're largely operating in an echo
chamber, and some of the current challenges might trace back to that mode
of operation -- the Java client, which has the benefit of development,
testing, and release alongside the broker, doesn't follow the same
compatibility and release approach as most other clients.

I'm happy to help with that outreach and bring feedback back into this
discussion, but I think this will end up being longer process than we can
resolve in the next few days...

-Ewen


On Wed, Mar 16, 2016 at 5:22 PM, Gwen Shapira <g...@confluent.io> wrote:

> I was a bit surprised to discover that the latest KIP includes an array of
> versions per request. Especially since we spent an hour discussing global
> APIs and their tradeoffs.
>
> I'm pointing this out in case anyone else missed that - to make sure we are
> all on the same page in this discussion.
>
> Gwen
>
> On Tue, Mar 15, 2016 at 10:41 PM, Ashish Singh <asi...@cloudera.com>
> wrote:
>
> > Sent incomplete message by mistake.
> >
> > I do not have a preference for (1) or (2). (1) basically makes us view
> > supported versions for all brokers as a part of cluster wide state,
> however
> > (2) lets client deal with individual brokers. From usage perspective,
> > clients would need to choose a certain feature or not based on minimal
> > supported version across all brokers they are talking to. In (1) this
> state
> > will be maintained and provided by server, however in (2) the onus will
> be
> > on client to maintain the state. What do you suggest will be the right
> > thing to do here?
> >
> >
> > On Tue, Mar 15, 2016 at 10:27 PM, Ashish Singh <asi...@cloudera.com>
> > wrote:
> >
> > > 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
> > >
> >
> >
> >
> > --
> >
> > Regards,
> > Ashish
> >
>



-- 
Thanks,
Ewen

Reply via email to