You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by Randall Hauch <rh...@gmail.com> on 2019/05/01 01:00:40 UTC

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Randall,
>
> Thanks a lot for your feedback.
>
> You bring up an interesting point regarding the overrides being available
> to the connectors. Today everything that is specified in the config while
> creating is available for the connector. But this is a specific case and we
> could do either of the following
>
>
>    - don't pass any configs with these prefixes to the ConnectorConfig
>    instance that's passed in the startConnector
>    - allow policies as to whether the configurations with the prefixes
>    should be made available to the connector or not. Should this also
> define a
>    list of configurations?
>
> I personally prefer not passing the configs to Connector since that's
> simple, straight forward and don't see a reason for the connector to access
> those.
>

I agree that these override properties should be effectively new
properties, in which case I'd also prefer that they be removed from the
configuration before it is passed to the connector. Yes, it is *possible*
that an existing connector happened to use connector config properties with
these prefixes, but it's seems pretty unlikely.

I'd love to hear whether other people agree.


>
> For the second point,  None - doesn't allow overrides and the default
> policy is null. We preserve backward compatibility when no policy is
> configured. Let me know if that's not clear in the KIP.
>

Why not have a default policy (rather than null) that implements the
backward-compatible behavior? It seems strange to have null be the default
and for non-policy to allow anything.


>
> Thanks,
> Magesh
>
> On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rh...@gmail.com> wrote:
>
> > Per the proposal, a connector configuration can define one or more
> > properties that begin with any of the three prefixes:
> "producer.override.",
> > "consumer.override.", and "admin.override.". The proposal states:
> >
> > Since the users can specify any of these policies, the connectors itself
> > should not rely on these configurations to be available. The overrides
> are
> > to be used purely from an operational perspective.
> >
> >
> > Does this mean that any such properties are visible to connectors, or
> will
> > they be hidden to connectors? Currently no connectors have access to such
> > client properties, and users are unlike to just put them into a connector
> > configuration unnecessarily. A connector implementation could have
> defined
> > such properties as normal connector-specific properties, in which case
> they
> > are required, but is that likely given the log prefixes? One concern
> that I
> > have is that this might allow connector implementations start attempting
> to
> > circumvent the Connect API if these properties are included.
> >
> > Second, does the None policy allow but ignore these additional properties
> > (e.g., "validate(...)" is simply a no-op)? Or does the None policy fail
> if
> > any client overrides are specified? The former seems more in line with
> the
> > current behavior, whereas the "disallows" policy seems useful but not
> > exactly backward compatible. Should we also offer a "Disallow" policy? In
> > fact, should the policies be named "Ignore" (default), "Disallow",
> > "Prinicipal", and "All"?
> >
> > Otherwise, I like the idea of this. There have been several requests over
> > the past year or two for adding subsets of this functionality. Might be
> > good to find and list all of the related KAFKA issues.
> >
> > Randall
> >
> > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <ch...@confluent.io>
> wrote:
> >
> > > Hi Magesh,
> > >
> > > Changes look good to me! Excited to see this happen, hope the KIP
> passes
> > :)
> > >
> > > Cheers,
> > >
> > > Chris
> > >
> > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> mageshn@confluent.io>
> > > wrote:
> > >
> > > > Hi Chris,
> > > >
> > > > I have updated the KIP to reflect the changes that we discussed for
> the
> > > > prefix. Thanks for all your inputs.
> > > >
> > > > Thanks,
> > > > Magesh
> > > >
> > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <ch...@confluent.io>
> > > wrote:
> > > >
> > > > > Hi Magesh,
> > > > >
> > > > > Agreed that we should avoid `dlq.admin`. I also don't have a strong
> > > > opinion
> > > > > between `connector.` and `.override`, but I have a slight
> inclination
> > > > > toward `.override` since `connector.` feels a little redundant
> given
> > > that
> > > > > the whole configuration is for the connector and the use of
> > "override"
> > > > may
> > > > > shed a little light on how the properties for these clients are
> > > computed
> > > > > and help make the learning curve a little gentler on new devs and
> > > users.
> > > > >
> > > > > Regardless, I think the larger issue of conflicts with existing
> > > > properties
> > > > > (both in MM2 and potentially other connectors) has been
> > satisfactorily
> > > > > addressed, so I'm happy.
> > > > >
> > > > > Cheers,
> > > > >
> > > > > Chris
> > > > >
> > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > mageshn@confluent.io
> > > > >
> > > > > wrote:
> > > > >
> > > > > > HI Chrise,
> > > > > >
> > > > > > You are right about the "admin." prefix creating conflicts. Here
> > are
> > > > few
> > > > > > options that I can think of
> > > > > >
> > > > > > 1. Use `dlq.admin` since admin client is used only for DLQ. But
> > this
> > > > > might
> > > > > > not really be the case in the future. So, we should possibly drop
> > > this
> > > > > idea
> > > > > > :)
> > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> > > > `connector.admin`
> > > > > -
> > > > > > provides better context that its connector specific property
> > > > > > 3.  Use `producer.override`, '`consumer.override` and
> > > `admin.override`
> > > > -
> > > > > > provides better clarity that these are overrides.
> > > > > >
> > > > > > I don't have a strong opinion in choosing between #2 and #3. Let
> me
> > > > > > know what you think.
> > > > > >
> > > > > > Thanks
> > > > > > Magesh
> > > > > >
> > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > chrise@confluent.io>
> > > > > > wrote:
> > > > > >
> > > > > > > Hi Magesh,
> > > > > > >
> > > > > > > Next round :)
> > > > > > >
> > > > > > > 1. It looks like MM2 will also support "admin." properties that
> > > > affect
> > > > > > > AdminClients it creates and uses, which IIUC is the same prefix
> > > name
> > > > to
> > > > > > be
> > > > > > > used for managing the DLQ for sink connectors in this KIP.
> > Doesn't
> > > > that
> > > > > > > still leave room for conflict? I'm imagining a scenario like
> > this:
> > > a
> > > > > > > Connect worker is configured to use the
> > > > > > > PrincipalConnectorClientConfigPolicy, someone tries to start an
> > > > > instance
> > > > > > of
> > > > > > > an MM2 sink with "admin." properties beyond just
> > > > > > "admin.sasl.jaas.config",
> > > > > > > and gets rejected because those properties are then interpreted
> > by
> > > > the
> > > > > > > worker as overrides for the AdminClient it uses to manage the
> > DLQ.
> > > > > > > 2. (LGTM)
> > > > > > > 3. I'm convinced by this, as long as nobody else identifies a
> > > common
> > > > > use
> > > > > > > case that would involve a similar client config policy
> > > implementation
> > > > > > that
> > > > > > > would be limited to a small set of whitelisted configs. For now
> > > > keeping
> > > > > > the
> > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to me.
> > > > > > >
> > > > > > > Cheers,
> > > > > > >
> > > > > > > Chris
> > > > > > >
> > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> > > > > mageshn@confluent.io
> > > > > > >
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Hi all,
> > > > > > > >
> > > > > > > > I also have a draft implementation of the KIP
> > > > > > > > https://github.com/apache/kafka/pull/6624. I would still
> need
> > to
> > > > > > include
> > > > > > > > more tests and docs but I thought it would be useful to have
> > this
> > > > for
> > > > > > the
> > > > > > > > KIP discussion. Looking forward to all of your valuable
> > feedback.
> > > > > > > >
> > > > > > > > Thanks
> > > > > > > > Magesh
> > > > > > > >
> > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh Nandakumar <
> > > > > > mageshn@confluent.io
> > > > > > > >
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Chrise,
> > > > > > > > >
> > > > > > > > > Thanks a lot for your feedback. I will address them in
> order
> > of
> > > > > your
> > > > > > > > > questions/comments.
> > > > > > > > >
> > > > > > > > > 1. Thanks for bringing this to my attention about KIP-382.
> I
> > > had
> > > > a
> > > > > > > closer
> > > > > > > > > look at the KIP and IIUC, the KIP allows `consumer.` prefix
> > for
> > > > > > > > SourceConnector
> > > > > > > > > and producer. prefix for SinkConnector since those are
> > > additional
> > > > > > > > > connector properties to help resolve the Kafka cluster
> other
> > > than
> > > > > the
> > > > > > > one
> > > > > > > > > Connect framework knows about. Whereas, the proposal in
> > KIP-458
> > > > > > applies
> > > > > > > > > producer policies for SinkConnectors and consumer policies
> > > > > > > > > SourceConnectors.  So, from what I understand this new
> policy
> > > > > should
> > > > > > > work
> > > > > > > > > without any issues even for Mirror Maker 2.0.
> > > > > > > > > 2. I have updated the KIP to use a default value of null
> and
> > > use
> > > > > that
> > > > > > > to
> > > > > > > > > determine if we need to ignore overrides.
> > > > > > > > > 3. I would still prefer to keep the special
> > > > > > > > PrincipalConnectorClientConfigPolicy
> > > > > > > > > since that is one of the most common use cases one would
> > choose
> > > > to
> > > > > > use
> > > > > > > > this
> > > > > > > > > feature. If we make it a general case, that would involve
> > users
> > > > > > > requiring
> > > > > > > > > to add additional configuration and they might require well
> > > more
> > > > > than
> > > > > > > > just
> > > > > > > > > the list of configs but might also want some restriction on
> > > > values.
> > > > > > If
> > > > > > > > the
> > > > > > > > > concern is about users wanting principal and also other
> > > configs,
> > > > it
> > > > > > > would
> > > > > > > > > still be possible by means of a custom implementation. As
> > is, I
> > > > > would
> > > > > > > > > prefer to keep the proposal to be the same for this. Let me
> > > know
> > > > > your
> > > > > > > > > thoughts.
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > > Magesh
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> > > > chrise@confluent.io
> > > > > >
> > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > >> Hi Magesh,
> > > > > > > > >>
> > > > > > > > >> This is an exciting KIP! I have a few questions/comments
> but
> > > > > > overall I
> > > > > > > > >> like
> > > > > > > > >> the direction it's headed in and hope to see it included
> in
> > > the
> > > > > > > Connect
> > > > > > > > >> framework soon.
> > > > > > > > >>
> > > > > > > > >> 1. With the proposed "consumer.", "producer.", and
> "admin."
> > > > > > prefixes,
> > > > > > > > how
> > > > > > > > >> will this interact with connectors such as the upcoming
> > Mirror
> > > > > Maker
> > > > > > > 2.0
> > > > > > > > >> (KIP-382) that already support properties with those
> > prefixes?
> > > > > Would
> > > > > > > it
> > > > > > > > be
> > > > > > > > >> possible for a user to configure MM2 with those properties
> > > > without
> > > > > > > them
> > > > > > > > >> being interpreted as Connect client overrides, without
> > > isolating
> > > > > MM2
> > > > > > > > onto
> > > > > > > > >> its own cluster and using the
> > > IgnoreConnectorClientConfigPolicy
> > > > > > > policy?
> > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy class
> necessary?
> > > The
> > > > > > > default
> > > > > > > > >> for the connector.client.config.policy property could
> simply
> > > be
> > > > > null
> > > > > > > > >> instead of a new policy that, as far as I can tell, isn't
> an
> > > > > actual
> > > > > > > > policy
> > > > > > > > >> in that its validate(...) method is never invoked and
> > instead
> > > > > > > > represents a
> > > > > > > > >> special case to the Connect framework that says "Drop all
> > > > > overrides
> > > > > > > and
> > > > > > > > >> never use me".
> > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy seems like a
> > > > specific
> > > > > > > > instance
> > > > > > > > >> of a more general use case: allow exactly a small set of
> > > > overrides
> > > > > > and
> > > > > > > > no
> > > > > > > > >> others. Why not generalize here and create a policy that
> > > > accepts a
> > > > > > > list
> > > > > > > > of
> > > > > > > > >> allowed overrides during configuration?
> > > > > > > > >>
> > > > > > > > >> Thanks again for the KIP.
> > > > > > > > >>
> > > > > > > > >> Cheers,
> > > > > > > > >>
> > > > > > > > >> Chris
> > > > > > > > >>
> > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh Nandakumar <
> > > > > > > mageshn@confluent.io
> > > > > > > > >
> > > > > > > > >> wrote:
> > > > > > > > >>
> > > > > > > > >> > Hi all,
> > > > > > > > >> >
> > > > > > > > >> > I've posted "KIP-458: Connector Client Config Override
> > > > Policy",
> > > > > > > which
> > > > > > > > >> > allows users to override the connector client
> > configurations
> > > > > based
> > > > > > > on
> > > > > > > > a
> > > > > > > > >> > policy defined by the administrator.
> > > > > > > > >> >
> > > > > > > > >> > The KIP can be found at
> > > > > > > > >> >
> > > > > > > > >> >
> > > > > > > > >>
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > > > > > > >> > .
> > > > > > > > >> >
> > > > > > > > >> > Looking forward for the discussion on the KIP and all of
> > > your
> > > > > > > > thoughts &
> > > > > > > > >> > feedback on this enhancement to Connect.
> > > > > > > > >> >
> > > > > > > > >> > Thanks,
> > > > > > > > >> > Magesh
> > > > > > > > >> >
> > > > > > > > >>
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Re: [VOTE] KIP-458: Connector Client Config Override Policy

Posted by Chris Egerton <ch...@confluent.io>.
Hi all,

I'd like  to bring attention to a feature that was added as part of the KIP
but never actually documented: the new "admin." prefix and how it's used by
workers to compute the configuration for admin clients when using the DLQ
for a connector. I've written up a more detailed description of the issue,
including a proposed fix, in a Jira that you can find here:
https://issues.apache.org/jira/browse/KAFKA-9046. Would be interested to
hear people's thoughts on the matter, especially with the 2.4 release
coming up soon; if we move quickly, it may be possible to get a fix in (if
one is deemed necessary) in time for the release.

Cheers,

Chris

On Tue, May 7, 2019 at 9:44 AM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Hi All,
>
> I would like to start a vote on
>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
>
> The discussion thread can be found here
> <https://www.mail-archive.com/dev@kafka.apache.org/msg97124.html>.
>
> Thanks,
> Magesh
>
> On Tue, May 7, 2019 at 9:35 AM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > I have addressed all the outstanding discussion points and I believe we
> > have consensus on the design. Thanks, everyone for the feedback. I will
> > start a VOTE thread on this KIP.
> >
> > On Mon, May 6, 2019 at 10:13 PM Magesh Nandakumar <ma...@confluent.io>
> > wrote:
> >
> >> Randall,
> >>
> >> Thanks a lot for the suggestions. I have incorporated the comments in
> the
> >> KIP.
> >>
> >> Thanks,
> >> Magesh
> >>
> >> On Mon, May 6, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:
> >>
> >>> Thanks, Magesh. I do have a few pretty minor suggestions.
> >>>
> >>> 1) Define a bit more clearly in the "Proposed Changes" whether the
> >>> configs
> >>> passed to the validate method via the ConnectorClientConfigRequest
> object
> >>> have or do not have the prefixes.
> >>> 2) Specify more clearly in (or around) the table which is the default
> >>> policy. Currently the Ignore policy "Behavior" just mentions that it's
> >>> the
> >>> current behavior, but I think it would help that it is described as the
> >>> default for the property.
> >>>
> >>> Otherwise, this looks good to me.
> >>>
> >>> Best regards,
> >>>
> >>> Randall
> >>>
> >>> On Mon, May 6, 2019 at 8:12 PM Magesh Nandakumar <mageshn@confluent.io
> >
> >>> wrote:
> >>>
> >>> > Konstantine,
> >>> >
> >>> > Thanks a lot for your feedback on the KIP. I have incorporated the
> >>> feedback
> >>> > using generics for Class. I have also updated the KIP to handle the
> >>> default
> >>> > value per Randall's suggestion. Let me know if you have any
> questions.
> >>> >
> >>> > Thanks,
> >>> > Magesh
> >>> >
> >>> >
> >>> > On Mon, May 6, 2019 at 1:58 PM Konstantine Karantasis <
> >>> > konstantine@confluent.io> wrote:
> >>> >
> >>> > > Thanks for the KIP Magesh, it's quite useful towards the goals for
> >>> more
> >>> > > general multi-tenancy in Connect.
> >>> > >
> >>> > > Couple of comments from me too:
> >>> > >
> >>> > > I think the fact that the default policy is 'null' (no
> >>> implementation)
> >>> > > should be mentioned on the table next to the available
> >>> implementations.
> >>> > > Currently the KIP says: 'In addition to the default implementation,
> >>> ..."
> >>> > > but this is not very accurate because there is no concrete default
> >>> > > implementation. Just special handling of 'null' in
> >>> > > 'connector.client.config.policy'
> >>> > >
> >>> > > Regarding passing the overrides to the connector 'configure'
> method,
> >>> I
> >>> > feel
> >>> > > it wouldn't hurt to pass them, but I also agree that leaving this
> >>> out at
> >>> > > the moment is the safest option.
> >>> > >
> >>> > > Since the interfaces and classes are listed in the KIP, I'd like to
> >>> note
> >>> > > that Class is used as a raw type in field and return value
> >>> declarations.
> >>> > We
> >>> > > should use the generic type instead.
> >>> > >
> >>> > > Thanks for this improvement proposal!
> >>> > > Konstantine
> >>> > >
> >>> > > On Mon, May 6, 2019 at 11:11 AM Magesh Nandakumar <
> >>> mageshn@confluent.io>
> >>> > > wrote:
> >>> > >
> >>> > > > Randall,
> >>> > > >
> >>> > > > I was wondering if you had any thoughts on the above alternatives
> >>> to
> >>> > deal
> >>> > > > with a default policy.  If it's possible, I would like to
> finalize
> >>> the
> >>> > > > discussions and start a vote.
> >>> > > > Let me know your thoughts.
> >>> > > >
> >>> > > > Thanks,
> >>> > > > Magesh
> >>> > > >
> >>> > > > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <
> >>> > mageshn@confluent.io>
> >>> > > > wrote:
> >>> > > >
> >>> > > > > Randall,
> >>> > > > >
> >>> > > > > The approach to return the to override configs could possibly
> >>> make it
> >>> > > > > cumbersome to implement a custom policy. This is a new
> >>> configuration
> >>> > > and
> >>> > > > if
> >>> > > > > you don't explicitly set it the existing behavior remains
> as-is.
> >>> Like
> >>> > > > > Chris, I also preferred this approach for the sake of
> >>> simplicity.  If
> >>> > > not
> >>> > > > > for the default `null` I would prefer to fall back to using
> >>> `Ignore`
> >>> > > > which
> >>> > > > > is a misnomer to the interface spec but still gets the job done
> >>> via
> >>> > > > > instanceOf checks. The other options I could think of are as
> >>> below:-
> >>> > > > >
> >>> > > > >    - have an enforcePolicy() method in the interface which by
> >>> default
> >>> > > > >    returns true and the Ignore implementation could return
> false
> >>> > > > >    - introduce another worker config
> >>> allow.connector.config.overrides
> >>> > > > >    with a default value of false and the default policy can be
> >>> None
> >>> > > > >
> >>> > > > > Let me know what you think.
> >>> > > > >
> >>> > > > > Thanks
> >>> > > > > Magesh
> >>> > > > >
> >>> > > > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <
> rhauch@gmail.com>
> >>> > > wrote:
> >>> > > > >
> >>> > > > >> Thanks, Chris. I still think it's strange to have a
> non-policy,
> >>> > since
> >>> > > > >> there's now special behavior for when the policy is not
> >>> specified.
> >>> > > > >>
> >>> > > > >> Perhaps the inability for a policy implementation to represent
> >>> the
> >>> > > > >> existing
> >>> > > > >> behavior suggests that the policy interface isn't quite right.
> >>> Could
> >>> > > the
> >>> > > > >> policy's "validate" method take the overrides that were
> >>> supplied and
> >>> > > > >> return
> >>> > > > >> the overrides that should be passed to the connector, yet
> still
> >>> > > throwing
> >>> > > > >> an
> >>> > > > >> exception if any supplied overrides are not allowed. Then the
> >>> > > different
> >>> > > > >> policy implementations might be:
> >>> > > > >>
> >>> > > > >>    - Ignore (default) - returns all supplied override
> properties
> >>> > > > >>    - None - throws exception if any override properties are
> >>> > supplied;
> >>> > > > >>    always returns empty map if no overrides are provided
> >>> > > > >>    - Principal - throws exception if other override properties
> >>> are
> >>> > > > >>    provided, but returns an empty map (since no properties
> >>> should be
> >>> > > > >> passed to
> >>> > > > >>    the connector)
> >>> > > > >>    - All - returns all provided override properties
> >>> > > > >>
> >>> > > > >> All override properties defined on the connector configuration
> >>> would
> >>> > > be
> >>> > > > >> passed to the policy for validation, and assuming there's no
> >>> error
> >>> > all
> >>> > > > of
> >>> > > > >> these overrides would be used in the producer/consumer/admin
> >>> client.
> >>> > > The
> >>> > > > >> result of the policy call, however, is used to determine which
> >>> of
> >>> > > these
> >>> > > > >> overrides are passed to the connector.
> >>> > > > >>
> >>> > > > >> This approach means that all behaviors can be implemented
> >>> through a
> >>> > > > policy
> >>> > > > >> class, including the defaults. It also gives a bit more
> control
> >>> to
> >>> > > > custom
> >>> > > > >> policies, should that be warranted. For example, validating
> the
> >>> > > provided
> >>> > > > >> client overrides but passing all such override properties to
> the
> >>> > > > >> connector,
> >>> > > > >> which as I stated earlier is something I think connectors
> likely
> >>> > don't
> >>> > > > >> look
> >>> > > > >> for.
> >>> > > > >>
> >>> > > > >> Thoughts?
> >>> > > > >>
> >>> > > > >> Randall
> >>> > > > >>
> >>> > > > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <
> >>> chrise@confluent.io>
> >>> > > > >> wrote:
> >>> > > > >>
> >>> > > > >> > Randall,
> >>> > > > >> >
> >>> > > > >> > The special behavior for null was my suggestion. There is no
> >>> > > > >> implementation
> >>> > > > >> > of the proposed interface that causes client overrides to be
> >>> > > ignored,
> >>> > > > so
> >>> > > > >> > the original idea was to have a special implementation that
> >>> would
> >>> > be
> >>> > > > >> > checked for by the Connect framework (probably via the
> >>> instanceof
> >>> > > > >> operator)
> >>> > > > >> > and, if present, cause all would-be overrides to be ignored.
> >>> > > > >> >
> >>> > > > >> > I thought this may be confusing to people who may see that
> >>> > behavior
> >>> > > > and
> >>> > > > >> > wonder how to recreate it themselves, so I suggested leaving
> >>> that
> >>> > > > policy
> >>> > > > >> > out and replace it with a check to see if a policy was
> >>> specified
> >>> > at
> >>> > > > all.
> >>> > > > >> >
> >>> > > > >> > Would be interested in your thoughts on this, especially if
> >>> > there's
> >>> > > an
> >>> > > > >> > alternative that hasn't been proposed yet.
> >>> > > > >> >
> >>> > > > >> > Cheers,
> >>> > > > >> >
> >>> > > > >> > Chris
> >>> > > > >> >
> >>> > > > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rhauch@gmail.com
> >
> >>> > wrote:
> >>> > > > >> >
> >>> > > > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> >>> > > > >> mageshn@confluent.io>
> >>> > > > >> > > wrote:
> >>> > > > >> > >
> >>> > > > >> > > > Randall,
> >>> > > > >> > > >
> >>> > > > >> > > > Thanks a lot for your feedback.
> >>> > > > >> > > >
> >>> > > > >> > > > You bring up an interesting point regarding the
> overrides
> >>> > being
> >>> > > > >> > available
> >>> > > > >> > > > to the connectors. Today everything that is specified in
> >>> the
> >>> > > > config
> >>> > > > >> > while
> >>> > > > >> > > > creating is available for the connector. But this is a
> >>> > specific
> >>> > > > case
> >>> > > > >> > and
> >>> > > > >> > > we
> >>> > > > >> > > > could do either of the following
> >>> > > > >> > > >
> >>> > > > >> > > >
> >>> > > > >> > > >    - don't pass any configs with these prefixes to the
> >>> > > > >> ConnectorConfig
> >>> > > > >> > > >    instance that's passed in the startConnector
> >>> > > > >> > > >    - allow policies as to whether the configurations
> with
> >>> the
> >>> > > > >> prefixes
> >>> > > > >> > > >    should be made available to the connector or not.
> >>> Should
> >>> > this
> >>> > > > >> also
> >>> > > > >> > > > define a
> >>> > > > >> > > >    list of configurations?
> >>> > > > >> > > >
> >>> > > > >> > > > I personally prefer not passing the configs to Connector
> >>> since
> >>> > > > >> that's
> >>> > > > >> > > > simple, straight forward and don't see a reason for the
> >>> > > connector
> >>> > > > to
> >>> > > > >> > > access
> >>> > > > >> > > > those.
> >>> > > > >> > > >
> >>> > > > >> > >
> >>> > > > >> > > I agree that these override properties should be
> >>> effectively new
> >>> > > > >> > > properties, in which case I'd also prefer that they be
> >>> removed
> >>> > > from
> >>> > > > >> the
> >>> > > > >> > > configuration before it is passed to the connector. Yes,
> it
> >>> is
> >>> > > > >> *possible*
> >>> > > > >> > > that an existing connector happened to use connector
> config
> >>> > > > properties
> >>> > > > >> > with
> >>> > > > >> > > these prefixes, but it's seems pretty unlikely.
> >>> > > > >> > >
> >>> > > > >> > > I'd love to hear whether other people agree.
> >>> > > > >> > >
> >>> > > > >> > >
> >>> > > > >> > > >
> >>> > > > >> > > > For the second point,  None - doesn't allow overrides
> and
> >>> the
> >>> > > > >> default
> >>> > > > >> > > > policy is null. We preserve backward compatibility when
> no
> >>> > > policy
> >>> > > > is
> >>> > > > >> > > > configured. Let me know if that's not clear in the KIP.
> >>> > > > >> > > >
> >>> > > > >> > >
> >>> > > > >> > > Why not have a default policy (rather than null) that
> >>> implements
> >>> > > the
> >>> > > > >> > > backward-compatible behavior? It seems strange to have
> null
> >>> be
> >>> > the
> >>> > > > >> > default
> >>> > > > >> > > and for non-policy to allow anything.
> >>> > > > >> > >
> >>> > > > >> > >
> >>> > > > >> > > >
> >>> > > > >> > > > Thanks,
> >>> > > > >> > > > Magesh
> >>> > > > >> > > >
> >>> > > > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <
> >>> > rhauch@gmail.com
> >>> > > >
> >>> > > > >> > wrote:
> >>> > > > >> > > >
> >>> > > > >> > > > > Per the proposal, a connector configuration can define
> >>> one
> >>> > or
> >>> > > > more
> >>> > > > >> > > > > properties that begin with any of the three prefixes:
> >>> > > > >> > > > "producer.override.",
> >>> > > > >> > > > > "consumer.override.", and "admin.override.". The
> >>> proposal
> >>> > > > states:
> >>> > > > >> > > > >
> >>> > > > >> > > > > Since the users can specify any of these policies, the
> >>> > > > connectors
> >>> > > > >> > > itself
> >>> > > > >> > > > > should not rely on these configurations to be
> >>> available. The
> >>> > > > >> > overrides
> >>> > > > >> > > > are
> >>> > > > >> > > > > to be used purely from an operational perspective.
> >>> > > > >> > > > >
> >>> > > > >> > > > >
> >>> > > > >> > > > > Does this mean that any such properties are visible to
> >>> > > > >> connectors, or
> >>> > > > >> > > > will
> >>> > > > >> > > > > they be hidden to connectors? Currently no connectors
> >>> have
> >>> > > > access
> >>> > > > >> to
> >>> > > > >> > > such
> >>> > > > >> > > > > client properties, and users are unlike to just put
> them
> >>> > into
> >>> > > a
> >>> > > > >> > > connector
> >>> > > > >> > > > > configuration unnecessarily. A connector
> implementation
> >>> > could
> >>> > > > have
> >>> > > > >> > > > defined
> >>> > > > >> > > > > such properties as normal connector-specific
> >>> properties, in
> >>> > > > which
> >>> > > > >> > case
> >>> > > > >> > > > they
> >>> > > > >> > > > > are required, but is that likely given the log
> >>> prefixes? One
> >>> > > > >> concern
> >>> > > > >> > > > that I
> >>> > > > >> > > > > have is that this might allow connector
> implementations
> >>> > start
> >>> > > > >> > > attempting
> >>> > > > >> > > > to
> >>> > > > >> > > > > circumvent the Connect API if these properties are
> >>> included.
> >>> > > > >> > > > >
> >>> > > > >> > > > > Second, does the None policy allow but ignore these
> >>> > additional
> >>> > > > >> > > properties
> >>> > > > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the
> >>> None
> >>> > > > policy
> >>> > > > >> > fail
> >>> > > > >> > > > if
> >>> > > > >> > > > > any client overrides are specified? The former seems
> >>> more in
> >>> > > > line
> >>> > > > >> > with
> >>> > > > >> > > > the
> >>> > > > >> > > > > current behavior, whereas the "disallows" policy seems
> >>> > useful
> >>> > > > but
> >>> > > > >> not
> >>> > > > >> > > > > exactly backward compatible. Should we also offer a
> >>> > "Disallow"
> >>> > > > >> > policy?
> >>> > > > >> > > In
> >>> > > > >> > > > > fact, should the policies be named "Ignore" (default),
> >>> > > > "Disallow",
> >>> > > > >> > > > > "Prinicipal", and "All"?
> >>> > > > >> > > > >
> >>> > > > >> > > > > Otherwise, I like the idea of this. There have been
> >>> several
> >>> > > > >> requests
> >>> > > > >> > > over
> >>> > > > >> > > > > the past year or two for adding subsets of this
> >>> > functionality.
> >>> > > > >> Might
> >>> > > > >> > be
> >>> > > > >> > > > > good to find and list all of the related KAFKA issues.
> >>> > > > >> > > > >
> >>> > > > >> > > > > Randall
> >>> > > > >> > > > >
> >>> > > > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> >>> > > > >> chrise@confluent.io>
> >>> > > > >> > > > wrote:
> >>> > > > >> > > > >
> >>> > > > >> > > > > > Hi Magesh,
> >>> > > > >> > > > > >
> >>> > > > >> > > > > > Changes look good to me! Excited to see this happen,
> >>> hope
> >>> > > the
> >>> > > > >> KIP
> >>> > > > >> > > > passes
> >>> > > > >> > > > > :)
> >>> > > > >> > > > > >
> >>> > > > >> > > > > > Cheers,
> >>> > > > >> > > > > >
> >>> > > > >> > > > > > Chris
> >>> > > > >> > > > > >
> >>> > > > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> >>> > > > >> > > > mageshn@confluent.io>
> >>> > > > >> > > > > > wrote:
> >>> > > > >> > > > > >
> >>> > > > >> > > > > > > Hi Chris,
> >>> > > > >> > > > > > >
> >>> > > > >> > > > > > > I have updated the KIP to reflect the changes that
> >>> we
> >>> > > > >> discussed
> >>> > > > >> > for
> >>> > > > >> > > > the
> >>> > > > >> > > > > > > prefix. Thanks for all your inputs.
> >>> > > > >> > > > > > >
> >>> > > > >> > > > > > > Thanks,
> >>> > > > >> > > > > > > Magesh
> >>> > > > >> > > > > > >
> >>> > > > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> >>> > > > >> > chrise@confluent.io
> >>> > > > >> > > >
> >>> > > > >> > > > > > wrote:
> >>> > > > >> > > > > > >
> >>> > > > >> > > > > > > > Hi Magesh,
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also
> >>> don't
> >>> > > > have a
> >>> > > > >> > > strong
> >>> > > > >> > > > > > > opinion
> >>> > > > >> > > > > > > > between `connector.` and `.override`, but I
> have a
> >>> > > slight
> >>> > > > >> > > > inclination
> >>> > > > >> > > > > > > > toward `.override` since `connector.` feels a
> >>> little
> >>> > > > >> redundant
> >>> > > > >> > > > given
> >>> > > > >> > > > > > that
> >>> > > > >> > > > > > > > the whole configuration is for the connector and
> >>> the
> >>> > use
> >>> > > > of
> >>> > > > >> > > > > "override"
> >>> > > > >> > > > > > > may
> >>> > > > >> > > > > > > > shed a little light on how the properties for
> >>> these
> >>> > > > clients
> >>> > > > >> are
> >>> > > > >> > > > > > computed
> >>> > > > >> > > > > > > > and help make the learning curve a little
> gentler
> >>> on
> >>> > new
> >>> > > > >> devs
> >>> > > > >> > and
> >>> > > > >> > > > > > users.
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > > > Regardless, I think the larger issue of
> conflicts
> >>> with
> >>> > > > >> existing
> >>> > > > >> > > > > > > properties
> >>> > > > >> > > > > > > > (both in MM2 and potentially other connectors)
> has
> >>> > been
> >>> > > > >> > > > > satisfactorily
> >>> > > > >> > > > > > > > addressed, so I'm happy.
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > > > Cheers,
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > > > Chris
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh
> >>> Nandakumar <
> >>> > > > >> > > > > > mageshn@confluent.io
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > > > wrote:
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > > > > HI Chrise,
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > > > You are right about the "admin." prefix
> creating
> >>> > > > >> conflicts.
> >>> > > > >> > > Here
> >>> > > > >> > > > > are
> >>> > > > >> > > > > > > few
> >>> > > > >> > > > > > > > > options that I can think of
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used
> >>> only
> >>> > for
> >>> > > > >> DLQ.
> >>> > > > >> > But
> >>> > > > >> > > > > this
> >>> > > > >> > > > > > > > might
> >>> > > > >> > > > > > > > > not really be the case in the future. So, we
> >>> should
> >>> > > > >> possibly
> >>> > > > >> > > drop
> >>> > > > >> > > > > > this
> >>> > > > >> > > > > > > > idea
> >>> > > > >> > > > > > > > > :)
> >>> > > > >> > > > > > > > > 2.  Use `connector.producer`,
> >>> `connector.consumer`
> >>> > and
> >>> > > > >> > > > > > > `connector.admin`
> >>> > > > >> > > > > > > > -
> >>> > > > >> > > > > > > > > provides better context that its connector
> >>> specific
> >>> > > > >> property
> >>> > > > >> > > > > > > > > 3.  Use `producer.override`,
> >>> '`consumer.override`
> >>> > and
> >>> > > > >> > > > > > `admin.override`
> >>> > > > >> > > > > > > -
> >>> > > > >> > > > > > > > > provides better clarity that these are
> >>> overrides.
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > > > I don't have a strong opinion in choosing
> >>> between #2
> >>> > > and
> >>> > > > >> #3.
> >>> > > > >> > > Let
> >>> > > > >> > > > me
> >>> > > > >> > > > > > > > > know what you think.
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > > > Thanks
> >>> > > > >> > > > > > > > > Magesh
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris
> Egerton <
> >>> > > > >> > > > > chrise@confluent.io>
> >>> > > > >> > > > > > > > > wrote:
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > > > > Hi Magesh,
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > > > Next round :)
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > > > 1. It looks like MM2 will also support
> >>> "admin."
> >>> > > > >> properties
> >>> > > > >> > > that
> >>> > > > >> > > > > > > affect
> >>> > > > >> > > > > > > > > > AdminClients it creates and uses, which IIUC
> >>> is
> >>> > the
> >>> > > > same
> >>> > > > >> > > prefix
> >>> > > > >> > > > > > name
> >>> > > > >> > > > > > > to
> >>> > > > >> > > > > > > > > be
> >>> > > > >> > > > > > > > > > used for managing the DLQ for sink
> connectors
> >>> in
> >>> > > this
> >>> > > > >> KIP.
> >>> > > > >> > > > > Doesn't
> >>> > > > >> > > > > > > that
> >>> > > > >> > > > > > > > > > still leave room for conflict? I'm
> imagining a
> >>> > > > scenario
> >>> > > > >> > like
> >>> > > > >> > > > > this:
> >>> > > > >> > > > > > a
> >>> > > > >> > > > > > > > > > Connect worker is configured to use the
> >>> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy,
> someone
> >>> > tries
> >>> > > to
> >>> > > > >> > start
> >>> > > > >> > > an
> >>> > > > >> > > > > > > > instance
> >>> > > > >> > > > > > > > > of
> >>> > > > >> > > > > > > > > > an MM2 sink with "admin." properties beyond
> >>> just
> >>> > > > >> > > > > > > > > "admin.sasl.jaas.config",
> >>> > > > >> > > > > > > > > > and gets rejected because those properties
> are
> >>> > then
> >>> > > > >> > > interpreted
> >>> > > > >> > > > > by
> >>> > > > >> > > > > > > the
> >>> > > > >> > > > > > > > > > worker as overrides for the AdminClient it
> >>> uses to
> >>> > > > >> manage
> >>> > > > >> > the
> >>> > > > >> > > > > DLQ.
> >>> > > > >> > > > > > > > > > 2. (LGTM)
> >>> > > > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody
> >>> else
> >>> > > > >> > identifies a
> >>> > > > >> > > > > > common
> >>> > > > >> > > > > > > > use
> >>> > > > >> > > > > > > > > > case that would involve a similar client
> >>> config
> >>> > > policy
> >>> > > > >> > > > > > implementation
> >>> > > > >> > > > > > > > > that
> >>> > > > >> > > > > > > > > > would be limited to a small set of
> whitelisted
> >>> > > > configs.
> >>> > > > >> For
> >>> > > > >> > > now
> >>> > > > >> > > > > > > keeping
> >>> > > > >> > > > > > > > > the
> >>> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds
> >>> fine
> >>> > to
> >>> > > > me.
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > > > Cheers,
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > > > Chris
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh
> >>> > Nandakumar <
> >>> > > > >> > > > > > > > mageshn@confluent.io
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > > > wrote:
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > > > > Hi all,
> >>> > > > >> > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > I also have a draft implementation of the
> >>> KIP
> >>> > > > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624
> .
> >>> I
> >>> > > would
> >>> > > > >> still
> >>> > > > >> > > > need
> >>> > > > >> > > > > to
> >>> > > > >> > > > > > > > > include
> >>> > > > >> > > > > > > > > > > more tests and docs but I thought it would
> >>> be
> >>> > > useful
> >>> > > > >> to
> >>> > > > >> > > have
> >>> > > > >> > > > > this
> >>> > > > >> > > > > > > for
> >>> > > > >> > > > > > > > > the
> >>> > > > >> > > > > > > > > > > KIP discussion. Looking forward to all of
> >>> your
> >>> > > > >> valuable
> >>> > > > >> > > > > feedback.
> >>> > > > >> > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > Thanks
> >>> > > > >> > > > > > > > > > > Magesh
> >>> > > > >> > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
> >>> > > Nandakumar <
> >>> > > > >> > > > > > > > > mageshn@confluent.io
> >>> > > > >> > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > wrote:
> >>> > > > >> > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > > Chrise,
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > > Thanks a lot for your feedback. I will
> >>> address
> >>> > > > them
> >>> > > > >> in
> >>> > > > >> > > > order
> >>> > > > >> > > > > of
> >>> > > > >> > > > > > > > your
> >>> > > > >> > > > > > > > > > > > questions/comments.
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > > 1. Thanks for bringing this to my
> >>> attention
> >>> > > about
> >>> > > > >> > > KIP-382.
> >>> > > > >> > > > I
> >>> > > > >> > > > > > had
> >>> > > > >> > > > > > > a
> >>> > > > >> > > > > > > > > > closer
> >>> > > > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> >>> > > > `consumer.`
> >>> > > > >> > > prefix
> >>> > > > >> > > > > for
> >>> > > > >> > > > > > > > > > > SourceConnector
> >>> > > > >> > > > > > > > > > > > and producer. prefix for SinkConnector
> >>> since
> >>> > > those
> >>> > > > >> are
> >>> > > > >> > > > > > additional
> >>> > > > >> > > > > > > > > > > > connector properties to help resolve the
> >>> Kafka
> >>> > > > >> cluster
> >>> > > > >> > > > other
> >>> > > > >> > > > > > than
> >>> > > > >> > > > > > > > the
> >>> > > > >> > > > > > > > > > one
> >>> > > > >> > > > > > > > > > > > Connect framework knows about. Whereas,
> >>> the
> >>> > > > >> proposal in
> >>> > > > >> > > > > KIP-458
> >>> > > > >> > > > > > > > > applies
> >>> > > > >> > > > > > > > > > > > producer policies for SinkConnectors and
> >>> > > consumer
> >>> > > > >> > > policies
> >>> > > > >> > > > > > > > > > > > SourceConnectors.  So, from what I
> >>> understand
> >>> > > this
> >>> > > > >> new
> >>> > > > >> > > > policy
> >>> > > > >> > > > > > > > should
> >>> > > > >> > > > > > > > > > work
> >>> > > > >> > > > > > > > > > > > without any issues even for Mirror Maker
> >>> 2.0.
> >>> > > > >> > > > > > > > > > > > 2. I have updated the KIP to use a
> default
> >>> > value
> >>> > > > of
> >>> > > > >> > null
> >>> > > > >> > > > and
> >>> > > > >> > > > > > use
> >>> > > > >> > > > > > > > that
> >>> > > > >> > > > > > > > > > to
> >>> > > > >> > > > > > > > > > > > determine if we need to ignore
> overrides.
> >>> > > > >> > > > > > > > > > > > 3. I would still prefer to keep the
> >>> special
> >>> > > > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> >>> > > > >> > > > > > > > > > > > since that is one of the most common use
> >>> cases
> >>> > > one
> >>> > > > >> > would
> >>> > > > >> > > > > choose
> >>> > > > >> > > > > > > to
> >>> > > > >> > > > > > > > > use
> >>> > > > >> > > > > > > > > > > this
> >>> > > > >> > > > > > > > > > > > feature. If we make it a general case,
> >>> that
> >>> > > would
> >>> > > > >> > involve
> >>> > > > >> > > > > users
> >>> > > > >> > > > > > > > > > requiring
> >>> > > > >> > > > > > > > > > > > to add additional configuration and they
> >>> might
> >>> > > > >> require
> >>> > > > >> > > well
> >>> > > > >> > > > > > more
> >>> > > > >> > > > > > > > than
> >>> > > > >> > > > > > > > > > > just
> >>> > > > >> > > > > > > > > > > > the list of configs but might also want
> >>> some
> >>> > > > >> > restriction
> >>> > > > >> > > on
> >>> > > > >> > > > > > > values.
> >>> > > > >> > > > > > > > > If
> >>> > > > >> > > > > > > > > > > the
> >>> > > > >> > > > > > > > > > > > concern is about users wanting principal
> >>> and
> >>> > > also
> >>> > > > >> other
> >>> > > > >> > > > > > configs,
> >>> > > > >> > > > > > > it
> >>> > > > >> > > > > > > > > > would
> >>> > > > >> > > > > > > > > > > > still be possible by means of a custom
> >>> > > > >> implementation.
> >>> > > > >> > As
> >>> > > > >> > > > > is, I
> >>> > > > >> > > > > > > > would
> >>> > > > >> > > > > > > > > > > > prefer to keep the proposal to be the
> >>> same for
> >>> > > > this.
> >>> > > > >> > Let
> >>> > > > >> > > me
> >>> > > > >> > > > > > know
> >>> > > > >> > > > > > > > your
> >>> > > > >> > > > > > > > > > > > thoughts.
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > > Thanks,
> >>> > > > >> > > > > > > > > > > > Magesh
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris
> >>> Egerton
> >>> > <
> >>> > > > >> > > > > > > chrise@confluent.io
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > > > > > wrote:
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > >> Hi Magesh,
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> >>> > > > >> > questions/comments
> >>> > > > >> > > > but
> >>> > > > >> > > > > > > > > overall I
> >>> > > > >> > > > > > > > > > > >> like
> >>> > > > >> > > > > > > > > > > >> the direction it's headed in and hope
> to
> >>> see
> >>> > it
> >>> > > > >> > included
> >>> > > > >> > > > in
> >>> > > > >> > > > > > the
> >>> > > > >> > > > > > > > > > Connect
> >>> > > > >> > > > > > > > > > > >> framework soon.
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >> 1. With the proposed "consumer.",
> >>> > "producer.",
> >>> > > > and
> >>> > > > >> > > > "admin."
> >>> > > > >> > > > > > > > > prefixes,
> >>> > > > >> > > > > > > > > > > how
> >>> > > > >> > > > > > > > > > > >> will this interact with connectors such
> >>> as
> >>> > the
> >>> > > > >> > upcoming
> >>> > > > >> > > > > Mirror
> >>> > > > >> > > > > > > > Maker
> >>> > > > >> > > > > > > > > > 2.0
> >>> > > > >> > > > > > > > > > > >> (KIP-382) that already support
> properties
> >>> > with
> >>> > > > >> those
> >>> > > > >> > > > > prefixes?
> >>> > > > >> > > > > > > > Would
> >>> > > > >> > > > > > > > > > it
> >>> > > > >> > > > > > > > > > > be
> >>> > > > >> > > > > > > > > > > >> possible for a user to configure MM2
> with
> >>> > those
> >>> > > > >> > > properties
> >>> > > > >> > > > > > > without
> >>> > > > >> > > > > > > > > > them
> >>> > > > >> > > > > > > > > > > >> being interpreted as Connect client
> >>> > overrides,
> >>> > > > >> without
> >>> > > > >> > > > > > isolating
> >>> > > > >> > > > > > > > MM2
> >>> > > > >> > > > > > > > > > > onto
> >>> > > > >> > > > > > > > > > > >> its own cluster and using the
> >>> > > > >> > > > > > IgnoreConnectorClientConfigPolicy
> >>> > > > >> > > > > > > > > > policy?
> >>> > > > >> > > > > > > > > > > >> 2. Is the
> >>> IgnoreConnectorClientConfigPolicy
> >>> > > class
> >>> > > > >> > > > necessary?
> >>> > > > >> > > > > > The
> >>> > > > >> > > > > > > > > > default
> >>> > > > >> > > > > > > > > > > >> for the connector.client.config.policy
> >>> > property
> >>> > > > >> could
> >>> > > > >> > > > simply
> >>> > > > >> > > > > > be
> >>> > > > >> > > > > > > > null
> >>> > > > >> > > > > > > > > > > >> instead of a new policy that, as far as
> >>> I can
> >>> > > > tell,
> >>> > > > >> > > isn't
> >>> > > > >> > > > an
> >>> > > > >> > > > > > > > actual
> >>> > > > >> > > > > > > > > > > policy
> >>> > > > >> > > > > > > > > > > >> in that its validate(...) method is
> never
> >>> > > invoked
> >>> > > > >> and
> >>> > > > >> > > > > instead
> >>> > > > >> > > > > > > > > > > represents a
> >>> > > > >> > > > > > > > > > > >> special case to the Connect framework
> >>> that
> >>> > says
> >>> > > > >> "Drop
> >>> > > > >> > > all
> >>> > > > >> > > > > > > > overrides
> >>> > > > >> > > > > > > > > > and
> >>> > > > >> > > > > > > > > > > >> never use me".
> >>> > > > >> > > > > > > > > > > >> 3. The
> >>> PrincipalConnectorClientConfigPolicy
> >>> > > seems
> >>> > > > >> > like a
> >>> > > > >> > > > > > > specific
> >>> > > > >> > > > > > > > > > > instance
> >>> > > > >> > > > > > > > > > > >> of a more general use case: allow
> >>> exactly a
> >>> > > small
> >>> > > > >> set
> >>> > > > >> > of
> >>> > > > >> > > > > > > overrides
> >>> > > > >> > > > > > > > > and
> >>> > > > >> > > > > > > > > > > no
> >>> > > > >> > > > > > > > > > > >> others. Why not generalize here and
> >>> create a
> >>> > > > policy
> >>> > > > >> > that
> >>> > > > >> > > > > > > accepts a
> >>> > > > >> > > > > > > > > > list
> >>> > > > >> > > > > > > > > > > of
> >>> > > > >> > > > > > > > > > > >> allowed overrides during configuration?
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >> Thanks again for the KIP.
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >> Cheers,
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >> Chris
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> >>> > > > Nandakumar <
> >>> > > > >> > > > > > > > > > mageshn@confluent.io
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > > >> wrote:
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >> > Hi all,
> >>> > > > >> > > > > > > > > > > >> >
> >>> > > > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector
> Client
> >>> > Config
> >>> > > > >> > Override
> >>> > > > >> > > > > > > Policy",
> >>> > > > >> > > > > > > > > > which
> >>> > > > >> > > > > > > > > > > >> > allows users to override the
> connector
> >>> > client
> >>> > > > >> > > > > configurations
> >>> > > > >> > > > > > > > based
> >>> > > > >> > > > > > > > > > on
> >>> > > > >> > > > > > > > > > > a
> >>> > > > >> > > > > > > > > > > >> > policy defined by the administrator.
> >>> > > > >> > > > > > > > > > > >> >
> >>> > > > >> > > > > > > > > > > >> > The KIP can be found at
> >>> > > > >> > > > > > > > > > > >> >
> >>> > > > >> > > > > > > > > > > >> >
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > >
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > >
> >>> > > > >> > > > > >
> >>> > > > >> > > > >
> >>> > > > >> > > >
> >>> > > > >> > >
> >>> > > > >> >
> >>> > > > >>
> >>> > > >
> >>> > >
> >>> >
> >>>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> >>> > > > >> > > > > > > > > > > >> > .
> >>> > > > >> > > > > > > > > > > >> >
> >>> > > > >> > > > > > > > > > > >> > Looking forward for the discussion on
> >>> the
> >>> > KIP
> >>> > > > and
> >>> > > > >> > all
> >>> > > > >> > > of
> >>> > > > >> > > > > > your
> >>> > > > >> > > > > > > > > > > thoughts &
> >>> > > > >> > > > > > > > > > > >> > feedback on this enhancement to
> >>> Connect.
> >>> > > > >> > > > > > > > > > > >> >
> >>> > > > >> > > > > > > > > > > >> > Thanks,
> >>> > > > >> > > > > > > > > > > >> > Magesh
> >>> > > > >> > > > > > > > > > > >> >
> >>> > > > >> > > > > > > > > > > >>
> >>> > > > >> > > > > > > > > > > >
> >>> > > > >> > > > > > > > > > >
> >>> > > > >> > > > > > > > > >
> >>> > > > >> > > > > > > > >
> >>> > > > >> > > > > > > >
> >>> > > > >> > > > > > >
> >>> > > > >> > > > > >
> >>> > > > >> > > > >
> >>> > > > >> > > >
> >>> > > > >> > >
> >>> > > > >> >
> >>> > > > >>
> >>> > > > >
> >>> > > >
> >>> > >
> >>> >
> >>>
> >>
>

[VOTE] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
Hi All,

I would like to start a vote on
https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy

The discussion thread can be found here
<https://www.mail-archive.com/dev@kafka.apache.org/msg97124.html>.

Thanks,
Magesh

On Tue, May 7, 2019 at 9:35 AM Magesh Nandakumar <ma...@confluent.io>
wrote:

> I have addressed all the outstanding discussion points and I believe we
> have consensus on the design. Thanks, everyone for the feedback. I will
> start a VOTE thread on this KIP.
>
> On Mon, May 6, 2019 at 10:13 PM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
>> Randall,
>>
>> Thanks a lot for the suggestions. I have incorporated the comments in the
>> KIP.
>>
>> Thanks,
>> Magesh
>>
>> On Mon, May 6, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:
>>
>>> Thanks, Magesh. I do have a few pretty minor suggestions.
>>>
>>> 1) Define a bit more clearly in the "Proposed Changes" whether the
>>> configs
>>> passed to the validate method via the ConnectorClientConfigRequest object
>>> have or do not have the prefixes.
>>> 2) Specify more clearly in (or around) the table which is the default
>>> policy. Currently the Ignore policy "Behavior" just mentions that it's
>>> the
>>> current behavior, but I think it would help that it is described as the
>>> default for the property.
>>>
>>> Otherwise, this looks good to me.
>>>
>>> Best regards,
>>>
>>> Randall
>>>
>>> On Mon, May 6, 2019 at 8:12 PM Magesh Nandakumar <ma...@confluent.io>
>>> wrote:
>>>
>>> > Konstantine,
>>> >
>>> > Thanks a lot for your feedback on the KIP. I have incorporated the
>>> feedback
>>> > using generics for Class. I have also updated the KIP to handle the
>>> default
>>> > value per Randall's suggestion. Let me know if you have any questions.
>>> >
>>> > Thanks,
>>> > Magesh
>>> >
>>> >
>>> > On Mon, May 6, 2019 at 1:58 PM Konstantine Karantasis <
>>> > konstantine@confluent.io> wrote:
>>> >
>>> > > Thanks for the KIP Magesh, it's quite useful towards the goals for
>>> more
>>> > > general multi-tenancy in Connect.
>>> > >
>>> > > Couple of comments from me too:
>>> > >
>>> > > I think the fact that the default policy is 'null' (no
>>> implementation)
>>> > > should be mentioned on the table next to the available
>>> implementations.
>>> > > Currently the KIP says: 'In addition to the default implementation,
>>> ..."
>>> > > but this is not very accurate because there is no concrete default
>>> > > implementation. Just special handling of 'null' in
>>> > > 'connector.client.config.policy'
>>> > >
>>> > > Regarding passing the overrides to the connector 'configure' method,
>>> I
>>> > feel
>>> > > it wouldn't hurt to pass them, but I also agree that leaving this
>>> out at
>>> > > the moment is the safest option.
>>> > >
>>> > > Since the interfaces and classes are listed in the KIP, I'd like to
>>> note
>>> > > that Class is used as a raw type in field and return value
>>> declarations.
>>> > We
>>> > > should use the generic type instead.
>>> > >
>>> > > Thanks for this improvement proposal!
>>> > > Konstantine
>>> > >
>>> > > On Mon, May 6, 2019 at 11:11 AM Magesh Nandakumar <
>>> mageshn@confluent.io>
>>> > > wrote:
>>> > >
>>> > > > Randall,
>>> > > >
>>> > > > I was wondering if you had any thoughts on the above alternatives
>>> to
>>> > deal
>>> > > > with a default policy.  If it's possible, I would like to finalize
>>> the
>>> > > > discussions and start a vote.
>>> > > > Let me know your thoughts.
>>> > > >
>>> > > > Thanks,
>>> > > > Magesh
>>> > > >
>>> > > > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <
>>> > mageshn@confluent.io>
>>> > > > wrote:
>>> > > >
>>> > > > > Randall,
>>> > > > >
>>> > > > > The approach to return the to override configs could possibly
>>> make it
>>> > > > > cumbersome to implement a custom policy. This is a new
>>> configuration
>>> > > and
>>> > > > if
>>> > > > > you don't explicitly set it the existing behavior remains as-is.
>>> Like
>>> > > > > Chris, I also preferred this approach for the sake of
>>> simplicity.  If
>>> > > not
>>> > > > > for the default `null` I would prefer to fall back to using
>>> `Ignore`
>>> > > > which
>>> > > > > is a misnomer to the interface spec but still gets the job done
>>> via
>>> > > > > instanceOf checks. The other options I could think of are as
>>> below:-
>>> > > > >
>>> > > > >    - have an enforcePolicy() method in the interface which by
>>> default
>>> > > > >    returns true and the Ignore implementation could return false
>>> > > > >    - introduce another worker config
>>> allow.connector.config.overrides
>>> > > > >    with a default value of false and the default policy can be
>>> None
>>> > > > >
>>> > > > > Let me know what you think.
>>> > > > >
>>> > > > > Thanks
>>> > > > > Magesh
>>> > > > >
>>> > > > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
>>> > > wrote:
>>> > > > >
>>> > > > >> Thanks, Chris. I still think it's strange to have a non-policy,
>>> > since
>>> > > > >> there's now special behavior for when the policy is not
>>> specified.
>>> > > > >>
>>> > > > >> Perhaps the inability for a policy implementation to represent
>>> the
>>> > > > >> existing
>>> > > > >> behavior suggests that the policy interface isn't quite right.
>>> Could
>>> > > the
>>> > > > >> policy's "validate" method take the overrides that were
>>> supplied and
>>> > > > >> return
>>> > > > >> the overrides that should be passed to the connector, yet still
>>> > > throwing
>>> > > > >> an
>>> > > > >> exception if any supplied overrides are not allowed. Then the
>>> > > different
>>> > > > >> policy implementations might be:
>>> > > > >>
>>> > > > >>    - Ignore (default) - returns all supplied override properties
>>> > > > >>    - None - throws exception if any override properties are
>>> > supplied;
>>> > > > >>    always returns empty map if no overrides are provided
>>> > > > >>    - Principal - throws exception if other override properties
>>> are
>>> > > > >>    provided, but returns an empty map (since no properties
>>> should be
>>> > > > >> passed to
>>> > > > >>    the connector)
>>> > > > >>    - All - returns all provided override properties
>>> > > > >>
>>> > > > >> All override properties defined on the connector configuration
>>> would
>>> > > be
>>> > > > >> passed to the policy for validation, and assuming there's no
>>> error
>>> > all
>>> > > > of
>>> > > > >> these overrides would be used in the producer/consumer/admin
>>> client.
>>> > > The
>>> > > > >> result of the policy call, however, is used to determine which
>>> of
>>> > > these
>>> > > > >> overrides are passed to the connector.
>>> > > > >>
>>> > > > >> This approach means that all behaviors can be implemented
>>> through a
>>> > > > policy
>>> > > > >> class, including the defaults. It also gives a bit more control
>>> to
>>> > > > custom
>>> > > > >> policies, should that be warranted. For example, validating the
>>> > > provided
>>> > > > >> client overrides but passing all such override properties to the
>>> > > > >> connector,
>>> > > > >> which as I stated earlier is something I think connectors likely
>>> > don't
>>> > > > >> look
>>> > > > >> for.
>>> > > > >>
>>> > > > >> Thoughts?
>>> > > > >>
>>> > > > >> Randall
>>> > > > >>
>>> > > > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <
>>> chrise@confluent.io>
>>> > > > >> wrote:
>>> > > > >>
>>> > > > >> > Randall,
>>> > > > >> >
>>> > > > >> > The special behavior for null was my suggestion. There is no
>>> > > > >> implementation
>>> > > > >> > of the proposed interface that causes client overrides to be
>>> > > ignored,
>>> > > > so
>>> > > > >> > the original idea was to have a special implementation that
>>> would
>>> > be
>>> > > > >> > checked for by the Connect framework (probably via the
>>> instanceof
>>> > > > >> operator)
>>> > > > >> > and, if present, cause all would-be overrides to be ignored.
>>> > > > >> >
>>> > > > >> > I thought this may be confusing to people who may see that
>>> > behavior
>>> > > > and
>>> > > > >> > wonder how to recreate it themselves, so I suggested leaving
>>> that
>>> > > > policy
>>> > > > >> > out and replace it with a check to see if a policy was
>>> specified
>>> > at
>>> > > > all.
>>> > > > >> >
>>> > > > >> > Would be interested in your thoughts on this, especially if
>>> > there's
>>> > > an
>>> > > > >> > alternative that hasn't been proposed yet.
>>> > > > >> >
>>> > > > >> > Cheers,
>>> > > > >> >
>>> > > > >> > Chris
>>> > > > >> >
>>> > > > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com>
>>> > wrote:
>>> > > > >> >
>>> > > > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
>>> > > > >> mageshn@confluent.io>
>>> > > > >> > > wrote:
>>> > > > >> > >
>>> > > > >> > > > Randall,
>>> > > > >> > > >
>>> > > > >> > > > Thanks a lot for your feedback.
>>> > > > >> > > >
>>> > > > >> > > > You bring up an interesting point regarding the overrides
>>> > being
>>> > > > >> > available
>>> > > > >> > > > to the connectors. Today everything that is specified in
>>> the
>>> > > > config
>>> > > > >> > while
>>> > > > >> > > > creating is available for the connector. But this is a
>>> > specific
>>> > > > case
>>> > > > >> > and
>>> > > > >> > > we
>>> > > > >> > > > could do either of the following
>>> > > > >> > > >
>>> > > > >> > > >
>>> > > > >> > > >    - don't pass any configs with these prefixes to the
>>> > > > >> ConnectorConfig
>>> > > > >> > > >    instance that's passed in the startConnector
>>> > > > >> > > >    - allow policies as to whether the configurations with
>>> the
>>> > > > >> prefixes
>>> > > > >> > > >    should be made available to the connector or not.
>>> Should
>>> > this
>>> > > > >> also
>>> > > > >> > > > define a
>>> > > > >> > > >    list of configurations?
>>> > > > >> > > >
>>> > > > >> > > > I personally prefer not passing the configs to Connector
>>> since
>>> > > > >> that's
>>> > > > >> > > > simple, straight forward and don't see a reason for the
>>> > > connector
>>> > > > to
>>> > > > >> > > access
>>> > > > >> > > > those.
>>> > > > >> > > >
>>> > > > >> > >
>>> > > > >> > > I agree that these override properties should be
>>> effectively new
>>> > > > >> > > properties, in which case I'd also prefer that they be
>>> removed
>>> > > from
>>> > > > >> the
>>> > > > >> > > configuration before it is passed to the connector. Yes, it
>>> is
>>> > > > >> *possible*
>>> > > > >> > > that an existing connector happened to use connector config
>>> > > > properties
>>> > > > >> > with
>>> > > > >> > > these prefixes, but it's seems pretty unlikely.
>>> > > > >> > >
>>> > > > >> > > I'd love to hear whether other people agree.
>>> > > > >> > >
>>> > > > >> > >
>>> > > > >> > > >
>>> > > > >> > > > For the second point,  None - doesn't allow overrides and
>>> the
>>> > > > >> default
>>> > > > >> > > > policy is null. We preserve backward compatibility when no
>>> > > policy
>>> > > > is
>>> > > > >> > > > configured. Let me know if that's not clear in the KIP.
>>> > > > >> > > >
>>> > > > >> > >
>>> > > > >> > > Why not have a default policy (rather than null) that
>>> implements
>>> > > the
>>> > > > >> > > backward-compatible behavior? It seems strange to have null
>>> be
>>> > the
>>> > > > >> > default
>>> > > > >> > > and for non-policy to allow anything.
>>> > > > >> > >
>>> > > > >> > >
>>> > > > >> > > >
>>> > > > >> > > > Thanks,
>>> > > > >> > > > Magesh
>>> > > > >> > > >
>>> > > > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <
>>> > rhauch@gmail.com
>>> > > >
>>> > > > >> > wrote:
>>> > > > >> > > >
>>> > > > >> > > > > Per the proposal, a connector configuration can define
>>> one
>>> > or
>>> > > > more
>>> > > > >> > > > > properties that begin with any of the three prefixes:
>>> > > > >> > > > "producer.override.",
>>> > > > >> > > > > "consumer.override.", and "admin.override.". The
>>> proposal
>>> > > > states:
>>> > > > >> > > > >
>>> > > > >> > > > > Since the users can specify any of these policies, the
>>> > > > connectors
>>> > > > >> > > itself
>>> > > > >> > > > > should not rely on these configurations to be
>>> available. The
>>> > > > >> > overrides
>>> > > > >> > > > are
>>> > > > >> > > > > to be used purely from an operational perspective.
>>> > > > >> > > > >
>>> > > > >> > > > >
>>> > > > >> > > > > Does this mean that any such properties are visible to
>>> > > > >> connectors, or
>>> > > > >> > > > will
>>> > > > >> > > > > they be hidden to connectors? Currently no connectors
>>> have
>>> > > > access
>>> > > > >> to
>>> > > > >> > > such
>>> > > > >> > > > > client properties, and users are unlike to just put them
>>> > into
>>> > > a
>>> > > > >> > > connector
>>> > > > >> > > > > configuration unnecessarily. A connector implementation
>>> > could
>>> > > > have
>>> > > > >> > > > defined
>>> > > > >> > > > > such properties as normal connector-specific
>>> properties, in
>>> > > > which
>>> > > > >> > case
>>> > > > >> > > > they
>>> > > > >> > > > > are required, but is that likely given the log
>>> prefixes? One
>>> > > > >> concern
>>> > > > >> > > > that I
>>> > > > >> > > > > have is that this might allow connector implementations
>>> > start
>>> > > > >> > > attempting
>>> > > > >> > > > to
>>> > > > >> > > > > circumvent the Connect API if these properties are
>>> included.
>>> > > > >> > > > >
>>> > > > >> > > > > Second, does the None policy allow but ignore these
>>> > additional
>>> > > > >> > > properties
>>> > > > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the
>>> None
>>> > > > policy
>>> > > > >> > fail
>>> > > > >> > > > if
>>> > > > >> > > > > any client overrides are specified? The former seems
>>> more in
>>> > > > line
>>> > > > >> > with
>>> > > > >> > > > the
>>> > > > >> > > > > current behavior, whereas the "disallows" policy seems
>>> > useful
>>> > > > but
>>> > > > >> not
>>> > > > >> > > > > exactly backward compatible. Should we also offer a
>>> > "Disallow"
>>> > > > >> > policy?
>>> > > > >> > > In
>>> > > > >> > > > > fact, should the policies be named "Ignore" (default),
>>> > > > "Disallow",
>>> > > > >> > > > > "Prinicipal", and "All"?
>>> > > > >> > > > >
>>> > > > >> > > > > Otherwise, I like the idea of this. There have been
>>> several
>>> > > > >> requests
>>> > > > >> > > over
>>> > > > >> > > > > the past year or two for adding subsets of this
>>> > functionality.
>>> > > > >> Might
>>> > > > >> > be
>>> > > > >> > > > > good to find and list all of the related KAFKA issues.
>>> > > > >> > > > >
>>> > > > >> > > > > Randall
>>> > > > >> > > > >
>>> > > > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
>>> > > > >> chrise@confluent.io>
>>> > > > >> > > > wrote:
>>> > > > >> > > > >
>>> > > > >> > > > > > Hi Magesh,
>>> > > > >> > > > > >
>>> > > > >> > > > > > Changes look good to me! Excited to see this happen,
>>> hope
>>> > > the
>>> > > > >> KIP
>>> > > > >> > > > passes
>>> > > > >> > > > > :)
>>> > > > >> > > > > >
>>> > > > >> > > > > > Cheers,
>>> > > > >> > > > > >
>>> > > > >> > > > > > Chris
>>> > > > >> > > > > >
>>> > > > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
>>> > > > >> > > > mageshn@confluent.io>
>>> > > > >> > > > > > wrote:
>>> > > > >> > > > > >
>>> > > > >> > > > > > > Hi Chris,
>>> > > > >> > > > > > >
>>> > > > >> > > > > > > I have updated the KIP to reflect the changes that
>>> we
>>> > > > >> discussed
>>> > > > >> > for
>>> > > > >> > > > the
>>> > > > >> > > > > > > prefix. Thanks for all your inputs.
>>> > > > >> > > > > > >
>>> > > > >> > > > > > > Thanks,
>>> > > > >> > > > > > > Magesh
>>> > > > >> > > > > > >
>>> > > > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
>>> > > > >> > chrise@confluent.io
>>> > > > >> > > >
>>> > > > >> > > > > > wrote:
>>> > > > >> > > > > > >
>>> > > > >> > > > > > > > Hi Magesh,
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also
>>> don't
>>> > > > have a
>>> > > > >> > > strong
>>> > > > >> > > > > > > opinion
>>> > > > >> > > > > > > > between `connector.` and `.override`, but I have a
>>> > > slight
>>> > > > >> > > > inclination
>>> > > > >> > > > > > > > toward `.override` since `connector.` feels a
>>> little
>>> > > > >> redundant
>>> > > > >> > > > given
>>> > > > >> > > > > > that
>>> > > > >> > > > > > > > the whole configuration is for the connector and
>>> the
>>> > use
>>> > > > of
>>> > > > >> > > > > "override"
>>> > > > >> > > > > > > may
>>> > > > >> > > > > > > > shed a little light on how the properties for
>>> these
>>> > > > clients
>>> > > > >> are
>>> > > > >> > > > > > computed
>>> > > > >> > > > > > > > and help make the learning curve a little gentler
>>> on
>>> > new
>>> > > > >> devs
>>> > > > >> > and
>>> > > > >> > > > > > users.
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > > > Regardless, I think the larger issue of conflicts
>>> with
>>> > > > >> existing
>>> > > > >> > > > > > > properties
>>> > > > >> > > > > > > > (both in MM2 and potentially other connectors) has
>>> > been
>>> > > > >> > > > > satisfactorily
>>> > > > >> > > > > > > > addressed, so I'm happy.
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > > > Cheers,
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > > > Chris
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh
>>> Nandakumar <
>>> > > > >> > > > > > mageshn@confluent.io
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > > > wrote:
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > > > > HI Chrise,
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > > > You are right about the "admin." prefix creating
>>> > > > >> conflicts.
>>> > > > >> > > Here
>>> > > > >> > > > > are
>>> > > > >> > > > > > > few
>>> > > > >> > > > > > > > > options that I can think of
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used
>>> only
>>> > for
>>> > > > >> DLQ.
>>> > > > >> > But
>>> > > > >> > > > > this
>>> > > > >> > > > > > > > might
>>> > > > >> > > > > > > > > not really be the case in the future. So, we
>>> should
>>> > > > >> possibly
>>> > > > >> > > drop
>>> > > > >> > > > > > this
>>> > > > >> > > > > > > > idea
>>> > > > >> > > > > > > > > :)
>>> > > > >> > > > > > > > > 2.  Use `connector.producer`,
>>> `connector.consumer`
>>> > and
>>> > > > >> > > > > > > `connector.admin`
>>> > > > >> > > > > > > > -
>>> > > > >> > > > > > > > > provides better context that its connector
>>> specific
>>> > > > >> property
>>> > > > >> > > > > > > > > 3.  Use `producer.override`,
>>> '`consumer.override`
>>> > and
>>> > > > >> > > > > > `admin.override`
>>> > > > >> > > > > > > -
>>> > > > >> > > > > > > > > provides better clarity that these are
>>> overrides.
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > > > I don't have a strong opinion in choosing
>>> between #2
>>> > > and
>>> > > > >> #3.
>>> > > > >> > > Let
>>> > > > >> > > > me
>>> > > > >> > > > > > > > > know what you think.
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > > > Thanks
>>> > > > >> > > > > > > > > Magesh
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
>>> > > > >> > > > > chrise@confluent.io>
>>> > > > >> > > > > > > > > wrote:
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > > > > Hi Magesh,
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > > > Next round :)
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > > > 1. It looks like MM2 will also support
>>> "admin."
>>> > > > >> properties
>>> > > > >> > > that
>>> > > > >> > > > > > > affect
>>> > > > >> > > > > > > > > > AdminClients it creates and uses, which IIUC
>>> is
>>> > the
>>> > > > same
>>> > > > >> > > prefix
>>> > > > >> > > > > > name
>>> > > > >> > > > > > > to
>>> > > > >> > > > > > > > > be
>>> > > > >> > > > > > > > > > used for managing the DLQ for sink connectors
>>> in
>>> > > this
>>> > > > >> KIP.
>>> > > > >> > > > > Doesn't
>>> > > > >> > > > > > > that
>>> > > > >> > > > > > > > > > still leave room for conflict? I'm imagining a
>>> > > > scenario
>>> > > > >> > like
>>> > > > >> > > > > this:
>>> > > > >> > > > > > a
>>> > > > >> > > > > > > > > > Connect worker is configured to use the
>>> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone
>>> > tries
>>> > > to
>>> > > > >> > start
>>> > > > >> > > an
>>> > > > >> > > > > > > > instance
>>> > > > >> > > > > > > > > of
>>> > > > >> > > > > > > > > > an MM2 sink with "admin." properties beyond
>>> just
>>> > > > >> > > > > > > > > "admin.sasl.jaas.config",
>>> > > > >> > > > > > > > > > and gets rejected because those properties are
>>> > then
>>> > > > >> > > interpreted
>>> > > > >> > > > > by
>>> > > > >> > > > > > > the
>>> > > > >> > > > > > > > > > worker as overrides for the AdminClient it
>>> uses to
>>> > > > >> manage
>>> > > > >> > the
>>> > > > >> > > > > DLQ.
>>> > > > >> > > > > > > > > > 2. (LGTM)
>>> > > > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody
>>> else
>>> > > > >> > identifies a
>>> > > > >> > > > > > common
>>> > > > >> > > > > > > > use
>>> > > > >> > > > > > > > > > case that would involve a similar client
>>> config
>>> > > policy
>>> > > > >> > > > > > implementation
>>> > > > >> > > > > > > > > that
>>> > > > >> > > > > > > > > > would be limited to a small set of whitelisted
>>> > > > configs.
>>> > > > >> For
>>> > > > >> > > now
>>> > > > >> > > > > > > keeping
>>> > > > >> > > > > > > > > the
>>> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds
>>> fine
>>> > to
>>> > > > me.
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > > > Cheers,
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > > > Chris
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh
>>> > Nandakumar <
>>> > > > >> > > > > > > > mageshn@confluent.io
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > > > wrote:
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > > > > Hi all,
>>> > > > >> > > > > > > > > > >
>>> > > > >> > > > > > > > > > > I also have a draft implementation of the
>>> KIP
>>> > > > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624.
>>> I
>>> > > would
>>> > > > >> still
>>> > > > >> > > > need
>>> > > > >> > > > > to
>>> > > > >> > > > > > > > > include
>>> > > > >> > > > > > > > > > > more tests and docs but I thought it would
>>> be
>>> > > useful
>>> > > > >> to
>>> > > > >> > > have
>>> > > > >> > > > > this
>>> > > > >> > > > > > > for
>>> > > > >> > > > > > > > > the
>>> > > > >> > > > > > > > > > > KIP discussion. Looking forward to all of
>>> your
>>> > > > >> valuable
>>> > > > >> > > > > feedback.
>>> > > > >> > > > > > > > > > >
>>> > > > >> > > > > > > > > > > Thanks
>>> > > > >> > > > > > > > > > > Magesh
>>> > > > >> > > > > > > > > > >
>>> > > > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
>>> > > Nandakumar <
>>> > > > >> > > > > > > > > mageshn@confluent.io
>>> > > > >> > > > > > > > > > >
>>> > > > >> > > > > > > > > > > wrote:
>>> > > > >> > > > > > > > > > >
>>> > > > >> > > > > > > > > > > > Chrise,
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > > > Thanks a lot for your feedback. I will
>>> address
>>> > > > them
>>> > > > >> in
>>> > > > >> > > > order
>>> > > > >> > > > > of
>>> > > > >> > > > > > > > your
>>> > > > >> > > > > > > > > > > > questions/comments.
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > > > 1. Thanks for bringing this to my
>>> attention
>>> > > about
>>> > > > >> > > KIP-382.
>>> > > > >> > > > I
>>> > > > >> > > > > > had
>>> > > > >> > > > > > > a
>>> > > > >> > > > > > > > > > closer
>>> > > > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
>>> > > > `consumer.`
>>> > > > >> > > prefix
>>> > > > >> > > > > for
>>> > > > >> > > > > > > > > > > SourceConnector
>>> > > > >> > > > > > > > > > > > and producer. prefix for SinkConnector
>>> since
>>> > > those
>>> > > > >> are
>>> > > > >> > > > > > additional
>>> > > > >> > > > > > > > > > > > connector properties to help resolve the
>>> Kafka
>>> > > > >> cluster
>>> > > > >> > > > other
>>> > > > >> > > > > > than
>>> > > > >> > > > > > > > the
>>> > > > >> > > > > > > > > > one
>>> > > > >> > > > > > > > > > > > Connect framework knows about. Whereas,
>>> the
>>> > > > >> proposal in
>>> > > > >> > > > > KIP-458
>>> > > > >> > > > > > > > > applies
>>> > > > >> > > > > > > > > > > > producer policies for SinkConnectors and
>>> > > consumer
>>> > > > >> > > policies
>>> > > > >> > > > > > > > > > > > SourceConnectors.  So, from what I
>>> understand
>>> > > this
>>> > > > >> new
>>> > > > >> > > > policy
>>> > > > >> > > > > > > > should
>>> > > > >> > > > > > > > > > work
>>> > > > >> > > > > > > > > > > > without any issues even for Mirror Maker
>>> 2.0.
>>> > > > >> > > > > > > > > > > > 2. I have updated the KIP to use a default
>>> > value
>>> > > > of
>>> > > > >> > null
>>> > > > >> > > > and
>>> > > > >> > > > > > use
>>> > > > >> > > > > > > > that
>>> > > > >> > > > > > > > > > to
>>> > > > >> > > > > > > > > > > > determine if we need to ignore overrides.
>>> > > > >> > > > > > > > > > > > 3. I would still prefer to keep the
>>> special
>>> > > > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
>>> > > > >> > > > > > > > > > > > since that is one of the most common use
>>> cases
>>> > > one
>>> > > > >> > would
>>> > > > >> > > > > choose
>>> > > > >> > > > > > > to
>>> > > > >> > > > > > > > > use
>>> > > > >> > > > > > > > > > > this
>>> > > > >> > > > > > > > > > > > feature. If we make it a general case,
>>> that
>>> > > would
>>> > > > >> > involve
>>> > > > >> > > > > users
>>> > > > >> > > > > > > > > > requiring
>>> > > > >> > > > > > > > > > > > to add additional configuration and they
>>> might
>>> > > > >> require
>>> > > > >> > > well
>>> > > > >> > > > > > more
>>> > > > >> > > > > > > > than
>>> > > > >> > > > > > > > > > > just
>>> > > > >> > > > > > > > > > > > the list of configs but might also want
>>> some
>>> > > > >> > restriction
>>> > > > >> > > on
>>> > > > >> > > > > > > values.
>>> > > > >> > > > > > > > > If
>>> > > > >> > > > > > > > > > > the
>>> > > > >> > > > > > > > > > > > concern is about users wanting principal
>>> and
>>> > > also
>>> > > > >> other
>>> > > > >> > > > > > configs,
>>> > > > >> > > > > > > it
>>> > > > >> > > > > > > > > > would
>>> > > > >> > > > > > > > > > > > still be possible by means of a custom
>>> > > > >> implementation.
>>> > > > >> > As
>>> > > > >> > > > > is, I
>>> > > > >> > > > > > > > would
>>> > > > >> > > > > > > > > > > > prefer to keep the proposal to be the
>>> same for
>>> > > > this.
>>> > > > >> > Let
>>> > > > >> > > me
>>> > > > >> > > > > > know
>>> > > > >> > > > > > > > your
>>> > > > >> > > > > > > > > > > > thoughts.
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > > > Thanks,
>>> > > > >> > > > > > > > > > > > Magesh
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris
>>> Egerton
>>> > <
>>> > > > >> > > > > > > chrise@confluent.io
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > > > > > wrote:
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > > >> Hi Magesh,
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
>>> > > > >> > questions/comments
>>> > > > >> > > > but
>>> > > > >> > > > > > > > > overall I
>>> > > > >> > > > > > > > > > > >> like
>>> > > > >> > > > > > > > > > > >> the direction it's headed in and hope to
>>> see
>>> > it
>>> > > > >> > included
>>> > > > >> > > > in
>>> > > > >> > > > > > the
>>> > > > >> > > > > > > > > > Connect
>>> > > > >> > > > > > > > > > > >> framework soon.
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >> 1. With the proposed "consumer.",
>>> > "producer.",
>>> > > > and
>>> > > > >> > > > "admin."
>>> > > > >> > > > > > > > > prefixes,
>>> > > > >> > > > > > > > > > > how
>>> > > > >> > > > > > > > > > > >> will this interact with connectors such
>>> as
>>> > the
>>> > > > >> > upcoming
>>> > > > >> > > > > Mirror
>>> > > > >> > > > > > > > Maker
>>> > > > >> > > > > > > > > > 2.0
>>> > > > >> > > > > > > > > > > >> (KIP-382) that already support properties
>>> > with
>>> > > > >> those
>>> > > > >> > > > > prefixes?
>>> > > > >> > > > > > > > Would
>>> > > > >> > > > > > > > > > it
>>> > > > >> > > > > > > > > > > be
>>> > > > >> > > > > > > > > > > >> possible for a user to configure MM2 with
>>> > those
>>> > > > >> > > properties
>>> > > > >> > > > > > > without
>>> > > > >> > > > > > > > > > them
>>> > > > >> > > > > > > > > > > >> being interpreted as Connect client
>>> > overrides,
>>> > > > >> without
>>> > > > >> > > > > > isolating
>>> > > > >> > > > > > > > MM2
>>> > > > >> > > > > > > > > > > onto
>>> > > > >> > > > > > > > > > > >> its own cluster and using the
>>> > > > >> > > > > > IgnoreConnectorClientConfigPolicy
>>> > > > >> > > > > > > > > > policy?
>>> > > > >> > > > > > > > > > > >> 2. Is the
>>> IgnoreConnectorClientConfigPolicy
>>> > > class
>>> > > > >> > > > necessary?
>>> > > > >> > > > > > The
>>> > > > >> > > > > > > > > > default
>>> > > > >> > > > > > > > > > > >> for the connector.client.config.policy
>>> > property
>>> > > > >> could
>>> > > > >> > > > simply
>>> > > > >> > > > > > be
>>> > > > >> > > > > > > > null
>>> > > > >> > > > > > > > > > > >> instead of a new policy that, as far as
>>> I can
>>> > > > tell,
>>> > > > >> > > isn't
>>> > > > >> > > > an
>>> > > > >> > > > > > > > actual
>>> > > > >> > > > > > > > > > > policy
>>> > > > >> > > > > > > > > > > >> in that its validate(...) method is never
>>> > > invoked
>>> > > > >> and
>>> > > > >> > > > > instead
>>> > > > >> > > > > > > > > > > represents a
>>> > > > >> > > > > > > > > > > >> special case to the Connect framework
>>> that
>>> > says
>>> > > > >> "Drop
>>> > > > >> > > all
>>> > > > >> > > > > > > > overrides
>>> > > > >> > > > > > > > > > and
>>> > > > >> > > > > > > > > > > >> never use me".
>>> > > > >> > > > > > > > > > > >> 3. The
>>> PrincipalConnectorClientConfigPolicy
>>> > > seems
>>> > > > >> > like a
>>> > > > >> > > > > > > specific
>>> > > > >> > > > > > > > > > > instance
>>> > > > >> > > > > > > > > > > >> of a more general use case: allow
>>> exactly a
>>> > > small
>>> > > > >> set
>>> > > > >> > of
>>> > > > >> > > > > > > overrides
>>> > > > >> > > > > > > > > and
>>> > > > >> > > > > > > > > > > no
>>> > > > >> > > > > > > > > > > >> others. Why not generalize here and
>>> create a
>>> > > > policy
>>> > > > >> > that
>>> > > > >> > > > > > > accepts a
>>> > > > >> > > > > > > > > > list
>>> > > > >> > > > > > > > > > > of
>>> > > > >> > > > > > > > > > > >> allowed overrides during configuration?
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >> Thanks again for the KIP.
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >> Cheers,
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >> Chris
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
>>> > > > Nandakumar <
>>> > > > >> > > > > > > > > > mageshn@confluent.io
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > > >> wrote:
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >> > Hi all,
>>> > > > >> > > > > > > > > > > >> >
>>> > > > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client
>>> > Config
>>> > > > >> > Override
>>> > > > >> > > > > > > Policy",
>>> > > > >> > > > > > > > > > which
>>> > > > >> > > > > > > > > > > >> > allows users to override the connector
>>> > client
>>> > > > >> > > > > configurations
>>> > > > >> > > > > > > > based
>>> > > > >> > > > > > > > > > on
>>> > > > >> > > > > > > > > > > a
>>> > > > >> > > > > > > > > > > >> > policy defined by the administrator.
>>> > > > >> > > > > > > > > > > >> >
>>> > > > >> > > > > > > > > > > >> > The KIP can be found at
>>> > > > >> > > > > > > > > > > >> >
>>> > > > >> > > > > > > > > > > >> >
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > >
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > >
>>> > > > >> > > > > >
>>> > > > >> > > > >
>>> > > > >> > > >
>>> > > > >> > >
>>> > > > >> >
>>> > > > >>
>>> > > >
>>> > >
>>> >
>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
>>> > > > >> > > > > > > > > > > >> > .
>>> > > > >> > > > > > > > > > > >> >
>>> > > > >> > > > > > > > > > > >> > Looking forward for the discussion on
>>> the
>>> > KIP
>>> > > > and
>>> > > > >> > all
>>> > > > >> > > of
>>> > > > >> > > > > > your
>>> > > > >> > > > > > > > > > > thoughts &
>>> > > > >> > > > > > > > > > > >> > feedback on this enhancement to
>>> Connect.
>>> > > > >> > > > > > > > > > > >> >
>>> > > > >> > > > > > > > > > > >> > Thanks,
>>> > > > >> > > > > > > > > > > >> > Magesh
>>> > > > >> > > > > > > > > > > >> >
>>> > > > >> > > > > > > > > > > >>
>>> > > > >> > > > > > > > > > > >
>>> > > > >> > > > > > > > > > >
>>> > > > >> > > > > > > > > >
>>> > > > >> > > > > > > > >
>>> > > > >> > > > > > > >
>>> > > > >> > > > > > >
>>> > > > >> > > > > >
>>> > > > >> > > > >
>>> > > > >> > > >
>>> > > > >> > >
>>> > > > >> >
>>> > > > >>
>>> > > > >
>>> > > >
>>> > >
>>> >
>>>
>>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
I have addressed all the outstanding discussion points and I believe we
have consensus on the design. Thanks, everyone for the feedback. I will
start a VOTE thread on this KIP.

On Mon, May 6, 2019 at 10:13 PM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Randall,
>
> Thanks a lot for the suggestions. I have incorporated the comments in the
> KIP.
>
> Thanks,
> Magesh
>
> On Mon, May 6, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:
>
>> Thanks, Magesh. I do have a few pretty minor suggestions.
>>
>> 1) Define a bit more clearly in the "Proposed Changes" whether the configs
>> passed to the validate method via the ConnectorClientConfigRequest object
>> have or do not have the prefixes.
>> 2) Specify more clearly in (or around) the table which is the default
>> policy. Currently the Ignore policy "Behavior" just mentions that it's the
>> current behavior, but I think it would help that it is described as the
>> default for the property.
>>
>> Otherwise, this looks good to me.
>>
>> Best regards,
>>
>> Randall
>>
>> On Mon, May 6, 2019 at 8:12 PM Magesh Nandakumar <ma...@confluent.io>
>> wrote:
>>
>> > Konstantine,
>> >
>> > Thanks a lot for your feedback on the KIP. I have incorporated the
>> feedback
>> > using generics for Class. I have also updated the KIP to handle the
>> default
>> > value per Randall's suggestion. Let me know if you have any questions.
>> >
>> > Thanks,
>> > Magesh
>> >
>> >
>> > On Mon, May 6, 2019 at 1:58 PM Konstantine Karantasis <
>> > konstantine@confluent.io> wrote:
>> >
>> > > Thanks for the KIP Magesh, it's quite useful towards the goals for
>> more
>> > > general multi-tenancy in Connect.
>> > >
>> > > Couple of comments from me too:
>> > >
>> > > I think the fact that the default policy is 'null' (no implementation)
>> > > should be mentioned on the table next to the available
>> implementations.
>> > > Currently the KIP says: 'In addition to the default implementation,
>> ..."
>> > > but this is not very accurate because there is no concrete default
>> > > implementation. Just special handling of 'null' in
>> > > 'connector.client.config.policy'
>> > >
>> > > Regarding passing the overrides to the connector 'configure' method, I
>> > feel
>> > > it wouldn't hurt to pass them, but I also agree that leaving this out
>> at
>> > > the moment is the safest option.
>> > >
>> > > Since the interfaces and classes are listed in the KIP, I'd like to
>> note
>> > > that Class is used as a raw type in field and return value
>> declarations.
>> > We
>> > > should use the generic type instead.
>> > >
>> > > Thanks for this improvement proposal!
>> > > Konstantine
>> > >
>> > > On Mon, May 6, 2019 at 11:11 AM Magesh Nandakumar <
>> mageshn@confluent.io>
>> > > wrote:
>> > >
>> > > > Randall,
>> > > >
>> > > > I was wondering if you had any thoughts on the above alternatives to
>> > deal
>> > > > with a default policy.  If it's possible, I would like to finalize
>> the
>> > > > discussions and start a vote.
>> > > > Let me know your thoughts.
>> > > >
>> > > > Thanks,
>> > > > Magesh
>> > > >
>> > > > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <
>> > mageshn@confluent.io>
>> > > > wrote:
>> > > >
>> > > > > Randall,
>> > > > >
>> > > > > The approach to return the to override configs could possibly
>> make it
>> > > > > cumbersome to implement a custom policy. This is a new
>> configuration
>> > > and
>> > > > if
>> > > > > you don't explicitly set it the existing behavior remains as-is.
>> Like
>> > > > > Chris, I also preferred this approach for the sake of
>> simplicity.  If
>> > > not
>> > > > > for the default `null` I would prefer to fall back to using
>> `Ignore`
>> > > > which
>> > > > > is a misnomer to the interface spec but still gets the job done
>> via
>> > > > > instanceOf checks. The other options I could think of are as
>> below:-
>> > > > >
>> > > > >    - have an enforcePolicy() method in the interface which by
>> default
>> > > > >    returns true and the Ignore implementation could return false
>> > > > >    - introduce another worker config
>> allow.connector.config.overrides
>> > > > >    with a default value of false and the default policy can be
>> None
>> > > > >
>> > > > > Let me know what you think.
>> > > > >
>> > > > > Thanks
>> > > > > Magesh
>> > > > >
>> > > > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
>> > > wrote:
>> > > > >
>> > > > >> Thanks, Chris. I still think it's strange to have a non-policy,
>> > since
>> > > > >> there's now special behavior for when the policy is not
>> specified.
>> > > > >>
>> > > > >> Perhaps the inability for a policy implementation to represent
>> the
>> > > > >> existing
>> > > > >> behavior suggests that the policy interface isn't quite right.
>> Could
>> > > the
>> > > > >> policy's "validate" method take the overrides that were supplied
>> and
>> > > > >> return
>> > > > >> the overrides that should be passed to the connector, yet still
>> > > throwing
>> > > > >> an
>> > > > >> exception if any supplied overrides are not allowed. Then the
>> > > different
>> > > > >> policy implementations might be:
>> > > > >>
>> > > > >>    - Ignore (default) - returns all supplied override properties
>> > > > >>    - None - throws exception if any override properties are
>> > supplied;
>> > > > >>    always returns empty map if no overrides are provided
>> > > > >>    - Principal - throws exception if other override properties
>> are
>> > > > >>    provided, but returns an empty map (since no properties
>> should be
>> > > > >> passed to
>> > > > >>    the connector)
>> > > > >>    - All - returns all provided override properties
>> > > > >>
>> > > > >> All override properties defined on the connector configuration
>> would
>> > > be
>> > > > >> passed to the policy for validation, and assuming there's no
>> error
>> > all
>> > > > of
>> > > > >> these overrides would be used in the producer/consumer/admin
>> client.
>> > > The
>> > > > >> result of the policy call, however, is used to determine which of
>> > > these
>> > > > >> overrides are passed to the connector.
>> > > > >>
>> > > > >> This approach means that all behaviors can be implemented
>> through a
>> > > > policy
>> > > > >> class, including the defaults. It also gives a bit more control
>> to
>> > > > custom
>> > > > >> policies, should that be warranted. For example, validating the
>> > > provided
>> > > > >> client overrides but passing all such override properties to the
>> > > > >> connector,
>> > > > >> which as I stated earlier is something I think connectors likely
>> > don't
>> > > > >> look
>> > > > >> for.
>> > > > >>
>> > > > >> Thoughts?
>> > > > >>
>> > > > >> Randall
>> > > > >>
>> > > > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <
>> chrise@confluent.io>
>> > > > >> wrote:
>> > > > >>
>> > > > >> > Randall,
>> > > > >> >
>> > > > >> > The special behavior for null was my suggestion. There is no
>> > > > >> implementation
>> > > > >> > of the proposed interface that causes client overrides to be
>> > > ignored,
>> > > > so
>> > > > >> > the original idea was to have a special implementation that
>> would
>> > be
>> > > > >> > checked for by the Connect framework (probably via the
>> instanceof
>> > > > >> operator)
>> > > > >> > and, if present, cause all would-be overrides to be ignored.
>> > > > >> >
>> > > > >> > I thought this may be confusing to people who may see that
>> > behavior
>> > > > and
>> > > > >> > wonder how to recreate it themselves, so I suggested leaving
>> that
>> > > > policy
>> > > > >> > out and replace it with a check to see if a policy was
>> specified
>> > at
>> > > > all.
>> > > > >> >
>> > > > >> > Would be interested in your thoughts on this, especially if
>> > there's
>> > > an
>> > > > >> > alternative that hasn't been proposed yet.
>> > > > >> >
>> > > > >> > Cheers,
>> > > > >> >
>> > > > >> > Chris
>> > > > >> >
>> > > > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com>
>> > wrote:
>> > > > >> >
>> > > > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
>> > > > >> mageshn@confluent.io>
>> > > > >> > > wrote:
>> > > > >> > >
>> > > > >> > > > Randall,
>> > > > >> > > >
>> > > > >> > > > Thanks a lot for your feedback.
>> > > > >> > > >
>> > > > >> > > > You bring up an interesting point regarding the overrides
>> > being
>> > > > >> > available
>> > > > >> > > > to the connectors. Today everything that is specified in
>> the
>> > > > config
>> > > > >> > while
>> > > > >> > > > creating is available for the connector. But this is a
>> > specific
>> > > > case
>> > > > >> > and
>> > > > >> > > we
>> > > > >> > > > could do either of the following
>> > > > >> > > >
>> > > > >> > > >
>> > > > >> > > >    - don't pass any configs with these prefixes to the
>> > > > >> ConnectorConfig
>> > > > >> > > >    instance that's passed in the startConnector
>> > > > >> > > >    - allow policies as to whether the configurations with
>> the
>> > > > >> prefixes
>> > > > >> > > >    should be made available to the connector or not. Should
>> > this
>> > > > >> also
>> > > > >> > > > define a
>> > > > >> > > >    list of configurations?
>> > > > >> > > >
>> > > > >> > > > I personally prefer not passing the configs to Connector
>> since
>> > > > >> that's
>> > > > >> > > > simple, straight forward and don't see a reason for the
>> > > connector
>> > > > to
>> > > > >> > > access
>> > > > >> > > > those.
>> > > > >> > > >
>> > > > >> > >
>> > > > >> > > I agree that these override properties should be effectively
>> new
>> > > > >> > > properties, in which case I'd also prefer that they be
>> removed
>> > > from
>> > > > >> the
>> > > > >> > > configuration before it is passed to the connector. Yes, it
>> is
>> > > > >> *possible*
>> > > > >> > > that an existing connector happened to use connector config
>> > > > properties
>> > > > >> > with
>> > > > >> > > these prefixes, but it's seems pretty unlikely.
>> > > > >> > >
>> > > > >> > > I'd love to hear whether other people agree.
>> > > > >> > >
>> > > > >> > >
>> > > > >> > > >
>> > > > >> > > > For the second point,  None - doesn't allow overrides and
>> the
>> > > > >> default
>> > > > >> > > > policy is null. We preserve backward compatibility when no
>> > > policy
>> > > > is
>> > > > >> > > > configured. Let me know if that's not clear in the KIP.
>> > > > >> > > >
>> > > > >> > >
>> > > > >> > > Why not have a default policy (rather than null) that
>> implements
>> > > the
>> > > > >> > > backward-compatible behavior? It seems strange to have null
>> be
>> > the
>> > > > >> > default
>> > > > >> > > and for non-policy to allow anything.
>> > > > >> > >
>> > > > >> > >
>> > > > >> > > >
>> > > > >> > > > Thanks,
>> > > > >> > > > Magesh
>> > > > >> > > >
>> > > > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <
>> > rhauch@gmail.com
>> > > >
>> > > > >> > wrote:
>> > > > >> > > >
>> > > > >> > > > > Per the proposal, a connector configuration can define
>> one
>> > or
>> > > > more
>> > > > >> > > > > properties that begin with any of the three prefixes:
>> > > > >> > > > "producer.override.",
>> > > > >> > > > > "consumer.override.", and "admin.override.". The proposal
>> > > > states:
>> > > > >> > > > >
>> > > > >> > > > > Since the users can specify any of these policies, the
>> > > > connectors
>> > > > >> > > itself
>> > > > >> > > > > should not rely on these configurations to be available.
>> The
>> > > > >> > overrides
>> > > > >> > > > are
>> > > > >> > > > > to be used purely from an operational perspective.
>> > > > >> > > > >
>> > > > >> > > > >
>> > > > >> > > > > Does this mean that any such properties are visible to
>> > > > >> connectors, or
>> > > > >> > > > will
>> > > > >> > > > > they be hidden to connectors? Currently no connectors
>> have
>> > > > access
>> > > > >> to
>> > > > >> > > such
>> > > > >> > > > > client properties, and users are unlike to just put them
>> > into
>> > > a
>> > > > >> > > connector
>> > > > >> > > > > configuration unnecessarily. A connector implementation
>> > could
>> > > > have
>> > > > >> > > > defined
>> > > > >> > > > > such properties as normal connector-specific properties,
>> in
>> > > > which
>> > > > >> > case
>> > > > >> > > > they
>> > > > >> > > > > are required, but is that likely given the log prefixes?
>> One
>> > > > >> concern
>> > > > >> > > > that I
>> > > > >> > > > > have is that this might allow connector implementations
>> > start
>> > > > >> > > attempting
>> > > > >> > > > to
>> > > > >> > > > > circumvent the Connect API if these properties are
>> included.
>> > > > >> > > > >
>> > > > >> > > > > Second, does the None policy allow but ignore these
>> > additional
>> > > > >> > > properties
>> > > > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the
>> None
>> > > > policy
>> > > > >> > fail
>> > > > >> > > > if
>> > > > >> > > > > any client overrides are specified? The former seems
>> more in
>> > > > line
>> > > > >> > with
>> > > > >> > > > the
>> > > > >> > > > > current behavior, whereas the "disallows" policy seems
>> > useful
>> > > > but
>> > > > >> not
>> > > > >> > > > > exactly backward compatible. Should we also offer a
>> > "Disallow"
>> > > > >> > policy?
>> > > > >> > > In
>> > > > >> > > > > fact, should the policies be named "Ignore" (default),
>> > > > "Disallow",
>> > > > >> > > > > "Prinicipal", and "All"?
>> > > > >> > > > >
>> > > > >> > > > > Otherwise, I like the idea of this. There have been
>> several
>> > > > >> requests
>> > > > >> > > over
>> > > > >> > > > > the past year or two for adding subsets of this
>> > functionality.
>> > > > >> Might
>> > > > >> > be
>> > > > >> > > > > good to find and list all of the related KAFKA issues.
>> > > > >> > > > >
>> > > > >> > > > > Randall
>> > > > >> > > > >
>> > > > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
>> > > > >> chrise@confluent.io>
>> > > > >> > > > wrote:
>> > > > >> > > > >
>> > > > >> > > > > > Hi Magesh,
>> > > > >> > > > > >
>> > > > >> > > > > > Changes look good to me! Excited to see this happen,
>> hope
>> > > the
>> > > > >> KIP
>> > > > >> > > > passes
>> > > > >> > > > > :)
>> > > > >> > > > > >
>> > > > >> > > > > > Cheers,
>> > > > >> > > > > >
>> > > > >> > > > > > Chris
>> > > > >> > > > > >
>> > > > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
>> > > > >> > > > mageshn@confluent.io>
>> > > > >> > > > > > wrote:
>> > > > >> > > > > >
>> > > > >> > > > > > > Hi Chris,
>> > > > >> > > > > > >
>> > > > >> > > > > > > I have updated the KIP to reflect the changes that we
>> > > > >> discussed
>> > > > >> > for
>> > > > >> > > > the
>> > > > >> > > > > > > prefix. Thanks for all your inputs.
>> > > > >> > > > > > >
>> > > > >> > > > > > > Thanks,
>> > > > >> > > > > > > Magesh
>> > > > >> > > > > > >
>> > > > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
>> > > > >> > chrise@confluent.io
>> > > > >> > > >
>> > > > >> > > > > > wrote:
>> > > > >> > > > > > >
>> > > > >> > > > > > > > Hi Magesh,
>> > > > >> > > > > > > >
>> > > > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also
>> don't
>> > > > have a
>> > > > >> > > strong
>> > > > >> > > > > > > opinion
>> > > > >> > > > > > > > between `connector.` and `.override`, but I have a
>> > > slight
>> > > > >> > > > inclination
>> > > > >> > > > > > > > toward `.override` since `connector.` feels a
>> little
>> > > > >> redundant
>> > > > >> > > > given
>> > > > >> > > > > > that
>> > > > >> > > > > > > > the whole configuration is for the connector and
>> the
>> > use
>> > > > of
>> > > > >> > > > > "override"
>> > > > >> > > > > > > may
>> > > > >> > > > > > > > shed a little light on how the properties for these
>> > > > clients
>> > > > >> are
>> > > > >> > > > > > computed
>> > > > >> > > > > > > > and help make the learning curve a little gentler
>> on
>> > new
>> > > > >> devs
>> > > > >> > and
>> > > > >> > > > > > users.
>> > > > >> > > > > > > >
>> > > > >> > > > > > > > Regardless, I think the larger issue of conflicts
>> with
>> > > > >> existing
>> > > > >> > > > > > > properties
>> > > > >> > > > > > > > (both in MM2 and potentially other connectors) has
>> > been
>> > > > >> > > > > satisfactorily
>> > > > >> > > > > > > > addressed, so I'm happy.
>> > > > >> > > > > > > >
>> > > > >> > > > > > > > Cheers,
>> > > > >> > > > > > > >
>> > > > >> > > > > > > > Chris
>> > > > >> > > > > > > >
>> > > > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar
>> <
>> > > > >> > > > > > mageshn@confluent.io
>> > > > >> > > > > > > >
>> > > > >> > > > > > > > wrote:
>> > > > >> > > > > > > >
>> > > > >> > > > > > > > > HI Chrise,
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > > > You are right about the "admin." prefix creating
>> > > > >> conflicts.
>> > > > >> > > Here
>> > > > >> > > > > are
>> > > > >> > > > > > > few
>> > > > >> > > > > > > > > options that I can think of
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used
>> only
>> > for
>> > > > >> DLQ.
>> > > > >> > But
>> > > > >> > > > > this
>> > > > >> > > > > > > > might
>> > > > >> > > > > > > > > not really be the case in the future. So, we
>> should
>> > > > >> possibly
>> > > > >> > > drop
>> > > > >> > > > > > this
>> > > > >> > > > > > > > idea
>> > > > >> > > > > > > > > :)
>> > > > >> > > > > > > > > 2.  Use `connector.producer`,
>> `connector.consumer`
>> > and
>> > > > >> > > > > > > `connector.admin`
>> > > > >> > > > > > > > -
>> > > > >> > > > > > > > > provides better context that its connector
>> specific
>> > > > >> property
>> > > > >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override`
>> > and
>> > > > >> > > > > > `admin.override`
>> > > > >> > > > > > > -
>> > > > >> > > > > > > > > provides better clarity that these are overrides.
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > > > I don't have a strong opinion in choosing
>> between #2
>> > > and
>> > > > >> #3.
>> > > > >> > > Let
>> > > > >> > > > me
>> > > > >> > > > > > > > > know what you think.
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > > > Thanks
>> > > > >> > > > > > > > > Magesh
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
>> > > > >> > > > > chrise@confluent.io>
>> > > > >> > > > > > > > > wrote:
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > > > > Hi Magesh,
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > > > Next round :)
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
>> > > > >> properties
>> > > > >> > > that
>> > > > >> > > > > > > affect
>> > > > >> > > > > > > > > > AdminClients it creates and uses, which IIUC is
>> > the
>> > > > same
>> > > > >> > > prefix
>> > > > >> > > > > > name
>> > > > >> > > > > > > to
>> > > > >> > > > > > > > > be
>> > > > >> > > > > > > > > > used for managing the DLQ for sink connectors
>> in
>> > > this
>> > > > >> KIP.
>> > > > >> > > > > Doesn't
>> > > > >> > > > > > > that
>> > > > >> > > > > > > > > > still leave room for conflict? I'm imagining a
>> > > > scenario
>> > > > >> > like
>> > > > >> > > > > this:
>> > > > >> > > > > > a
>> > > > >> > > > > > > > > > Connect worker is configured to use the
>> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone
>> > tries
>> > > to
>> > > > >> > start
>> > > > >> > > an
>> > > > >> > > > > > > > instance
>> > > > >> > > > > > > > > of
>> > > > >> > > > > > > > > > an MM2 sink with "admin." properties beyond
>> just
>> > > > >> > > > > > > > > "admin.sasl.jaas.config",
>> > > > >> > > > > > > > > > and gets rejected because those properties are
>> > then
>> > > > >> > > interpreted
>> > > > >> > > > > by
>> > > > >> > > > > > > the
>> > > > >> > > > > > > > > > worker as overrides for the AdminClient it
>> uses to
>> > > > >> manage
>> > > > >> > the
>> > > > >> > > > > DLQ.
>> > > > >> > > > > > > > > > 2. (LGTM)
>> > > > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody
>> else
>> > > > >> > identifies a
>> > > > >> > > > > > common
>> > > > >> > > > > > > > use
>> > > > >> > > > > > > > > > case that would involve a similar client config
>> > > policy
>> > > > >> > > > > > implementation
>> > > > >> > > > > > > > > that
>> > > > >> > > > > > > > > > would be limited to a small set of whitelisted
>> > > > configs.
>> > > > >> For
>> > > > >> > > now
>> > > > >> > > > > > > keeping
>> > > > >> > > > > > > > > the
>> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds
>> fine
>> > to
>> > > > me.
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > > > Cheers,
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > > > Chris
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh
>> > Nandakumar <
>> > > > >> > > > > > > > mageshn@confluent.io
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > > > wrote:
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > > > > Hi all,
>> > > > >> > > > > > > > > > >
>> > > > >> > > > > > > > > > > I also have a draft implementation of the KIP
>> > > > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I
>> > > would
>> > > > >> still
>> > > > >> > > > need
>> > > > >> > > > > to
>> > > > >> > > > > > > > > include
>> > > > >> > > > > > > > > > > more tests and docs but I thought it would be
>> > > useful
>> > > > >> to
>> > > > >> > > have
>> > > > >> > > > > this
>> > > > >> > > > > > > for
>> > > > >> > > > > > > > > the
>> > > > >> > > > > > > > > > > KIP discussion. Looking forward to all of
>> your
>> > > > >> valuable
>> > > > >> > > > > feedback.
>> > > > >> > > > > > > > > > >
>> > > > >> > > > > > > > > > > Thanks
>> > > > >> > > > > > > > > > > Magesh
>> > > > >> > > > > > > > > > >
>> > > > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
>> > > Nandakumar <
>> > > > >> > > > > > > > > mageshn@confluent.io
>> > > > >> > > > > > > > > > >
>> > > > >> > > > > > > > > > > wrote:
>> > > > >> > > > > > > > > > >
>> > > > >> > > > > > > > > > > > Chrise,
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > > > Thanks a lot for your feedback. I will
>> address
>> > > > them
>> > > > >> in
>> > > > >> > > > order
>> > > > >> > > > > of
>> > > > >> > > > > > > > your
>> > > > >> > > > > > > > > > > > questions/comments.
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > > > 1. Thanks for bringing this to my attention
>> > > about
>> > > > >> > > KIP-382.
>> > > > >> > > > I
>> > > > >> > > > > > had
>> > > > >> > > > > > > a
>> > > > >> > > > > > > > > > closer
>> > > > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
>> > > > `consumer.`
>> > > > >> > > prefix
>> > > > >> > > > > for
>> > > > >> > > > > > > > > > > SourceConnector
>> > > > >> > > > > > > > > > > > and producer. prefix for SinkConnector
>> since
>> > > those
>> > > > >> are
>> > > > >> > > > > > additional
>> > > > >> > > > > > > > > > > > connector properties to help resolve the
>> Kafka
>> > > > >> cluster
>> > > > >> > > > other
>> > > > >> > > > > > than
>> > > > >> > > > > > > > the
>> > > > >> > > > > > > > > > one
>> > > > >> > > > > > > > > > > > Connect framework knows about. Whereas, the
>> > > > >> proposal in
>> > > > >> > > > > KIP-458
>> > > > >> > > > > > > > > applies
>> > > > >> > > > > > > > > > > > producer policies for SinkConnectors and
>> > > consumer
>> > > > >> > > policies
>> > > > >> > > > > > > > > > > > SourceConnectors.  So, from what I
>> understand
>> > > this
>> > > > >> new
>> > > > >> > > > policy
>> > > > >> > > > > > > > should
>> > > > >> > > > > > > > > > work
>> > > > >> > > > > > > > > > > > without any issues even for Mirror Maker
>> 2.0.
>> > > > >> > > > > > > > > > > > 2. I have updated the KIP to use a default
>> > value
>> > > > of
>> > > > >> > null
>> > > > >> > > > and
>> > > > >> > > > > > use
>> > > > >> > > > > > > > that
>> > > > >> > > > > > > > > > to
>> > > > >> > > > > > > > > > > > determine if we need to ignore overrides.
>> > > > >> > > > > > > > > > > > 3. I would still prefer to keep the special
>> > > > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
>> > > > >> > > > > > > > > > > > since that is one of the most common use
>> cases
>> > > one
>> > > > >> > would
>> > > > >> > > > > choose
>> > > > >> > > > > > > to
>> > > > >> > > > > > > > > use
>> > > > >> > > > > > > > > > > this
>> > > > >> > > > > > > > > > > > feature. If we make it a general case, that
>> > > would
>> > > > >> > involve
>> > > > >> > > > > users
>> > > > >> > > > > > > > > > requiring
>> > > > >> > > > > > > > > > > > to add additional configuration and they
>> might
>> > > > >> require
>> > > > >> > > well
>> > > > >> > > > > > more
>> > > > >> > > > > > > > than
>> > > > >> > > > > > > > > > > just
>> > > > >> > > > > > > > > > > > the list of configs but might also want
>> some
>> > > > >> > restriction
>> > > > >> > > on
>> > > > >> > > > > > > values.
>> > > > >> > > > > > > > > If
>> > > > >> > > > > > > > > > > the
>> > > > >> > > > > > > > > > > > concern is about users wanting principal
>> and
>> > > also
>> > > > >> other
>> > > > >> > > > > > configs,
>> > > > >> > > > > > > it
>> > > > >> > > > > > > > > > would
>> > > > >> > > > > > > > > > > > still be possible by means of a custom
>> > > > >> implementation.
>> > > > >> > As
>> > > > >> > > > > is, I
>> > > > >> > > > > > > > would
>> > > > >> > > > > > > > > > > > prefer to keep the proposal to be the same
>> for
>> > > > this.
>> > > > >> > Let
>> > > > >> > > me
>> > > > >> > > > > > know
>> > > > >> > > > > > > > your
>> > > > >> > > > > > > > > > > > thoughts.
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > > > Thanks,
>> > > > >> > > > > > > > > > > > Magesh
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris
>> Egerton
>> > <
>> > > > >> > > > > > > chrise@confluent.io
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > > > > > wrote:
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > > >> Hi Magesh,
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
>> > > > >> > questions/comments
>> > > > >> > > > but
>> > > > >> > > > > > > > > overall I
>> > > > >> > > > > > > > > > > >> like
>> > > > >> > > > > > > > > > > >> the direction it's headed in and hope to
>> see
>> > it
>> > > > >> > included
>> > > > >> > > > in
>> > > > >> > > > > > the
>> > > > >> > > > > > > > > > Connect
>> > > > >> > > > > > > > > > > >> framework soon.
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >> 1. With the proposed "consumer.",
>> > "producer.",
>> > > > and
>> > > > >> > > > "admin."
>> > > > >> > > > > > > > > prefixes,
>> > > > >> > > > > > > > > > > how
>> > > > >> > > > > > > > > > > >> will this interact with connectors such as
>> > the
>> > > > >> > upcoming
>> > > > >> > > > > Mirror
>> > > > >> > > > > > > > Maker
>> > > > >> > > > > > > > > > 2.0
>> > > > >> > > > > > > > > > > >> (KIP-382) that already support properties
>> > with
>> > > > >> those
>> > > > >> > > > > prefixes?
>> > > > >> > > > > > > > Would
>> > > > >> > > > > > > > > > it
>> > > > >> > > > > > > > > > > be
>> > > > >> > > > > > > > > > > >> possible for a user to configure MM2 with
>> > those
>> > > > >> > > properties
>> > > > >> > > > > > > without
>> > > > >> > > > > > > > > > them
>> > > > >> > > > > > > > > > > >> being interpreted as Connect client
>> > overrides,
>> > > > >> without
>> > > > >> > > > > > isolating
>> > > > >> > > > > > > > MM2
>> > > > >> > > > > > > > > > > onto
>> > > > >> > > > > > > > > > > >> its own cluster and using the
>> > > > >> > > > > > IgnoreConnectorClientConfigPolicy
>> > > > >> > > > > > > > > > policy?
>> > > > >> > > > > > > > > > > >> 2. Is the
>> IgnoreConnectorClientConfigPolicy
>> > > class
>> > > > >> > > > necessary?
>> > > > >> > > > > > The
>> > > > >> > > > > > > > > > default
>> > > > >> > > > > > > > > > > >> for the connector.client.config.policy
>> > property
>> > > > >> could
>> > > > >> > > > simply
>> > > > >> > > > > > be
>> > > > >> > > > > > > > null
>> > > > >> > > > > > > > > > > >> instead of a new policy that, as far as I
>> can
>> > > > tell,
>> > > > >> > > isn't
>> > > > >> > > > an
>> > > > >> > > > > > > > actual
>> > > > >> > > > > > > > > > > policy
>> > > > >> > > > > > > > > > > >> in that its validate(...) method is never
>> > > invoked
>> > > > >> and
>> > > > >> > > > > instead
>> > > > >> > > > > > > > > > > represents a
>> > > > >> > > > > > > > > > > >> special case to the Connect framework that
>> > says
>> > > > >> "Drop
>> > > > >> > > all
>> > > > >> > > > > > > > overrides
>> > > > >> > > > > > > > > > and
>> > > > >> > > > > > > > > > > >> never use me".
>> > > > >> > > > > > > > > > > >> 3. The
>> PrincipalConnectorClientConfigPolicy
>> > > seems
>> > > > >> > like a
>> > > > >> > > > > > > specific
>> > > > >> > > > > > > > > > > instance
>> > > > >> > > > > > > > > > > >> of a more general use case: allow exactly
>> a
>> > > small
>> > > > >> set
>> > > > >> > of
>> > > > >> > > > > > > overrides
>> > > > >> > > > > > > > > and
>> > > > >> > > > > > > > > > > no
>> > > > >> > > > > > > > > > > >> others. Why not generalize here and
>> create a
>> > > > policy
>> > > > >> > that
>> > > > >> > > > > > > accepts a
>> > > > >> > > > > > > > > > list
>> > > > >> > > > > > > > > > > of
>> > > > >> > > > > > > > > > > >> allowed overrides during configuration?
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >> Thanks again for the KIP.
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >> Cheers,
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >> Chris
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
>> > > > Nandakumar <
>> > > > >> > > > > > > > > > mageshn@confluent.io
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > > >> wrote:
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >> > Hi all,
>> > > > >> > > > > > > > > > > >> >
>> > > > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client
>> > Config
>> > > > >> > Override
>> > > > >> > > > > > > Policy",
>> > > > >> > > > > > > > > > which
>> > > > >> > > > > > > > > > > >> > allows users to override the connector
>> > client
>> > > > >> > > > > configurations
>> > > > >> > > > > > > > based
>> > > > >> > > > > > > > > > on
>> > > > >> > > > > > > > > > > a
>> > > > >> > > > > > > > > > > >> > policy defined by the administrator.
>> > > > >> > > > > > > > > > > >> >
>> > > > >> > > > > > > > > > > >> > The KIP can be found at
>> > > > >> > > > > > > > > > > >> >
>> > > > >> > > > > > > > > > > >> >
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > >
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > >
>> > > > >> > > > > > >
>> > > > >> > > > > >
>> > > > >> > > > >
>> > > > >> > > >
>> > > > >> > >
>> > > > >> >
>> > > > >>
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
>> > > > >> > > > > > > > > > > >> > .
>> > > > >> > > > > > > > > > > >> >
>> > > > >> > > > > > > > > > > >> > Looking forward for the discussion on
>> the
>> > KIP
>> > > > and
>> > > > >> > all
>> > > > >> > > of
>> > > > >> > > > > > your
>> > > > >> > > > > > > > > > > thoughts &
>> > > > >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
>> > > > >> > > > > > > > > > > >> >
>> > > > >> > > > > > > > > > > >> > Thanks,
>> > > > >> > > > > > > > > > > >> > Magesh
>> > > > >> > > > > > > > > > > >> >
>> > > > >> > > > > > > > > > > >>
>> > > > >> > > > > > > > > > > >
>> > > > >> > > > > > > > > > >
>> > > > >> > > > > > > > > >
>> > > > >> > > > > > > > >
>> > > > >> > > > > > > >
>> > > > >> > > > > > >
>> > > > >> > > > > >
>> > > > >> > > > >
>> > > > >> > > >
>> > > > >> > >
>> > > > >> >
>> > > > >>
>> > > > >
>> > > >
>> > >
>> >
>>
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
Randall,

Thanks a lot for the suggestions. I have incorporated the comments in the
KIP.

Thanks,
Magesh

On Mon, May 6, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:

> Thanks, Magesh. I do have a few pretty minor suggestions.
>
> 1) Define a bit more clearly in the "Proposed Changes" whether the configs
> passed to the validate method via the ConnectorClientConfigRequest object
> have or do not have the prefixes.
> 2) Specify more clearly in (or around) the table which is the default
> policy. Currently the Ignore policy "Behavior" just mentions that it's the
> current behavior, but I think it would help that it is described as the
> default for the property.
>
> Otherwise, this looks good to me.
>
> Best regards,
>
> Randall
>
> On Mon, May 6, 2019 at 8:12 PM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > Konstantine,
> >
> > Thanks a lot for your feedback on the KIP. I have incorporated the
> feedback
> > using generics for Class. I have also updated the KIP to handle the
> default
> > value per Randall's suggestion. Let me know if you have any questions.
> >
> > Thanks,
> > Magesh
> >
> >
> > On Mon, May 6, 2019 at 1:58 PM Konstantine Karantasis <
> > konstantine@confluent.io> wrote:
> >
> > > Thanks for the KIP Magesh, it's quite useful towards the goals for more
> > > general multi-tenancy in Connect.
> > >
> > > Couple of comments from me too:
> > >
> > > I think the fact that the default policy is 'null' (no implementation)
> > > should be mentioned on the table next to the available implementations.
> > > Currently the KIP says: 'In addition to the default implementation,
> ..."
> > > but this is not very accurate because there is no concrete default
> > > implementation. Just special handling of 'null' in
> > > 'connector.client.config.policy'
> > >
> > > Regarding passing the overrides to the connector 'configure' method, I
> > feel
> > > it wouldn't hurt to pass them, but I also agree that leaving this out
> at
> > > the moment is the safest option.
> > >
> > > Since the interfaces and classes are listed in the KIP, I'd like to
> note
> > > that Class is used as a raw type in field and return value
> declarations.
> > We
> > > should use the generic type instead.
> > >
> > > Thanks for this improvement proposal!
> > > Konstantine
> > >
> > > On Mon, May 6, 2019 at 11:11 AM Magesh Nandakumar <
> mageshn@confluent.io>
> > > wrote:
> > >
> > > > Randall,
> > > >
> > > > I was wondering if you had any thoughts on the above alternatives to
> > deal
> > > > with a default policy.  If it's possible, I would like to finalize
> the
> > > > discussions and start a vote.
> > > > Let me know your thoughts.
> > > >
> > > > Thanks,
> > > > Magesh
> > > >
> > > > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <
> > mageshn@confluent.io>
> > > > wrote:
> > > >
> > > > > Randall,
> > > > >
> > > > > The approach to return the to override configs could possibly make
> it
> > > > > cumbersome to implement a custom policy. This is a new
> configuration
> > > and
> > > > if
> > > > > you don't explicitly set it the existing behavior remains as-is.
> Like
> > > > > Chris, I also preferred this approach for the sake of simplicity.
> If
> > > not
> > > > > for the default `null` I would prefer to fall back to using
> `Ignore`
> > > > which
> > > > > is a misnomer to the interface spec but still gets the job done via
> > > > > instanceOf checks. The other options I could think of are as
> below:-
> > > > >
> > > > >    - have an enforcePolicy() method in the interface which by
> default
> > > > >    returns true and the Ignore implementation could return false
> > > > >    - introduce another worker config
> allow.connector.config.overrides
> > > > >    with a default value of false and the default policy can be None
> > > > >
> > > > > Let me know what you think.
> > > > >
> > > > > Thanks
> > > > > Magesh
> > > > >
> > > > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
> > > wrote:
> > > > >
> > > > >> Thanks, Chris. I still think it's strange to have a non-policy,
> > since
> > > > >> there's now special behavior for when the policy is not specified.
> > > > >>
> > > > >> Perhaps the inability for a policy implementation to represent the
> > > > >> existing
> > > > >> behavior suggests that the policy interface isn't quite right.
> Could
> > > the
> > > > >> policy's "validate" method take the overrides that were supplied
> and
> > > > >> return
> > > > >> the overrides that should be passed to the connector, yet still
> > > throwing
> > > > >> an
> > > > >> exception if any supplied overrides are not allowed. Then the
> > > different
> > > > >> policy implementations might be:
> > > > >>
> > > > >>    - Ignore (default) - returns all supplied override properties
> > > > >>    - None - throws exception if any override properties are
> > supplied;
> > > > >>    always returns empty map if no overrides are provided
> > > > >>    - Principal - throws exception if other override properties are
> > > > >>    provided, but returns an empty map (since no properties should
> be
> > > > >> passed to
> > > > >>    the connector)
> > > > >>    - All - returns all provided override properties
> > > > >>
> > > > >> All override properties defined on the connector configuration
> would
> > > be
> > > > >> passed to the policy for validation, and assuming there's no error
> > all
> > > > of
> > > > >> these overrides would be used in the producer/consumer/admin
> client.
> > > The
> > > > >> result of the policy call, however, is used to determine which of
> > > these
> > > > >> overrides are passed to the connector.
> > > > >>
> > > > >> This approach means that all behaviors can be implemented through
> a
> > > > policy
> > > > >> class, including the defaults. It also gives a bit more control to
> > > > custom
> > > > >> policies, should that be warranted. For example, validating the
> > > provided
> > > > >> client overrides but passing all such override properties to the
> > > > >> connector,
> > > > >> which as I stated earlier is something I think connectors likely
> > don't
> > > > >> look
> > > > >> for.
> > > > >>
> > > > >> Thoughts?
> > > > >>
> > > > >> Randall
> > > > >>
> > > > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <
> chrise@confluent.io>
> > > > >> wrote:
> > > > >>
> > > > >> > Randall,
> > > > >> >
> > > > >> > The special behavior for null was my suggestion. There is no
> > > > >> implementation
> > > > >> > of the proposed interface that causes client overrides to be
> > > ignored,
> > > > so
> > > > >> > the original idea was to have a special implementation that
> would
> > be
> > > > >> > checked for by the Connect framework (probably via the
> instanceof
> > > > >> operator)
> > > > >> > and, if present, cause all would-be overrides to be ignored.
> > > > >> >
> > > > >> > I thought this may be confusing to people who may see that
> > behavior
> > > > and
> > > > >> > wonder how to recreate it themselves, so I suggested leaving
> that
> > > > policy
> > > > >> > out and replace it with a check to see if a policy was specified
> > at
> > > > all.
> > > > >> >
> > > > >> > Would be interested in your thoughts on this, especially if
> > there's
> > > an
> > > > >> > alternative that hasn't been proposed yet.
> > > > >> >
> > > > >> > Cheers,
> > > > >> >
> > > > >> > Chris
> > > > >> >
> > > > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com>
> > wrote:
> > > > >> >
> > > > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> > > > >> mageshn@confluent.io>
> > > > >> > > wrote:
> > > > >> > >
> > > > >> > > > Randall,
> > > > >> > > >
> > > > >> > > > Thanks a lot for your feedback.
> > > > >> > > >
> > > > >> > > > You bring up an interesting point regarding the overrides
> > being
> > > > >> > available
> > > > >> > > > to the connectors. Today everything that is specified in the
> > > > config
> > > > >> > while
> > > > >> > > > creating is available for the connector. But this is a
> > specific
> > > > case
> > > > >> > and
> > > > >> > > we
> > > > >> > > > could do either of the following
> > > > >> > > >
> > > > >> > > >
> > > > >> > > >    - don't pass any configs with these prefixes to the
> > > > >> ConnectorConfig
> > > > >> > > >    instance that's passed in the startConnector
> > > > >> > > >    - allow policies as to whether the configurations with
> the
> > > > >> prefixes
> > > > >> > > >    should be made available to the connector or not. Should
> > this
> > > > >> also
> > > > >> > > > define a
> > > > >> > > >    list of configurations?
> > > > >> > > >
> > > > >> > > > I personally prefer not passing the configs to Connector
> since
> > > > >> that's
> > > > >> > > > simple, straight forward and don't see a reason for the
> > > connector
> > > > to
> > > > >> > > access
> > > > >> > > > those.
> > > > >> > > >
> > > > >> > >
> > > > >> > > I agree that these override properties should be effectively
> new
> > > > >> > > properties, in which case I'd also prefer that they be removed
> > > from
> > > > >> the
> > > > >> > > configuration before it is passed to the connector. Yes, it is
> > > > >> *possible*
> > > > >> > > that an existing connector happened to use connector config
> > > > properties
> > > > >> > with
> > > > >> > > these prefixes, but it's seems pretty unlikely.
> > > > >> > >
> > > > >> > > I'd love to hear whether other people agree.
> > > > >> > >
> > > > >> > >
> > > > >> > > >
> > > > >> > > > For the second point,  None - doesn't allow overrides and
> the
> > > > >> default
> > > > >> > > > policy is null. We preserve backward compatibility when no
> > > policy
> > > > is
> > > > >> > > > configured. Let me know if that's not clear in the KIP.
> > > > >> > > >
> > > > >> > >
> > > > >> > > Why not have a default policy (rather than null) that
> implements
> > > the
> > > > >> > > backward-compatible behavior? It seems strange to have null be
> > the
> > > > >> > default
> > > > >> > > and for non-policy to allow anything.
> > > > >> > >
> > > > >> > >
> > > > >> > > >
> > > > >> > > > Thanks,
> > > > >> > > > Magesh
> > > > >> > > >
> > > > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <
> > rhauch@gmail.com
> > > >
> > > > >> > wrote:
> > > > >> > > >
> > > > >> > > > > Per the proposal, a connector configuration can define one
> > or
> > > > more
> > > > >> > > > > properties that begin with any of the three prefixes:
> > > > >> > > > "producer.override.",
> > > > >> > > > > "consumer.override.", and "admin.override.". The proposal
> > > > states:
> > > > >> > > > >
> > > > >> > > > > Since the users can specify any of these policies, the
> > > > connectors
> > > > >> > > itself
> > > > >> > > > > should not rely on these configurations to be available.
> The
> > > > >> > overrides
> > > > >> > > > are
> > > > >> > > > > to be used purely from an operational perspective.
> > > > >> > > > >
> > > > >> > > > >
> > > > >> > > > > Does this mean that any such properties are visible to
> > > > >> connectors, or
> > > > >> > > > will
> > > > >> > > > > they be hidden to connectors? Currently no connectors have
> > > > access
> > > > >> to
> > > > >> > > such
> > > > >> > > > > client properties, and users are unlike to just put them
> > into
> > > a
> > > > >> > > connector
> > > > >> > > > > configuration unnecessarily. A connector implementation
> > could
> > > > have
> > > > >> > > > defined
> > > > >> > > > > such properties as normal connector-specific properties,
> in
> > > > which
> > > > >> > case
> > > > >> > > > they
> > > > >> > > > > are required, but is that likely given the log prefixes?
> One
> > > > >> concern
> > > > >> > > > that I
> > > > >> > > > > have is that this might allow connector implementations
> > start
> > > > >> > > attempting
> > > > >> > > > to
> > > > >> > > > > circumvent the Connect API if these properties are
> included.
> > > > >> > > > >
> > > > >> > > > > Second, does the None policy allow but ignore these
> > additional
> > > > >> > > properties
> > > > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the
> None
> > > > policy
> > > > >> > fail
> > > > >> > > > if
> > > > >> > > > > any client overrides are specified? The former seems more
> in
> > > > line
> > > > >> > with
> > > > >> > > > the
> > > > >> > > > > current behavior, whereas the "disallows" policy seems
> > useful
> > > > but
> > > > >> not
> > > > >> > > > > exactly backward compatible. Should we also offer a
> > "Disallow"
> > > > >> > policy?
> > > > >> > > In
> > > > >> > > > > fact, should the policies be named "Ignore" (default),
> > > > "Disallow",
> > > > >> > > > > "Prinicipal", and "All"?
> > > > >> > > > >
> > > > >> > > > > Otherwise, I like the idea of this. There have been
> several
> > > > >> requests
> > > > >> > > over
> > > > >> > > > > the past year or two for adding subsets of this
> > functionality.
> > > > >> Might
> > > > >> > be
> > > > >> > > > > good to find and list all of the related KAFKA issues.
> > > > >> > > > >
> > > > >> > > > > Randall
> > > > >> > > > >
> > > > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> > > > >> chrise@confluent.io>
> > > > >> > > > wrote:
> > > > >> > > > >
> > > > >> > > > > > Hi Magesh,
> > > > >> > > > > >
> > > > >> > > > > > Changes look good to me! Excited to see this happen,
> hope
> > > the
> > > > >> KIP
> > > > >> > > > passes
> > > > >> > > > > :)
> > > > >> > > > > >
> > > > >> > > > > > Cheers,
> > > > >> > > > > >
> > > > >> > > > > > Chris
> > > > >> > > > > >
> > > > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > > > >> > > > mageshn@confluent.io>
> > > > >> > > > > > wrote:
> > > > >> > > > > >
> > > > >> > > > > > > Hi Chris,
> > > > >> > > > > > >
> > > > >> > > > > > > I have updated the KIP to reflect the changes that we
> > > > >> discussed
> > > > >> > for
> > > > >> > > > the
> > > > >> > > > > > > prefix. Thanks for all your inputs.
> > > > >> > > > > > >
> > > > >> > > > > > > Thanks,
> > > > >> > > > > > > Magesh
> > > > >> > > > > > >
> > > > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> > > > >> > chrise@confluent.io
> > > > >> > > >
> > > > >> > > > > > wrote:
> > > > >> > > > > > >
> > > > >> > > > > > > > Hi Magesh,
> > > > >> > > > > > > >
> > > > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also
> don't
> > > > have a
> > > > >> > > strong
> > > > >> > > > > > > opinion
> > > > >> > > > > > > > between `connector.` and `.override`, but I have a
> > > slight
> > > > >> > > > inclination
> > > > >> > > > > > > > toward `.override` since `connector.` feels a little
> > > > >> redundant
> > > > >> > > > given
> > > > >> > > > > > that
> > > > >> > > > > > > > the whole configuration is for the connector and the
> > use
> > > > of
> > > > >> > > > > "override"
> > > > >> > > > > > > may
> > > > >> > > > > > > > shed a little light on how the properties for these
> > > > clients
> > > > >> are
> > > > >> > > > > > computed
> > > > >> > > > > > > > and help make the learning curve a little gentler on
> > new
> > > > >> devs
> > > > >> > and
> > > > >> > > > > > users.
> > > > >> > > > > > > >
> > > > >> > > > > > > > Regardless, I think the larger issue of conflicts
> with
> > > > >> existing
> > > > >> > > > > > > properties
> > > > >> > > > > > > > (both in MM2 and potentially other connectors) has
> > been
> > > > >> > > > > satisfactorily
> > > > >> > > > > > > > addressed, so I'm happy.
> > > > >> > > > > > > >
> > > > >> > > > > > > > Cheers,
> > > > >> > > > > > > >
> > > > >> > > > > > > > Chris
> > > > >> > > > > > > >
> > > > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > > >> > > > > > mageshn@confluent.io
> > > > >> > > > > > > >
> > > > >> > > > > > > > wrote:
> > > > >> > > > > > > >
> > > > >> > > > > > > > > HI Chrise,
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > You are right about the "admin." prefix creating
> > > > >> conflicts.
> > > > >> > > Here
> > > > >> > > > > are
> > > > >> > > > > > > few
> > > > >> > > > > > > > > options that I can think of
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only
> > for
> > > > >> DLQ.
> > > > >> > But
> > > > >> > > > > this
> > > > >> > > > > > > > might
> > > > >> > > > > > > > > not really be the case in the future. So, we
> should
> > > > >> possibly
> > > > >> > > drop
> > > > >> > > > > > this
> > > > >> > > > > > > > idea
> > > > >> > > > > > > > > :)
> > > > >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer`
> > and
> > > > >> > > > > > > `connector.admin`
> > > > >> > > > > > > > -
> > > > >> > > > > > > > > provides better context that its connector
> specific
> > > > >> property
> > > > >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override`
> > and
> > > > >> > > > > > `admin.override`
> > > > >> > > > > > > -
> > > > >> > > > > > > > > provides better clarity that these are overrides.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > I don't have a strong opinion in choosing between
> #2
> > > and
> > > > >> #3.
> > > > >> > > Let
> > > > >> > > > me
> > > > >> > > > > > > > > know what you think.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > Thanks
> > > > >> > > > > > > > > Magesh
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > > > >> > > > > chrise@confluent.io>
> > > > >> > > > > > > > > wrote:
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > > Hi Magesh,
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > Next round :)
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> > > > >> properties
> > > > >> > > that
> > > > >> > > > > > > affect
> > > > >> > > > > > > > > > AdminClients it creates and uses, which IIUC is
> > the
> > > > same
> > > > >> > > prefix
> > > > >> > > > > > name
> > > > >> > > > > > > to
> > > > >> > > > > > > > > be
> > > > >> > > > > > > > > > used for managing the DLQ for sink connectors in
> > > this
> > > > >> KIP.
> > > > >> > > > > Doesn't
> > > > >> > > > > > > that
> > > > >> > > > > > > > > > still leave room for conflict? I'm imagining a
> > > > scenario
> > > > >> > like
> > > > >> > > > > this:
> > > > >> > > > > > a
> > > > >> > > > > > > > > > Connect worker is configured to use the
> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone
> > tries
> > > to
> > > > >> > start
> > > > >> > > an
> > > > >> > > > > > > > instance
> > > > >> > > > > > > > > of
> > > > >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> > > > >> > > > > > > > > "admin.sasl.jaas.config",
> > > > >> > > > > > > > > > and gets rejected because those properties are
> > then
> > > > >> > > interpreted
> > > > >> > > > > by
> > > > >> > > > > > > the
> > > > >> > > > > > > > > > worker as overrides for the AdminClient it uses
> to
> > > > >> manage
> > > > >> > the
> > > > >> > > > > DLQ.
> > > > >> > > > > > > > > > 2. (LGTM)
> > > > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> > > > >> > identifies a
> > > > >> > > > > > common
> > > > >> > > > > > > > use
> > > > >> > > > > > > > > > case that would involve a similar client config
> > > policy
> > > > >> > > > > > implementation
> > > > >> > > > > > > > > that
> > > > >> > > > > > > > > > would be limited to a small set of whitelisted
> > > > configs.
> > > > >> For
> > > > >> > > now
> > > > >> > > > > > > keeping
> > > > >> > > > > > > > > the
> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine
> > to
> > > > me.
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > Cheers,
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > Chris
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh
> > Nandakumar <
> > > > >> > > > > > > > mageshn@confluent.io
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > wrote:
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > > Hi all,
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > I also have a draft implementation of the KIP
> > > > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I
> > > would
> > > > >> still
> > > > >> > > > need
> > > > >> > > > > to
> > > > >> > > > > > > > > include
> > > > >> > > > > > > > > > > more tests and docs but I thought it would be
> > > useful
> > > > >> to
> > > > >> > > have
> > > > >> > > > > this
> > > > >> > > > > > > for
> > > > >> > > > > > > > > the
> > > > >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> > > > >> valuable
> > > > >> > > > > feedback.
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > Thanks
> > > > >> > > > > > > > > > > Magesh
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
> > > Nandakumar <
> > > > >> > > > > > > > > mageshn@confluent.io
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > wrote:
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > > Chrise,
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > Thanks a lot for your feedback. I will
> address
> > > > them
> > > > >> in
> > > > >> > > > order
> > > > >> > > > > of
> > > > >> > > > > > > > your
> > > > >> > > > > > > > > > > > questions/comments.
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > 1. Thanks for bringing this to my attention
> > > about
> > > > >> > > KIP-382.
> > > > >> > > > I
> > > > >> > > > > > had
> > > > >> > > > > > > a
> > > > >> > > > > > > > > > closer
> > > > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> > > > `consumer.`
> > > > >> > > prefix
> > > > >> > > > > for
> > > > >> > > > > > > > > > > SourceConnector
> > > > >> > > > > > > > > > > > and producer. prefix for SinkConnector since
> > > those
> > > > >> are
> > > > >> > > > > > additional
> > > > >> > > > > > > > > > > > connector properties to help resolve the
> Kafka
> > > > >> cluster
> > > > >> > > > other
> > > > >> > > > > > than
> > > > >> > > > > > > > the
> > > > >> > > > > > > > > > one
> > > > >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> > > > >> proposal in
> > > > >> > > > > KIP-458
> > > > >> > > > > > > > > applies
> > > > >> > > > > > > > > > > > producer policies for SinkConnectors and
> > > consumer
> > > > >> > > policies
> > > > >> > > > > > > > > > > > SourceConnectors.  So, from what I
> understand
> > > this
> > > > >> new
> > > > >> > > > policy
> > > > >> > > > > > > > should
> > > > >> > > > > > > > > > work
> > > > >> > > > > > > > > > > > without any issues even for Mirror Maker
> 2.0.
> > > > >> > > > > > > > > > > > 2. I have updated the KIP to use a default
> > value
> > > > of
> > > > >> > null
> > > > >> > > > and
> > > > >> > > > > > use
> > > > >> > > > > > > > that
> > > > >> > > > > > > > > > to
> > > > >> > > > > > > > > > > > determine if we need to ignore overrides.
> > > > >> > > > > > > > > > > > 3. I would still prefer to keep the special
> > > > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > > > >> > > > > > > > > > > > since that is one of the most common use
> cases
> > > one
> > > > >> > would
> > > > >> > > > > choose
> > > > >> > > > > > > to
> > > > >> > > > > > > > > use
> > > > >> > > > > > > > > > > this
> > > > >> > > > > > > > > > > > feature. If we make it a general case, that
> > > would
> > > > >> > involve
> > > > >> > > > > users
> > > > >> > > > > > > > > > requiring
> > > > >> > > > > > > > > > > > to add additional configuration and they
> might
> > > > >> require
> > > > >> > > well
> > > > >> > > > > > more
> > > > >> > > > > > > > than
> > > > >> > > > > > > > > > > just
> > > > >> > > > > > > > > > > > the list of configs but might also want some
> > > > >> > restriction
> > > > >> > > on
> > > > >> > > > > > > values.
> > > > >> > > > > > > > > If
> > > > >> > > > > > > > > > > the
> > > > >> > > > > > > > > > > > concern is about users wanting principal and
> > > also
> > > > >> other
> > > > >> > > > > > configs,
> > > > >> > > > > > > it
> > > > >> > > > > > > > > > would
> > > > >> > > > > > > > > > > > still be possible by means of a custom
> > > > >> implementation.
> > > > >> > As
> > > > >> > > > > is, I
> > > > >> > > > > > > > would
> > > > >> > > > > > > > > > > > prefer to keep the proposal to be the same
> for
> > > > this.
> > > > >> > Let
> > > > >> > > me
> > > > >> > > > > > know
> > > > >> > > > > > > > your
> > > > >> > > > > > > > > > > > thoughts.
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > Thanks,
> > > > >> > > > > > > > > > > > Magesh
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris
> Egerton
> > <
> > > > >> > > > > > > chrise@confluent.io
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > > > wrote:
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > >> Hi Magesh,
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> > > > >> > questions/comments
> > > > >> > > > but
> > > > >> > > > > > > > > overall I
> > > > >> > > > > > > > > > > >> like
> > > > >> > > > > > > > > > > >> the direction it's headed in and hope to
> see
> > it
> > > > >> > included
> > > > >> > > > in
> > > > >> > > > > > the
> > > > >> > > > > > > > > > Connect
> > > > >> > > > > > > > > > > >> framework soon.
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> 1. With the proposed "consumer.",
> > "producer.",
> > > > and
> > > > >> > > > "admin."
> > > > >> > > > > > > > > prefixes,
> > > > >> > > > > > > > > > > how
> > > > >> > > > > > > > > > > >> will this interact with connectors such as
> > the
> > > > >> > upcoming
> > > > >> > > > > Mirror
> > > > >> > > > > > > > Maker
> > > > >> > > > > > > > > > 2.0
> > > > >> > > > > > > > > > > >> (KIP-382) that already support properties
> > with
> > > > >> those
> > > > >> > > > > prefixes?
> > > > >> > > > > > > > Would
> > > > >> > > > > > > > > > it
> > > > >> > > > > > > > > > > be
> > > > >> > > > > > > > > > > >> possible for a user to configure MM2 with
> > those
> > > > >> > > properties
> > > > >> > > > > > > without
> > > > >> > > > > > > > > > them
> > > > >> > > > > > > > > > > >> being interpreted as Connect client
> > overrides,
> > > > >> without
> > > > >> > > > > > isolating
> > > > >> > > > > > > > MM2
> > > > >> > > > > > > > > > > onto
> > > > >> > > > > > > > > > > >> its own cluster and using the
> > > > >> > > > > > IgnoreConnectorClientConfigPolicy
> > > > >> > > > > > > > > > policy?
> > > > >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy
> > > class
> > > > >> > > > necessary?
> > > > >> > > > > > The
> > > > >> > > > > > > > > > default
> > > > >> > > > > > > > > > > >> for the connector.client.config.policy
> > property
> > > > >> could
> > > > >> > > > simply
> > > > >> > > > > > be
> > > > >> > > > > > > > null
> > > > >> > > > > > > > > > > >> instead of a new policy that, as far as I
> can
> > > > tell,
> > > > >> > > isn't
> > > > >> > > > an
> > > > >> > > > > > > > actual
> > > > >> > > > > > > > > > > policy
> > > > >> > > > > > > > > > > >> in that its validate(...) method is never
> > > invoked
> > > > >> and
> > > > >> > > > > instead
> > > > >> > > > > > > > > > > represents a
> > > > >> > > > > > > > > > > >> special case to the Connect framework that
> > says
> > > > >> "Drop
> > > > >> > > all
> > > > >> > > > > > > > overrides
> > > > >> > > > > > > > > > and
> > > > >> > > > > > > > > > > >> never use me".
> > > > >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy
> > > seems
> > > > >> > like a
> > > > >> > > > > > > specific
> > > > >> > > > > > > > > > > instance
> > > > >> > > > > > > > > > > >> of a more general use case: allow exactly a
> > > small
> > > > >> set
> > > > >> > of
> > > > >> > > > > > > overrides
> > > > >> > > > > > > > > and
> > > > >> > > > > > > > > > > no
> > > > >> > > > > > > > > > > >> others. Why not generalize here and create
> a
> > > > policy
> > > > >> > that
> > > > >> > > > > > > accepts a
> > > > >> > > > > > > > > > list
> > > > >> > > > > > > > > > > of
> > > > >> > > > > > > > > > > >> allowed overrides during configuration?
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> Thanks again for the KIP.
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> Cheers,
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> Chris
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> > > > Nandakumar <
> > > > >> > > > > > > > > > mageshn@confluent.io
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > >> wrote:
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> > Hi all,
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client
> > Config
> > > > >> > Override
> > > > >> > > > > > > Policy",
> > > > >> > > > > > > > > > which
> > > > >> > > > > > > > > > > >> > allows users to override the connector
> > client
> > > > >> > > > > configurations
> > > > >> > > > > > > > based
> > > > >> > > > > > > > > > on
> > > > >> > > > > > > > > > > a
> > > > >> > > > > > > > > > > >> > policy defined by the administrator.
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > The KIP can be found at
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > >
> > > > >> > > > > > > >
> > > > >> > > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > > >> > > > > > > > > > > >> > .
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > Looking forward for the discussion on the
> > KIP
> > > > and
> > > > >> > all
> > > > >> > > of
> > > > >> > > > > > your
> > > > >> > > > > > > > > > > thoughts &
> > > > >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > Thanks,
> > > > >> > > > > > > > > > > >> > Magesh
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > >
> > > > >> > > > > > > >
> > > > >> > > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > > >
> > > >
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Randall Hauch <rh...@gmail.com>.
Thanks, Magesh. I do have a few pretty minor suggestions.

1) Define a bit more clearly in the "Proposed Changes" whether the configs
passed to the validate method via the ConnectorClientConfigRequest object
have or do not have the prefixes.
2) Specify more clearly in (or around) the table which is the default
policy. Currently the Ignore policy "Behavior" just mentions that it's the
current behavior, but I think it would help that it is described as the
default for the property.

Otherwise, this looks good to me.

Best regards,

Randall

On Mon, May 6, 2019 at 8:12 PM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Konstantine,
>
> Thanks a lot for your feedback on the KIP. I have incorporated the feedback
> using generics for Class. I have also updated the KIP to handle the default
> value per Randall's suggestion. Let me know if you have any questions.
>
> Thanks,
> Magesh
>
>
> On Mon, May 6, 2019 at 1:58 PM Konstantine Karantasis <
> konstantine@confluent.io> wrote:
>
> > Thanks for the KIP Magesh, it's quite useful towards the goals for more
> > general multi-tenancy in Connect.
> >
> > Couple of comments from me too:
> >
> > I think the fact that the default policy is 'null' (no implementation)
> > should be mentioned on the table next to the available implementations.
> > Currently the KIP says: 'In addition to the default implementation, ..."
> > but this is not very accurate because there is no concrete default
> > implementation. Just special handling of 'null' in
> > 'connector.client.config.policy'
> >
> > Regarding passing the overrides to the connector 'configure' method, I
> feel
> > it wouldn't hurt to pass them, but I also agree that leaving this out at
> > the moment is the safest option.
> >
> > Since the interfaces and classes are listed in the KIP, I'd like to note
> > that Class is used as a raw type in field and return value declarations.
> We
> > should use the generic type instead.
> >
> > Thanks for this improvement proposal!
> > Konstantine
> >
> > On Mon, May 6, 2019 at 11:11 AM Magesh Nandakumar <ma...@confluent.io>
> > wrote:
> >
> > > Randall,
> > >
> > > I was wondering if you had any thoughts on the above alternatives to
> deal
> > > with a default policy.  If it's possible, I would like to finalize the
> > > discussions and start a vote.
> > > Let me know your thoughts.
> > >
> > > Thanks,
> > > Magesh
> > >
> > > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <
> mageshn@confluent.io>
> > > wrote:
> > >
> > > > Randall,
> > > >
> > > > The approach to return the to override configs could possibly make it
> > > > cumbersome to implement a custom policy. This is a new configuration
> > and
> > > if
> > > > you don't explicitly set it the existing behavior remains as-is. Like
> > > > Chris, I also preferred this approach for the sake of simplicity.  If
> > not
> > > > for the default `null` I would prefer to fall back to using `Ignore`
> > > which
> > > > is a misnomer to the interface spec but still gets the job done via
> > > > instanceOf checks. The other options I could think of are as below:-
> > > >
> > > >    - have an enforcePolicy() method in the interface which by default
> > > >    returns true and the Ignore implementation could return false
> > > >    - introduce another worker config allow.connector.config.overrides
> > > >    with a default value of false and the default policy can be None
> > > >
> > > > Let me know what you think.
> > > >
> > > > Thanks
> > > > Magesh
> > > >
> > > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
> > wrote:
> > > >
> > > >> Thanks, Chris. I still think it's strange to have a non-policy,
> since
> > > >> there's now special behavior for when the policy is not specified.
> > > >>
> > > >> Perhaps the inability for a policy implementation to represent the
> > > >> existing
> > > >> behavior suggests that the policy interface isn't quite right. Could
> > the
> > > >> policy's "validate" method take the overrides that were supplied and
> > > >> return
> > > >> the overrides that should be passed to the connector, yet still
> > throwing
> > > >> an
> > > >> exception if any supplied overrides are not allowed. Then the
> > different
> > > >> policy implementations might be:
> > > >>
> > > >>    - Ignore (default) - returns all supplied override properties
> > > >>    - None - throws exception if any override properties are
> supplied;
> > > >>    always returns empty map if no overrides are provided
> > > >>    - Principal - throws exception if other override properties are
> > > >>    provided, but returns an empty map (since no properties should be
> > > >> passed to
> > > >>    the connector)
> > > >>    - All - returns all provided override properties
> > > >>
> > > >> All override properties defined on the connector configuration would
> > be
> > > >> passed to the policy for validation, and assuming there's no error
> all
> > > of
> > > >> these overrides would be used in the producer/consumer/admin client.
> > The
> > > >> result of the policy call, however, is used to determine which of
> > these
> > > >> overrides are passed to the connector.
> > > >>
> > > >> This approach means that all behaviors can be implemented through a
> > > policy
> > > >> class, including the defaults. It also gives a bit more control to
> > > custom
> > > >> policies, should that be warranted. For example, validating the
> > provided
> > > >> client overrides but passing all such override properties to the
> > > >> connector,
> > > >> which as I stated earlier is something I think connectors likely
> don't
> > > >> look
> > > >> for.
> > > >>
> > > >> Thoughts?
> > > >>
> > > >> Randall
> > > >>
> > > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io>
> > > >> wrote:
> > > >>
> > > >> > Randall,
> > > >> >
> > > >> > The special behavior for null was my suggestion. There is no
> > > >> implementation
> > > >> > of the proposed interface that causes client overrides to be
> > ignored,
> > > so
> > > >> > the original idea was to have a special implementation that would
> be
> > > >> > checked for by the Connect framework (probably via the instanceof
> > > >> operator)
> > > >> > and, if present, cause all would-be overrides to be ignored.
> > > >> >
> > > >> > I thought this may be confusing to people who may see that
> behavior
> > > and
> > > >> > wonder how to recreate it themselves, so I suggested leaving that
> > > policy
> > > >> > out and replace it with a check to see if a policy was specified
> at
> > > all.
> > > >> >
> > > >> > Would be interested in your thoughts on this, especially if
> there's
> > an
> > > >> > alternative that hasn't been proposed yet.
> > > >> >
> > > >> > Cheers,
> > > >> >
> > > >> > Chris
> > > >> >
> > > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com>
> wrote:
> > > >> >
> > > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> > > >> mageshn@confluent.io>
> > > >> > > wrote:
> > > >> > >
> > > >> > > > Randall,
> > > >> > > >
> > > >> > > > Thanks a lot for your feedback.
> > > >> > > >
> > > >> > > > You bring up an interesting point regarding the overrides
> being
> > > >> > available
> > > >> > > > to the connectors. Today everything that is specified in the
> > > config
> > > >> > while
> > > >> > > > creating is available for the connector. But this is a
> specific
> > > case
> > > >> > and
> > > >> > > we
> > > >> > > > could do either of the following
> > > >> > > >
> > > >> > > >
> > > >> > > >    - don't pass any configs with these prefixes to the
> > > >> ConnectorConfig
> > > >> > > >    instance that's passed in the startConnector
> > > >> > > >    - allow policies as to whether the configurations with the
> > > >> prefixes
> > > >> > > >    should be made available to the connector or not. Should
> this
> > > >> also
> > > >> > > > define a
> > > >> > > >    list of configurations?
> > > >> > > >
> > > >> > > > I personally prefer not passing the configs to Connector since
> > > >> that's
> > > >> > > > simple, straight forward and don't see a reason for the
> > connector
> > > to
> > > >> > > access
> > > >> > > > those.
> > > >> > > >
> > > >> > >
> > > >> > > I agree that these override properties should be effectively new
> > > >> > > properties, in which case I'd also prefer that they be removed
> > from
> > > >> the
> > > >> > > configuration before it is passed to the connector. Yes, it is
> > > >> *possible*
> > > >> > > that an existing connector happened to use connector config
> > > properties
> > > >> > with
> > > >> > > these prefixes, but it's seems pretty unlikely.
> > > >> > >
> > > >> > > I'd love to hear whether other people agree.
> > > >> > >
> > > >> > >
> > > >> > > >
> > > >> > > > For the second point,  None - doesn't allow overrides and the
> > > >> default
> > > >> > > > policy is null. We preserve backward compatibility when no
> > policy
> > > is
> > > >> > > > configured. Let me know if that's not clear in the KIP.
> > > >> > > >
> > > >> > >
> > > >> > > Why not have a default policy (rather than null) that implements
> > the
> > > >> > > backward-compatible behavior? It seems strange to have null be
> the
> > > >> > default
> > > >> > > and for non-policy to allow anything.
> > > >> > >
> > > >> > >
> > > >> > > >
> > > >> > > > Thanks,
> > > >> > > > Magesh
> > > >> > > >
> > > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <
> rhauch@gmail.com
> > >
> > > >> > wrote:
> > > >> > > >
> > > >> > > > > Per the proposal, a connector configuration can define one
> or
> > > more
> > > >> > > > > properties that begin with any of the three prefixes:
> > > >> > > > "producer.override.",
> > > >> > > > > "consumer.override.", and "admin.override.". The proposal
> > > states:
> > > >> > > > >
> > > >> > > > > Since the users can specify any of these policies, the
> > > connectors
> > > >> > > itself
> > > >> > > > > should not rely on these configurations to be available. The
> > > >> > overrides
> > > >> > > > are
> > > >> > > > > to be used purely from an operational perspective.
> > > >> > > > >
> > > >> > > > >
> > > >> > > > > Does this mean that any such properties are visible to
> > > >> connectors, or
> > > >> > > > will
> > > >> > > > > they be hidden to connectors? Currently no connectors have
> > > access
> > > >> to
> > > >> > > such
> > > >> > > > > client properties, and users are unlike to just put them
> into
> > a
> > > >> > > connector
> > > >> > > > > configuration unnecessarily. A connector implementation
> could
> > > have
> > > >> > > > defined
> > > >> > > > > such properties as normal connector-specific properties, in
> > > which
> > > >> > case
> > > >> > > > they
> > > >> > > > > are required, but is that likely given the log prefixes? One
> > > >> concern
> > > >> > > > that I
> > > >> > > > > have is that this might allow connector implementations
> start
> > > >> > > attempting
> > > >> > > > to
> > > >> > > > > circumvent the Connect API if these properties are included.
> > > >> > > > >
> > > >> > > > > Second, does the None policy allow but ignore these
> additional
> > > >> > > properties
> > > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None
> > > policy
> > > >> > fail
> > > >> > > > if
> > > >> > > > > any client overrides are specified? The former seems more in
> > > line
> > > >> > with
> > > >> > > > the
> > > >> > > > > current behavior, whereas the "disallows" policy seems
> useful
> > > but
> > > >> not
> > > >> > > > > exactly backward compatible. Should we also offer a
> "Disallow"
> > > >> > policy?
> > > >> > > In
> > > >> > > > > fact, should the policies be named "Ignore" (default),
> > > "Disallow",
> > > >> > > > > "Prinicipal", and "All"?
> > > >> > > > >
> > > >> > > > > Otherwise, I like the idea of this. There have been several
> > > >> requests
> > > >> > > over
> > > >> > > > > the past year or two for adding subsets of this
> functionality.
> > > >> Might
> > > >> > be
> > > >> > > > > good to find and list all of the related KAFKA issues.
> > > >> > > > >
> > > >> > > > > Randall
> > > >> > > > >
> > > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> > > >> chrise@confluent.io>
> > > >> > > > wrote:
> > > >> > > > >
> > > >> > > > > > Hi Magesh,
> > > >> > > > > >
> > > >> > > > > > Changes look good to me! Excited to see this happen, hope
> > the
> > > >> KIP
> > > >> > > > passes
> > > >> > > > > :)
> > > >> > > > > >
> > > >> > > > > > Cheers,
> > > >> > > > > >
> > > >> > > > > > Chris
> > > >> > > > > >
> > > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > > >> > > > mageshn@confluent.io>
> > > >> > > > > > wrote:
> > > >> > > > > >
> > > >> > > > > > > Hi Chris,
> > > >> > > > > > >
> > > >> > > > > > > I have updated the KIP to reflect the changes that we
> > > >> discussed
> > > >> > for
> > > >> > > > the
> > > >> > > > > > > prefix. Thanks for all your inputs.
> > > >> > > > > > >
> > > >> > > > > > > Thanks,
> > > >> > > > > > > Magesh
> > > >> > > > > > >
> > > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> > > >> > chrise@confluent.io
> > > >> > > >
> > > >> > > > > > wrote:
> > > >> > > > > > >
> > > >> > > > > > > > Hi Magesh,
> > > >> > > > > > > >
> > > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't
> > > have a
> > > >> > > strong
> > > >> > > > > > > opinion
> > > >> > > > > > > > between `connector.` and `.override`, but I have a
> > slight
> > > >> > > > inclination
> > > >> > > > > > > > toward `.override` since `connector.` feels a little
> > > >> redundant
> > > >> > > > given
> > > >> > > > > > that
> > > >> > > > > > > > the whole configuration is for the connector and the
> use
> > > of
> > > >> > > > > "override"
> > > >> > > > > > > may
> > > >> > > > > > > > shed a little light on how the properties for these
> > > clients
> > > >> are
> > > >> > > > > > computed
> > > >> > > > > > > > and help make the learning curve a little gentler on
> new
> > > >> devs
> > > >> > and
> > > >> > > > > > users.
> > > >> > > > > > > >
> > > >> > > > > > > > Regardless, I think the larger issue of conflicts with
> > > >> existing
> > > >> > > > > > > properties
> > > >> > > > > > > > (both in MM2 and potentially other connectors) has
> been
> > > >> > > > > satisfactorily
> > > >> > > > > > > > addressed, so I'm happy.
> > > >> > > > > > > >
> > > >> > > > > > > > Cheers,
> > > >> > > > > > > >
> > > >> > > > > > > > Chris
> > > >> > > > > > > >
> > > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > >> > > > > > mageshn@confluent.io
> > > >> > > > > > > >
> > > >> > > > > > > > wrote:
> > > >> > > > > > > >
> > > >> > > > > > > > > HI Chrise,
> > > >> > > > > > > > >
> > > >> > > > > > > > > You are right about the "admin." prefix creating
> > > >> conflicts.
> > > >> > > Here
> > > >> > > > > are
> > > >> > > > > > > few
> > > >> > > > > > > > > options that I can think of
> > > >> > > > > > > > >
> > > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only
> for
> > > >> DLQ.
> > > >> > But
> > > >> > > > > this
> > > >> > > > > > > > might
> > > >> > > > > > > > > not really be the case in the future. So, we should
> > > >> possibly
> > > >> > > drop
> > > >> > > > > > this
> > > >> > > > > > > > idea
> > > >> > > > > > > > > :)
> > > >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer`
> and
> > > >> > > > > > > `connector.admin`
> > > >> > > > > > > > -
> > > >> > > > > > > > > provides better context that its connector specific
> > > >> property
> > > >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override`
> and
> > > >> > > > > > `admin.override`
> > > >> > > > > > > -
> > > >> > > > > > > > > provides better clarity that these are overrides.
> > > >> > > > > > > > >
> > > >> > > > > > > > > I don't have a strong opinion in choosing between #2
> > and
> > > >> #3.
> > > >> > > Let
> > > >> > > > me
> > > >> > > > > > > > > know what you think.
> > > >> > > > > > > > >
> > > >> > > > > > > > > Thanks
> > > >> > > > > > > > > Magesh
> > > >> > > > > > > > >
> > > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > > >> > > > > chrise@confluent.io>
> > > >> > > > > > > > > wrote:
> > > >> > > > > > > > >
> > > >> > > > > > > > > > Hi Magesh,
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > Next round :)
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> > > >> properties
> > > >> > > that
> > > >> > > > > > > affect
> > > >> > > > > > > > > > AdminClients it creates and uses, which IIUC is
> the
> > > same
> > > >> > > prefix
> > > >> > > > > > name
> > > >> > > > > > > to
> > > >> > > > > > > > > be
> > > >> > > > > > > > > > used for managing the DLQ for sink connectors in
> > this
> > > >> KIP.
> > > >> > > > > Doesn't
> > > >> > > > > > > that
> > > >> > > > > > > > > > still leave room for conflict? I'm imagining a
> > > scenario
> > > >> > like
> > > >> > > > > this:
> > > >> > > > > > a
> > > >> > > > > > > > > > Connect worker is configured to use the
> > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone
> tries
> > to
> > > >> > start
> > > >> > > an
> > > >> > > > > > > > instance
> > > >> > > > > > > > > of
> > > >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> > > >> > > > > > > > > "admin.sasl.jaas.config",
> > > >> > > > > > > > > > and gets rejected because those properties are
> then
> > > >> > > interpreted
> > > >> > > > > by
> > > >> > > > > > > the
> > > >> > > > > > > > > > worker as overrides for the AdminClient it uses to
> > > >> manage
> > > >> > the
> > > >> > > > > DLQ.
> > > >> > > > > > > > > > 2. (LGTM)
> > > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> > > >> > identifies a
> > > >> > > > > > common
> > > >> > > > > > > > use
> > > >> > > > > > > > > > case that would involve a similar client config
> > policy
> > > >> > > > > > implementation
> > > >> > > > > > > > > that
> > > >> > > > > > > > > > would be limited to a small set of whitelisted
> > > configs.
> > > >> For
> > > >> > > now
> > > >> > > > > > > keeping
> > > >> > > > > > > > > the
> > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine
> to
> > > me.
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > Cheers,
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > Chris
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh
> Nandakumar <
> > > >> > > > > > > > mageshn@confluent.io
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > wrote:
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > > Hi all,
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > I also have a draft implementation of the KIP
> > > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I
> > would
> > > >> still
> > > >> > > > need
> > > >> > > > > to
> > > >> > > > > > > > > include
> > > >> > > > > > > > > > > more tests and docs but I thought it would be
> > useful
> > > >> to
> > > >> > > have
> > > >> > > > > this
> > > >> > > > > > > for
> > > >> > > > > > > > > the
> > > >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> > > >> valuable
> > > >> > > > > feedback.
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > Thanks
> > > >> > > > > > > > > > > Magesh
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
> > Nandakumar <
> > > >> > > > > > > > > mageshn@confluent.io
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > wrote:
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > > Chrise,
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > Thanks a lot for your feedback. I will address
> > > them
> > > >> in
> > > >> > > > order
> > > >> > > > > of
> > > >> > > > > > > > your
> > > >> > > > > > > > > > > > questions/comments.
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > 1. Thanks for bringing this to my attention
> > about
> > > >> > > KIP-382.
> > > >> > > > I
> > > >> > > > > > had
> > > >> > > > > > > a
> > > >> > > > > > > > > > closer
> > > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> > > `consumer.`
> > > >> > > prefix
> > > >> > > > > for
> > > >> > > > > > > > > > > SourceConnector
> > > >> > > > > > > > > > > > and producer. prefix for SinkConnector since
> > those
> > > >> are
> > > >> > > > > > additional
> > > >> > > > > > > > > > > > connector properties to help resolve the Kafka
> > > >> cluster
> > > >> > > > other
> > > >> > > > > > than
> > > >> > > > > > > > the
> > > >> > > > > > > > > > one
> > > >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> > > >> proposal in
> > > >> > > > > KIP-458
> > > >> > > > > > > > > applies
> > > >> > > > > > > > > > > > producer policies for SinkConnectors and
> > consumer
> > > >> > > policies
> > > >> > > > > > > > > > > > SourceConnectors.  So, from what I understand
> > this
> > > >> new
> > > >> > > > policy
> > > >> > > > > > > > should
> > > >> > > > > > > > > > work
> > > >> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> > > >> > > > > > > > > > > > 2. I have updated the KIP to use a default
> value
> > > of
> > > >> > null
> > > >> > > > and
> > > >> > > > > > use
> > > >> > > > > > > > that
> > > >> > > > > > > > > > to
> > > >> > > > > > > > > > > > determine if we need to ignore overrides.
> > > >> > > > > > > > > > > > 3. I would still prefer to keep the special
> > > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > > >> > > > > > > > > > > > since that is one of the most common use cases
> > one
> > > >> > would
> > > >> > > > > choose
> > > >> > > > > > > to
> > > >> > > > > > > > > use
> > > >> > > > > > > > > > > this
> > > >> > > > > > > > > > > > feature. If we make it a general case, that
> > would
> > > >> > involve
> > > >> > > > > users
> > > >> > > > > > > > > > requiring
> > > >> > > > > > > > > > > > to add additional configuration and they might
> > > >> require
> > > >> > > well
> > > >> > > > > > more
> > > >> > > > > > > > than
> > > >> > > > > > > > > > > just
> > > >> > > > > > > > > > > > the list of configs but might also want some
> > > >> > restriction
> > > >> > > on
> > > >> > > > > > > values.
> > > >> > > > > > > > > If
> > > >> > > > > > > > > > > the
> > > >> > > > > > > > > > > > concern is about users wanting principal and
> > also
> > > >> other
> > > >> > > > > > configs,
> > > >> > > > > > > it
> > > >> > > > > > > > > > would
> > > >> > > > > > > > > > > > still be possible by means of a custom
> > > >> implementation.
> > > >> > As
> > > >> > > > > is, I
> > > >> > > > > > > > would
> > > >> > > > > > > > > > > > prefer to keep the proposal to be the same for
> > > this.
> > > >> > Let
> > > >> > > me
> > > >> > > > > > know
> > > >> > > > > > > > your
> > > >> > > > > > > > > > > > thoughts.
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > Thanks,
> > > >> > > > > > > > > > > > Magesh
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton
> <
> > > >> > > > > > > chrise@confluent.io
> > > >> > > > > > > > >
> > > >> > > > > > > > > > > wrote:
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > >> Hi Magesh,
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> > > >> > questions/comments
> > > >> > > > but
> > > >> > > > > > > > > overall I
> > > >> > > > > > > > > > > >> like
> > > >> > > > > > > > > > > >> the direction it's headed in and hope to see
> it
> > > >> > included
> > > >> > > > in
> > > >> > > > > > the
> > > >> > > > > > > > > > Connect
> > > >> > > > > > > > > > > >> framework soon.
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> 1. With the proposed "consumer.",
> "producer.",
> > > and
> > > >> > > > "admin."
> > > >> > > > > > > > > prefixes,
> > > >> > > > > > > > > > > how
> > > >> > > > > > > > > > > >> will this interact with connectors such as
> the
> > > >> > upcoming
> > > >> > > > > Mirror
> > > >> > > > > > > > Maker
> > > >> > > > > > > > > > 2.0
> > > >> > > > > > > > > > > >> (KIP-382) that already support properties
> with
> > > >> those
> > > >> > > > > prefixes?
> > > >> > > > > > > > Would
> > > >> > > > > > > > > > it
> > > >> > > > > > > > > > > be
> > > >> > > > > > > > > > > >> possible for a user to configure MM2 with
> those
> > > >> > > properties
> > > >> > > > > > > without
> > > >> > > > > > > > > > them
> > > >> > > > > > > > > > > >> being interpreted as Connect client
> overrides,
> > > >> without
> > > >> > > > > > isolating
> > > >> > > > > > > > MM2
> > > >> > > > > > > > > > > onto
> > > >> > > > > > > > > > > >> its own cluster and using the
> > > >> > > > > > IgnoreConnectorClientConfigPolicy
> > > >> > > > > > > > > > policy?
> > > >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy
> > class
> > > >> > > > necessary?
> > > >> > > > > > The
> > > >> > > > > > > > > > default
> > > >> > > > > > > > > > > >> for the connector.client.config.policy
> property
> > > >> could
> > > >> > > > simply
> > > >> > > > > > be
> > > >> > > > > > > > null
> > > >> > > > > > > > > > > >> instead of a new policy that, as far as I can
> > > tell,
> > > >> > > isn't
> > > >> > > > an
> > > >> > > > > > > > actual
> > > >> > > > > > > > > > > policy
> > > >> > > > > > > > > > > >> in that its validate(...) method is never
> > invoked
> > > >> and
> > > >> > > > > instead
> > > >> > > > > > > > > > > represents a
> > > >> > > > > > > > > > > >> special case to the Connect framework that
> says
> > > >> "Drop
> > > >> > > all
> > > >> > > > > > > > overrides
> > > >> > > > > > > > > > and
> > > >> > > > > > > > > > > >> never use me".
> > > >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy
> > seems
> > > >> > like a
> > > >> > > > > > > specific
> > > >> > > > > > > > > > > instance
> > > >> > > > > > > > > > > >> of a more general use case: allow exactly a
> > small
> > > >> set
> > > >> > of
> > > >> > > > > > > overrides
> > > >> > > > > > > > > and
> > > >> > > > > > > > > > > no
> > > >> > > > > > > > > > > >> others. Why not generalize here and create a
> > > policy
> > > >> > that
> > > >> > > > > > > accepts a
> > > >> > > > > > > > > > list
> > > >> > > > > > > > > > > of
> > > >> > > > > > > > > > > >> allowed overrides during configuration?
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> Thanks again for the KIP.
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> Cheers,
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> Chris
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> > > Nandakumar <
> > > >> > > > > > > > > > mageshn@confluent.io
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > >> wrote:
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> > Hi all,
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client
> Config
> > > >> > Override
> > > >> > > > > > > Policy",
> > > >> > > > > > > > > > which
> > > >> > > > > > > > > > > >> > allows users to override the connector
> client
> > > >> > > > > configurations
> > > >> > > > > > > > based
> > > >> > > > > > > > > > on
> > > >> > > > > > > > > > > a
> > > >> > > > > > > > > > > >> > policy defined by the administrator.
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > The KIP can be found at
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > >
> > > >> > > > > > > > >
> > > >> > > > > > > >
> > > >> > > > > > >
> > > >> > > > > >
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > >> > > > > > > > > > > >> > .
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > Looking forward for the discussion on the
> KIP
> > > and
> > > >> > all
> > > >> > > of
> > > >> > > > > > your
> > > >> > > > > > > > > > > thoughts &
> > > >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > Thanks,
> > > >> > > > > > > > > > > >> > Magesh
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > >
> > > >> > > > > > > > >
> > > >> > > > > > > >
> > > >> > > > > > >
> > > >> > > > > >
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > > >
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
Konstantine,

Thanks a lot for your feedback on the KIP. I have incorporated the feedback
using generics for Class. I have also updated the KIP to handle the default
value per Randall's suggestion. Let me know if you have any questions.

Thanks,
Magesh


On Mon, May 6, 2019 at 1:58 PM Konstantine Karantasis <
konstantine@confluent.io> wrote:

> Thanks for the KIP Magesh, it's quite useful towards the goals for more
> general multi-tenancy in Connect.
>
> Couple of comments from me too:
>
> I think the fact that the default policy is 'null' (no implementation)
> should be mentioned on the table next to the available implementations.
> Currently the KIP says: 'In addition to the default implementation, ..."
> but this is not very accurate because there is no concrete default
> implementation. Just special handling of 'null' in
> 'connector.client.config.policy'
>
> Regarding passing the overrides to the connector 'configure' method, I feel
> it wouldn't hurt to pass them, but I also agree that leaving this out at
> the moment is the safest option.
>
> Since the interfaces and classes are listed in the KIP, I'd like to note
> that Class is used as a raw type in field and return value declarations. We
> should use the generic type instead.
>
> Thanks for this improvement proposal!
> Konstantine
>
> On Mon, May 6, 2019 at 11:11 AM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > Randall,
> >
> > I was wondering if you had any thoughts on the above alternatives to deal
> > with a default policy.  If it's possible, I would like to finalize the
> > discussions and start a vote.
> > Let me know your thoughts.
> >
> > Thanks,
> > Magesh
> >
> > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <ma...@confluent.io>
> > wrote:
> >
> > > Randall,
> > >
> > > The approach to return the to override configs could possibly make it
> > > cumbersome to implement a custom policy. This is a new configuration
> and
> > if
> > > you don't explicitly set it the existing behavior remains as-is. Like
> > > Chris, I also preferred this approach for the sake of simplicity.  If
> not
> > > for the default `null` I would prefer to fall back to using `Ignore`
> > which
> > > is a misnomer to the interface spec but still gets the job done via
> > > instanceOf checks. The other options I could think of are as below:-
> > >
> > >    - have an enforcePolicy() method in the interface which by default
> > >    returns true and the Ignore implementation could return false
> > >    - introduce another worker config allow.connector.config.overrides
> > >    with a default value of false and the default policy can be None
> > >
> > > Let me know what you think.
> > >
> > > Thanks
> > > Magesh
> > >
> > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
> wrote:
> > >
> > >> Thanks, Chris. I still think it's strange to have a non-policy, since
> > >> there's now special behavior for when the policy is not specified.
> > >>
> > >> Perhaps the inability for a policy implementation to represent the
> > >> existing
> > >> behavior suggests that the policy interface isn't quite right. Could
> the
> > >> policy's "validate" method take the overrides that were supplied and
> > >> return
> > >> the overrides that should be passed to the connector, yet still
> throwing
> > >> an
> > >> exception if any supplied overrides are not allowed. Then the
> different
> > >> policy implementations might be:
> > >>
> > >>    - Ignore (default) - returns all supplied override properties
> > >>    - None - throws exception if any override properties are supplied;
> > >>    always returns empty map if no overrides are provided
> > >>    - Principal - throws exception if other override properties are
> > >>    provided, but returns an empty map (since no properties should be
> > >> passed to
> > >>    the connector)
> > >>    - All - returns all provided override properties
> > >>
> > >> All override properties defined on the connector configuration would
> be
> > >> passed to the policy for validation, and assuming there's no error all
> > of
> > >> these overrides would be used in the producer/consumer/admin client.
> The
> > >> result of the policy call, however, is used to determine which of
> these
> > >> overrides are passed to the connector.
> > >>
> > >> This approach means that all behaviors can be implemented through a
> > policy
> > >> class, including the defaults. It also gives a bit more control to
> > custom
> > >> policies, should that be warranted. For example, validating the
> provided
> > >> client overrides but passing all such override properties to the
> > >> connector,
> > >> which as I stated earlier is something I think connectors likely don't
> > >> look
> > >> for.
> > >>
> > >> Thoughts?
> > >>
> > >> Randall
> > >>
> > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io>
> > >> wrote:
> > >>
> > >> > Randall,
> > >> >
> > >> > The special behavior for null was my suggestion. There is no
> > >> implementation
> > >> > of the proposed interface that causes client overrides to be
> ignored,
> > so
> > >> > the original idea was to have a special implementation that would be
> > >> > checked for by the Connect framework (probably via the instanceof
> > >> operator)
> > >> > and, if present, cause all would-be overrides to be ignored.
> > >> >
> > >> > I thought this may be confusing to people who may see that behavior
> > and
> > >> > wonder how to recreate it themselves, so I suggested leaving that
> > policy
> > >> > out and replace it with a check to see if a policy was specified at
> > all.
> > >> >
> > >> > Would be interested in your thoughts on this, especially if there's
> an
> > >> > alternative that hasn't been proposed yet.
> > >> >
> > >> > Cheers,
> > >> >
> > >> > Chris
> > >> >
> > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:
> > >> >
> > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> > >> mageshn@confluent.io>
> > >> > > wrote:
> > >> > >
> > >> > > > Randall,
> > >> > > >
> > >> > > > Thanks a lot for your feedback.
> > >> > > >
> > >> > > > You bring up an interesting point regarding the overrides being
> > >> > available
> > >> > > > to the connectors. Today everything that is specified in the
> > config
> > >> > while
> > >> > > > creating is available for the connector. But this is a specific
> > case
> > >> > and
> > >> > > we
> > >> > > > could do either of the following
> > >> > > >
> > >> > > >
> > >> > > >    - don't pass any configs with these prefixes to the
> > >> ConnectorConfig
> > >> > > >    instance that's passed in the startConnector
> > >> > > >    - allow policies as to whether the configurations with the
> > >> prefixes
> > >> > > >    should be made available to the connector or not. Should this
> > >> also
> > >> > > > define a
> > >> > > >    list of configurations?
> > >> > > >
> > >> > > > I personally prefer not passing the configs to Connector since
> > >> that's
> > >> > > > simple, straight forward and don't see a reason for the
> connector
> > to
> > >> > > access
> > >> > > > those.
> > >> > > >
> > >> > >
> > >> > > I agree that these override properties should be effectively new
> > >> > > properties, in which case I'd also prefer that they be removed
> from
> > >> the
> > >> > > configuration before it is passed to the connector. Yes, it is
> > >> *possible*
> > >> > > that an existing connector happened to use connector config
> > properties
> > >> > with
> > >> > > these prefixes, but it's seems pretty unlikely.
> > >> > >
> > >> > > I'd love to hear whether other people agree.
> > >> > >
> > >> > >
> > >> > > >
> > >> > > > For the second point,  None - doesn't allow overrides and the
> > >> default
> > >> > > > policy is null. We preserve backward compatibility when no
> policy
> > is
> > >> > > > configured. Let me know if that's not clear in the KIP.
> > >> > > >
> > >> > >
> > >> > > Why not have a default policy (rather than null) that implements
> the
> > >> > > backward-compatible behavior? It seems strange to have null be the
> > >> > default
> > >> > > and for non-policy to allow anything.
> > >> > >
> > >> > >
> > >> > > >
> > >> > > > Thanks,
> > >> > > > Magesh
> > >> > > >
> > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rhauch@gmail.com
> >
> > >> > wrote:
> > >> > > >
> > >> > > > > Per the proposal, a connector configuration can define one or
> > more
> > >> > > > > properties that begin with any of the three prefixes:
> > >> > > > "producer.override.",
> > >> > > > > "consumer.override.", and "admin.override.". The proposal
> > states:
> > >> > > > >
> > >> > > > > Since the users can specify any of these policies, the
> > connectors
> > >> > > itself
> > >> > > > > should not rely on these configurations to be available. The
> > >> > overrides
> > >> > > > are
> > >> > > > > to be used purely from an operational perspective.
> > >> > > > >
> > >> > > > >
> > >> > > > > Does this mean that any such properties are visible to
> > >> connectors, or
> > >> > > > will
> > >> > > > > they be hidden to connectors? Currently no connectors have
> > access
> > >> to
> > >> > > such
> > >> > > > > client properties, and users are unlike to just put them into
> a
> > >> > > connector
> > >> > > > > configuration unnecessarily. A connector implementation could
> > have
> > >> > > > defined
> > >> > > > > such properties as normal connector-specific properties, in
> > which
> > >> > case
> > >> > > > they
> > >> > > > > are required, but is that likely given the log prefixes? One
> > >> concern
> > >> > > > that I
> > >> > > > > have is that this might allow connector implementations start
> > >> > > attempting
> > >> > > > to
> > >> > > > > circumvent the Connect API if these properties are included.
> > >> > > > >
> > >> > > > > Second, does the None policy allow but ignore these additional
> > >> > > properties
> > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None
> > policy
> > >> > fail
> > >> > > > if
> > >> > > > > any client overrides are specified? The former seems more in
> > line
> > >> > with
> > >> > > > the
> > >> > > > > current behavior, whereas the "disallows" policy seems useful
> > but
> > >> not
> > >> > > > > exactly backward compatible. Should we also offer a "Disallow"
> > >> > policy?
> > >> > > In
> > >> > > > > fact, should the policies be named "Ignore" (default),
> > "Disallow",
> > >> > > > > "Prinicipal", and "All"?
> > >> > > > >
> > >> > > > > Otherwise, I like the idea of this. There have been several
> > >> requests
> > >> > > over
> > >> > > > > the past year or two for adding subsets of this functionality.
> > >> Might
> > >> > be
> > >> > > > > good to find and list all of the related KAFKA issues.
> > >> > > > >
> > >> > > > > Randall
> > >> > > > >
> > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> > >> chrise@confluent.io>
> > >> > > > wrote:
> > >> > > > >
> > >> > > > > > Hi Magesh,
> > >> > > > > >
> > >> > > > > > Changes look good to me! Excited to see this happen, hope
> the
> > >> KIP
> > >> > > > passes
> > >> > > > > :)
> > >> > > > > >
> > >> > > > > > Cheers,
> > >> > > > > >
> > >> > > > > > Chris
> > >> > > > > >
> > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > >> > > > mageshn@confluent.io>
> > >> > > > > > wrote:
> > >> > > > > >
> > >> > > > > > > Hi Chris,
> > >> > > > > > >
> > >> > > > > > > I have updated the KIP to reflect the changes that we
> > >> discussed
> > >> > for
> > >> > > > the
> > >> > > > > > > prefix. Thanks for all your inputs.
> > >> > > > > > >
> > >> > > > > > > Thanks,
> > >> > > > > > > Magesh
> > >> > > > > > >
> > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> > >> > chrise@confluent.io
> > >> > > >
> > >> > > > > > wrote:
> > >> > > > > > >
> > >> > > > > > > > Hi Magesh,
> > >> > > > > > > >
> > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't
> > have a
> > >> > > strong
> > >> > > > > > > opinion
> > >> > > > > > > > between `connector.` and `.override`, but I have a
> slight
> > >> > > > inclination
> > >> > > > > > > > toward `.override` since `connector.` feels a little
> > >> redundant
> > >> > > > given
> > >> > > > > > that
> > >> > > > > > > > the whole configuration is for the connector and the use
> > of
> > >> > > > > "override"
> > >> > > > > > > may
> > >> > > > > > > > shed a little light on how the properties for these
> > clients
> > >> are
> > >> > > > > > computed
> > >> > > > > > > > and help make the learning curve a little gentler on new
> > >> devs
> > >> > and
> > >> > > > > > users.
> > >> > > > > > > >
> > >> > > > > > > > Regardless, I think the larger issue of conflicts with
> > >> existing
> > >> > > > > > > properties
> > >> > > > > > > > (both in MM2 and potentially other connectors) has been
> > >> > > > > satisfactorily
> > >> > > > > > > > addressed, so I'm happy.
> > >> > > > > > > >
> > >> > > > > > > > Cheers,
> > >> > > > > > > >
> > >> > > > > > > > Chris
> > >> > > > > > > >
> > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > >> > > > > > mageshn@confluent.io
> > >> > > > > > > >
> > >> > > > > > > > wrote:
> > >> > > > > > > >
> > >> > > > > > > > > HI Chrise,
> > >> > > > > > > > >
> > >> > > > > > > > > You are right about the "admin." prefix creating
> > >> conflicts.
> > >> > > Here
> > >> > > > > are
> > >> > > > > > > few
> > >> > > > > > > > > options that I can think of
> > >> > > > > > > > >
> > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only for
> > >> DLQ.
> > >> > But
> > >> > > > > this
> > >> > > > > > > > might
> > >> > > > > > > > > not really be the case in the future. So, we should
> > >> possibly
> > >> > > drop
> > >> > > > > > this
> > >> > > > > > > > idea
> > >> > > > > > > > > :)
> > >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> > >> > > > > > > `connector.admin`
> > >> > > > > > > > -
> > >> > > > > > > > > provides better context that its connector specific
> > >> property
> > >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override` and
> > >> > > > > > `admin.override`
> > >> > > > > > > -
> > >> > > > > > > > > provides better clarity that these are overrides.
> > >> > > > > > > > >
> > >> > > > > > > > > I don't have a strong opinion in choosing between #2
> and
> > >> #3.
> > >> > > Let
> > >> > > > me
> > >> > > > > > > > > know what you think.
> > >> > > > > > > > >
> > >> > > > > > > > > Thanks
> > >> > > > > > > > > Magesh
> > >> > > > > > > > >
> > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > >> > > > > chrise@confluent.io>
> > >> > > > > > > > > wrote:
> > >> > > > > > > > >
> > >> > > > > > > > > > Hi Magesh,
> > >> > > > > > > > > >
> > >> > > > > > > > > > Next round :)
> > >> > > > > > > > > >
> > >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> > >> properties
> > >> > > that
> > >> > > > > > > affect
> > >> > > > > > > > > > AdminClients it creates and uses, which IIUC is the
> > same
> > >> > > prefix
> > >> > > > > > name
> > >> > > > > > > to
> > >> > > > > > > > > be
> > >> > > > > > > > > > used for managing the DLQ for sink connectors in
> this
> > >> KIP.
> > >> > > > > Doesn't
> > >> > > > > > > that
> > >> > > > > > > > > > still leave room for conflict? I'm imagining a
> > scenario
> > >> > like
> > >> > > > > this:
> > >> > > > > > a
> > >> > > > > > > > > > Connect worker is configured to use the
> > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries
> to
> > >> > start
> > >> > > an
> > >> > > > > > > > instance
> > >> > > > > > > > > of
> > >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> > >> > > > > > > > > "admin.sasl.jaas.config",
> > >> > > > > > > > > > and gets rejected because those properties are then
> > >> > > interpreted
> > >> > > > > by
> > >> > > > > > > the
> > >> > > > > > > > > > worker as overrides for the AdminClient it uses to
> > >> manage
> > >> > the
> > >> > > > > DLQ.
> > >> > > > > > > > > > 2. (LGTM)
> > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> > >> > identifies a
> > >> > > > > > common
> > >> > > > > > > > use
> > >> > > > > > > > > > case that would involve a similar client config
> policy
> > >> > > > > > implementation
> > >> > > > > > > > > that
> > >> > > > > > > > > > would be limited to a small set of whitelisted
> > configs.
> > >> For
> > >> > > now
> > >> > > > > > > keeping
> > >> > > > > > > > > the
> > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to
> > me.
> > >> > > > > > > > > >
> > >> > > > > > > > > > Cheers,
> > >> > > > > > > > > >
> > >> > > > > > > > > > Chris
> > >> > > > > > > > > >
> > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> > >> > > > > > > > mageshn@confluent.io
> > >> > > > > > > > > >
> > >> > > > > > > > > > wrote:
> > >> > > > > > > > > >
> > >> > > > > > > > > > > Hi all,
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > I also have a draft implementation of the KIP
> > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I
> would
> > >> still
> > >> > > > need
> > >> > > > > to
> > >> > > > > > > > > include
> > >> > > > > > > > > > > more tests and docs but I thought it would be
> useful
> > >> to
> > >> > > have
> > >> > > > > this
> > >> > > > > > > for
> > >> > > > > > > > > the
> > >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> > >> valuable
> > >> > > > > feedback.
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > Thanks
> > >> > > > > > > > > > > Magesh
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
> Nandakumar <
> > >> > > > > > > > > mageshn@confluent.io
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > wrote:
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > > Chrise,
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > Thanks a lot for your feedback. I will address
> > them
> > >> in
> > >> > > > order
> > >> > > > > of
> > >> > > > > > > > your
> > >> > > > > > > > > > > > questions/comments.
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > 1. Thanks for bringing this to my attention
> about
> > >> > > KIP-382.
> > >> > > > I
> > >> > > > > > had
> > >> > > > > > > a
> > >> > > > > > > > > > closer
> > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> > `consumer.`
> > >> > > prefix
> > >> > > > > for
> > >> > > > > > > > > > > SourceConnector
> > >> > > > > > > > > > > > and producer. prefix for SinkConnector since
> those
> > >> are
> > >> > > > > > additional
> > >> > > > > > > > > > > > connector properties to help resolve the Kafka
> > >> cluster
> > >> > > > other
> > >> > > > > > than
> > >> > > > > > > > the
> > >> > > > > > > > > > one
> > >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> > >> proposal in
> > >> > > > > KIP-458
> > >> > > > > > > > > applies
> > >> > > > > > > > > > > > producer policies for SinkConnectors and
> consumer
> > >> > > policies
> > >> > > > > > > > > > > > SourceConnectors.  So, from what I understand
> this
> > >> new
> > >> > > > policy
> > >> > > > > > > > should
> > >> > > > > > > > > > work
> > >> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> > >> > > > > > > > > > > > 2. I have updated the KIP to use a default value
> > of
> > >> > null
> > >> > > > and
> > >> > > > > > use
> > >> > > > > > > > that
> > >> > > > > > > > > > to
> > >> > > > > > > > > > > > determine if we need to ignore overrides.
> > >> > > > > > > > > > > > 3. I would still prefer to keep the special
> > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > >> > > > > > > > > > > > since that is one of the most common use cases
> one
> > >> > would
> > >> > > > > choose
> > >> > > > > > > to
> > >> > > > > > > > > use
> > >> > > > > > > > > > > this
> > >> > > > > > > > > > > > feature. If we make it a general case, that
> would
> > >> > involve
> > >> > > > > users
> > >> > > > > > > > > > requiring
> > >> > > > > > > > > > > > to add additional configuration and they might
> > >> require
> > >> > > well
> > >> > > > > > more
> > >> > > > > > > > than
> > >> > > > > > > > > > > just
> > >> > > > > > > > > > > > the list of configs but might also want some
> > >> > restriction
> > >> > > on
> > >> > > > > > > values.
> > >> > > > > > > > > If
> > >> > > > > > > > > > > the
> > >> > > > > > > > > > > > concern is about users wanting principal and
> also
> > >> other
> > >> > > > > > configs,
> > >> > > > > > > it
> > >> > > > > > > > > > would
> > >> > > > > > > > > > > > still be possible by means of a custom
> > >> implementation.
> > >> > As
> > >> > > > > is, I
> > >> > > > > > > > would
> > >> > > > > > > > > > > > prefer to keep the proposal to be the same for
> > this.
> > >> > Let
> > >> > > me
> > >> > > > > > know
> > >> > > > > > > > your
> > >> > > > > > > > > > > > thoughts.
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > Thanks,
> > >> > > > > > > > > > > > Magesh
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> > >> > > > > > > chrise@confluent.io
> > >> > > > > > > > >
> > >> > > > > > > > > > > wrote:
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > >> Hi Magesh,
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> > >> > questions/comments
> > >> > > > but
> > >> > > > > > > > > overall I
> > >> > > > > > > > > > > >> like
> > >> > > > > > > > > > > >> the direction it's headed in and hope to see it
> > >> > included
> > >> > > > in
> > >> > > > > > the
> > >> > > > > > > > > > Connect
> > >> > > > > > > > > > > >> framework soon.
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> 1. With the proposed "consumer.", "producer.",
> > and
> > >> > > > "admin."
> > >> > > > > > > > > prefixes,
> > >> > > > > > > > > > > how
> > >> > > > > > > > > > > >> will this interact with connectors such as the
> > >> > upcoming
> > >> > > > > Mirror
> > >> > > > > > > > Maker
> > >> > > > > > > > > > 2.0
> > >> > > > > > > > > > > >> (KIP-382) that already support properties with
> > >> those
> > >> > > > > prefixes?
> > >> > > > > > > > Would
> > >> > > > > > > > > > it
> > >> > > > > > > > > > > be
> > >> > > > > > > > > > > >> possible for a user to configure MM2 with those
> > >> > > properties
> > >> > > > > > > without
> > >> > > > > > > > > > them
> > >> > > > > > > > > > > >> being interpreted as Connect client overrides,
> > >> without
> > >> > > > > > isolating
> > >> > > > > > > > MM2
> > >> > > > > > > > > > > onto
> > >> > > > > > > > > > > >> its own cluster and using the
> > >> > > > > > IgnoreConnectorClientConfigPolicy
> > >> > > > > > > > > > policy?
> > >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy
> class
> > >> > > > necessary?
> > >> > > > > > The
> > >> > > > > > > > > > default
> > >> > > > > > > > > > > >> for the connector.client.config.policy property
> > >> could
> > >> > > > simply
> > >> > > > > > be
> > >> > > > > > > > null
> > >> > > > > > > > > > > >> instead of a new policy that, as far as I can
> > tell,
> > >> > > isn't
> > >> > > > an
> > >> > > > > > > > actual
> > >> > > > > > > > > > > policy
> > >> > > > > > > > > > > >> in that its validate(...) method is never
> invoked
> > >> and
> > >> > > > > instead
> > >> > > > > > > > > > > represents a
> > >> > > > > > > > > > > >> special case to the Connect framework that says
> > >> "Drop
> > >> > > all
> > >> > > > > > > > overrides
> > >> > > > > > > > > > and
> > >> > > > > > > > > > > >> never use me".
> > >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy
> seems
> > >> > like a
> > >> > > > > > > specific
> > >> > > > > > > > > > > instance
> > >> > > > > > > > > > > >> of a more general use case: allow exactly a
> small
> > >> set
> > >> > of
> > >> > > > > > > overrides
> > >> > > > > > > > > and
> > >> > > > > > > > > > > no
> > >> > > > > > > > > > > >> others. Why not generalize here and create a
> > policy
> > >> > that
> > >> > > > > > > accepts a
> > >> > > > > > > > > > list
> > >> > > > > > > > > > > of
> > >> > > > > > > > > > > >> allowed overrides during configuration?
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> Thanks again for the KIP.
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> Cheers,
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> Chris
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> > Nandakumar <
> > >> > > > > > > > > > mageshn@confluent.io
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > >> wrote:
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> > Hi all,
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client Config
> > >> > Override
> > >> > > > > > > Policy",
> > >> > > > > > > > > > which
> > >> > > > > > > > > > > >> > allows users to override the connector client
> > >> > > > > configurations
> > >> > > > > > > > based
> > >> > > > > > > > > > on
> > >> > > > > > > > > > > a
> > >> > > > > > > > > > > >> > policy defined by the administrator.
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > The KIP can be found at
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > >
> > >> > > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > >> > > > > > > > > > > >> > .
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > Looking forward for the discussion on the KIP
> > and
> > >> > all
> > >> > > of
> > >> > > > > > your
> > >> > > > > > > > > > > thoughts &
> > >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > Thanks,
> > >> > > > > > > > > > > >> > Magesh
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > >
> > >> > > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Konstantine Karantasis <ko...@confluent.io>.
Thanks for the KIP Magesh, it's quite useful towards the goals for more
general multi-tenancy in Connect.

Couple of comments from me too:

I think the fact that the default policy is 'null' (no implementation)
should be mentioned on the table next to the available implementations.
Currently the KIP says: 'In addition to the default implementation, ..."
but this is not very accurate because there is no concrete default
implementation. Just special handling of 'null' in
'connector.client.config.policy'

Regarding passing the overrides to the connector 'configure' method, I feel
it wouldn't hurt to pass them, but I also agree that leaving this out at
the moment is the safest option.

Since the interfaces and classes are listed in the KIP, I'd like to note
that Class is used as a raw type in field and return value declarations. We
should use the generic type instead.

Thanks for this improvement proposal!
Konstantine

On Mon, May 6, 2019 at 11:11 AM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Randall,
>
> I was wondering if you had any thoughts on the above alternatives to deal
> with a default policy.  If it's possible, I would like to finalize the
> discussions and start a vote.
> Let me know your thoughts.
>
> Thanks,
> Magesh
>
> On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > Randall,
> >
> > The approach to return the to override configs could possibly make it
> > cumbersome to implement a custom policy. This is a new configuration and
> if
> > you don't explicitly set it the existing behavior remains as-is. Like
> > Chris, I also preferred this approach for the sake of simplicity.  If not
> > for the default `null` I would prefer to fall back to using `Ignore`
> which
> > is a misnomer to the interface spec but still gets the job done via
> > instanceOf checks. The other options I could think of are as below:-
> >
> >    - have an enforcePolicy() method in the interface which by default
> >    returns true and the Ignore implementation could return false
> >    - introduce another worker config allow.connector.config.overrides
> >    with a default value of false and the default policy can be None
> >
> > Let me know what you think.
> >
> > Thanks
> > Magesh
> >
> > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:
> >
> >> Thanks, Chris. I still think it's strange to have a non-policy, since
> >> there's now special behavior for when the policy is not specified.
> >>
> >> Perhaps the inability for a policy implementation to represent the
> >> existing
> >> behavior suggests that the policy interface isn't quite right. Could the
> >> policy's "validate" method take the overrides that were supplied and
> >> return
> >> the overrides that should be passed to the connector, yet still throwing
> >> an
> >> exception if any supplied overrides are not allowed. Then the different
> >> policy implementations might be:
> >>
> >>    - Ignore (default) - returns all supplied override properties
> >>    - None - throws exception if any override properties are supplied;
> >>    always returns empty map if no overrides are provided
> >>    - Principal - throws exception if other override properties are
> >>    provided, but returns an empty map (since no properties should be
> >> passed to
> >>    the connector)
> >>    - All - returns all provided override properties
> >>
> >> All override properties defined on the connector configuration would be
> >> passed to the policy for validation, and assuming there's no error all
> of
> >> these overrides would be used in the producer/consumer/admin client. The
> >> result of the policy call, however, is used to determine which of these
> >> overrides are passed to the connector.
> >>
> >> This approach means that all behaviors can be implemented through a
> policy
> >> class, including the defaults. It also gives a bit more control to
> custom
> >> policies, should that be warranted. For example, validating the provided
> >> client overrides but passing all such override properties to the
> >> connector,
> >> which as I stated earlier is something I think connectors likely don't
> >> look
> >> for.
> >>
> >> Thoughts?
> >>
> >> Randall
> >>
> >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io>
> >> wrote:
> >>
> >> > Randall,
> >> >
> >> > The special behavior for null was my suggestion. There is no
> >> implementation
> >> > of the proposed interface that causes client overrides to be ignored,
> so
> >> > the original idea was to have a special implementation that would be
> >> > checked for by the Connect framework (probably via the instanceof
> >> operator)
> >> > and, if present, cause all would-be overrides to be ignored.
> >> >
> >> > I thought this may be confusing to people who may see that behavior
> and
> >> > wonder how to recreate it themselves, so I suggested leaving that
> policy
> >> > out and replace it with a check to see if a policy was specified at
> all.
> >> >
> >> > Would be interested in your thoughts on this, especially if there's an
> >> > alternative that hasn't been proposed yet.
> >> >
> >> > Cheers,
> >> >
> >> > Chris
> >> >
> >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:
> >> >
> >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> >> mageshn@confluent.io>
> >> > > wrote:
> >> > >
> >> > > > Randall,
> >> > > >
> >> > > > Thanks a lot for your feedback.
> >> > > >
> >> > > > You bring up an interesting point regarding the overrides being
> >> > available
> >> > > > to the connectors. Today everything that is specified in the
> config
> >> > while
> >> > > > creating is available for the connector. But this is a specific
> case
> >> > and
> >> > > we
> >> > > > could do either of the following
> >> > > >
> >> > > >
> >> > > >    - don't pass any configs with these prefixes to the
> >> ConnectorConfig
> >> > > >    instance that's passed in the startConnector
> >> > > >    - allow policies as to whether the configurations with the
> >> prefixes
> >> > > >    should be made available to the connector or not. Should this
> >> also
> >> > > > define a
> >> > > >    list of configurations?
> >> > > >
> >> > > > I personally prefer not passing the configs to Connector since
> >> that's
> >> > > > simple, straight forward and don't see a reason for the connector
> to
> >> > > access
> >> > > > those.
> >> > > >
> >> > >
> >> > > I agree that these override properties should be effectively new
> >> > > properties, in which case I'd also prefer that they be removed from
> >> the
> >> > > configuration before it is passed to the connector. Yes, it is
> >> *possible*
> >> > > that an existing connector happened to use connector config
> properties
> >> > with
> >> > > these prefixes, but it's seems pretty unlikely.
> >> > >
> >> > > I'd love to hear whether other people agree.
> >> > >
> >> > >
> >> > > >
> >> > > > For the second point,  None - doesn't allow overrides and the
> >> default
> >> > > > policy is null. We preserve backward compatibility when no policy
> is
> >> > > > configured. Let me know if that's not clear in the KIP.
> >> > > >
> >> > >
> >> > > Why not have a default policy (rather than null) that implements the
> >> > > backward-compatible behavior? It seems strange to have null be the
> >> > default
> >> > > and for non-policy to allow anything.
> >> > >
> >> > >
> >> > > >
> >> > > > Thanks,
> >> > > > Magesh
> >> > > >
> >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rh...@gmail.com>
> >> > wrote:
> >> > > >
> >> > > > > Per the proposal, a connector configuration can define one or
> more
> >> > > > > properties that begin with any of the three prefixes:
> >> > > > "producer.override.",
> >> > > > > "consumer.override.", and "admin.override.". The proposal
> states:
> >> > > > >
> >> > > > > Since the users can specify any of these policies, the
> connectors
> >> > > itself
> >> > > > > should not rely on these configurations to be available. The
> >> > overrides
> >> > > > are
> >> > > > > to be used purely from an operational perspective.
> >> > > > >
> >> > > > >
> >> > > > > Does this mean that any such properties are visible to
> >> connectors, or
> >> > > > will
> >> > > > > they be hidden to connectors? Currently no connectors have
> access
> >> to
> >> > > such
> >> > > > > client properties, and users are unlike to just put them into a
> >> > > connector
> >> > > > > configuration unnecessarily. A connector implementation could
> have
> >> > > > defined
> >> > > > > such properties as normal connector-specific properties, in
> which
> >> > case
> >> > > > they
> >> > > > > are required, but is that likely given the log prefixes? One
> >> concern
> >> > > > that I
> >> > > > > have is that this might allow connector implementations start
> >> > > attempting
> >> > > > to
> >> > > > > circumvent the Connect API if these properties are included.
> >> > > > >
> >> > > > > Second, does the None policy allow but ignore these additional
> >> > > properties
> >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None
> policy
> >> > fail
> >> > > > if
> >> > > > > any client overrides are specified? The former seems more in
> line
> >> > with
> >> > > > the
> >> > > > > current behavior, whereas the "disallows" policy seems useful
> but
> >> not
> >> > > > > exactly backward compatible. Should we also offer a "Disallow"
> >> > policy?
> >> > > In
> >> > > > > fact, should the policies be named "Ignore" (default),
> "Disallow",
> >> > > > > "Prinicipal", and "All"?
> >> > > > >
> >> > > > > Otherwise, I like the idea of this. There have been several
> >> requests
> >> > > over
> >> > > > > the past year or two for adding subsets of this functionality.
> >> Might
> >> > be
> >> > > > > good to find and list all of the related KAFKA issues.
> >> > > > >
> >> > > > > Randall
> >> > > > >
> >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> >> chrise@confluent.io>
> >> > > > wrote:
> >> > > > >
> >> > > > > > Hi Magesh,
> >> > > > > >
> >> > > > > > Changes look good to me! Excited to see this happen, hope the
> >> KIP
> >> > > > passes
> >> > > > > :)
> >> > > > > >
> >> > > > > > Cheers,
> >> > > > > >
> >> > > > > > Chris
> >> > > > > >
> >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> >> > > > mageshn@confluent.io>
> >> > > > > > wrote:
> >> > > > > >
> >> > > > > > > Hi Chris,
> >> > > > > > >
> >> > > > > > > I have updated the KIP to reflect the changes that we
> >> discussed
> >> > for
> >> > > > the
> >> > > > > > > prefix. Thanks for all your inputs.
> >> > > > > > >
> >> > > > > > > Thanks,
> >> > > > > > > Magesh
> >> > > > > > >
> >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> >> > chrise@confluent.io
> >> > > >
> >> > > > > > wrote:
> >> > > > > > >
> >> > > > > > > > Hi Magesh,
> >> > > > > > > >
> >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't
> have a
> >> > > strong
> >> > > > > > > opinion
> >> > > > > > > > between `connector.` and `.override`, but I have a slight
> >> > > > inclination
> >> > > > > > > > toward `.override` since `connector.` feels a little
> >> redundant
> >> > > > given
> >> > > > > > that
> >> > > > > > > > the whole configuration is for the connector and the use
> of
> >> > > > > "override"
> >> > > > > > > may
> >> > > > > > > > shed a little light on how the properties for these
> clients
> >> are
> >> > > > > > computed
> >> > > > > > > > and help make the learning curve a little gentler on new
> >> devs
> >> > and
> >> > > > > > users.
> >> > > > > > > >
> >> > > > > > > > Regardless, I think the larger issue of conflicts with
> >> existing
> >> > > > > > > properties
> >> > > > > > > > (both in MM2 and potentially other connectors) has been
> >> > > > > satisfactorily
> >> > > > > > > > addressed, so I'm happy.
> >> > > > > > > >
> >> > > > > > > > Cheers,
> >> > > > > > > >
> >> > > > > > > > Chris
> >> > > > > > > >
> >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> >> > > > > > mageshn@confluent.io
> >> > > > > > > >
> >> > > > > > > > wrote:
> >> > > > > > > >
> >> > > > > > > > > HI Chrise,
> >> > > > > > > > >
> >> > > > > > > > > You are right about the "admin." prefix creating
> >> conflicts.
> >> > > Here
> >> > > > > are
> >> > > > > > > few
> >> > > > > > > > > options that I can think of
> >> > > > > > > > >
> >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only for
> >> DLQ.
> >> > But
> >> > > > > this
> >> > > > > > > > might
> >> > > > > > > > > not really be the case in the future. So, we should
> >> possibly
> >> > > drop
> >> > > > > > this
> >> > > > > > > > idea
> >> > > > > > > > > :)
> >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> >> > > > > > > `connector.admin`
> >> > > > > > > > -
> >> > > > > > > > > provides better context that its connector specific
> >> property
> >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override` and
> >> > > > > > `admin.override`
> >> > > > > > > -
> >> > > > > > > > > provides better clarity that these are overrides.
> >> > > > > > > > >
> >> > > > > > > > > I don't have a strong opinion in choosing between #2 and
> >> #3.
> >> > > Let
> >> > > > me
> >> > > > > > > > > know what you think.
> >> > > > > > > > >
> >> > > > > > > > > Thanks
> >> > > > > > > > > Magesh
> >> > > > > > > > >
> >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> >> > > > > chrise@confluent.io>
> >> > > > > > > > > wrote:
> >> > > > > > > > >
> >> > > > > > > > > > Hi Magesh,
> >> > > > > > > > > >
> >> > > > > > > > > > Next round :)
> >> > > > > > > > > >
> >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> >> properties
> >> > > that
> >> > > > > > > affect
> >> > > > > > > > > > AdminClients it creates and uses, which IIUC is the
> same
> >> > > prefix
> >> > > > > > name
> >> > > > > > > to
> >> > > > > > > > > be
> >> > > > > > > > > > used for managing the DLQ for sink connectors in this
> >> KIP.
> >> > > > > Doesn't
> >> > > > > > > that
> >> > > > > > > > > > still leave room for conflict? I'm imagining a
> scenario
> >> > like
> >> > > > > this:
> >> > > > > > a
> >> > > > > > > > > > Connect worker is configured to use the
> >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries to
> >> > start
> >> > > an
> >> > > > > > > > instance
> >> > > > > > > > > of
> >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> >> > > > > > > > > "admin.sasl.jaas.config",
> >> > > > > > > > > > and gets rejected because those properties are then
> >> > > interpreted
> >> > > > > by
> >> > > > > > > the
> >> > > > > > > > > > worker as overrides for the AdminClient it uses to
> >> manage
> >> > the
> >> > > > > DLQ.
> >> > > > > > > > > > 2. (LGTM)
> >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> >> > identifies a
> >> > > > > > common
> >> > > > > > > > use
> >> > > > > > > > > > case that would involve a similar client config policy
> >> > > > > > implementation
> >> > > > > > > > > that
> >> > > > > > > > > > would be limited to a small set of whitelisted
> configs.
> >> For
> >> > > now
> >> > > > > > > keeping
> >> > > > > > > > > the
> >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to
> me.
> >> > > > > > > > > >
> >> > > > > > > > > > Cheers,
> >> > > > > > > > > >
> >> > > > > > > > > > Chris
> >> > > > > > > > > >
> >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> >> > > > > > > > mageshn@confluent.io
> >> > > > > > > > > >
> >> > > > > > > > > > wrote:
> >> > > > > > > > > >
> >> > > > > > > > > > > Hi all,
> >> > > > > > > > > > >
> >> > > > > > > > > > > I also have a draft implementation of the KIP
> >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I would
> >> still
> >> > > > need
> >> > > > > to
> >> > > > > > > > > include
> >> > > > > > > > > > > more tests and docs but I thought it would be useful
> >> to
> >> > > have
> >> > > > > this
> >> > > > > > > for
> >> > > > > > > > > the
> >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> >> valuable
> >> > > > > feedback.
> >> > > > > > > > > > >
> >> > > > > > > > > > > Thanks
> >> > > > > > > > > > > Magesh
> >> > > > > > > > > > >
> >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh Nandakumar <
> >> > > > > > > > > mageshn@confluent.io
> >> > > > > > > > > > >
> >> > > > > > > > > > > wrote:
> >> > > > > > > > > > >
> >> > > > > > > > > > > > Chrise,
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > Thanks a lot for your feedback. I will address
> them
> >> in
> >> > > > order
> >> > > > > of
> >> > > > > > > > your
> >> > > > > > > > > > > > questions/comments.
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > 1. Thanks for bringing this to my attention about
> >> > > KIP-382.
> >> > > > I
> >> > > > > > had
> >> > > > > > > a
> >> > > > > > > > > > closer
> >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> `consumer.`
> >> > > prefix
> >> > > > > for
> >> > > > > > > > > > > SourceConnector
> >> > > > > > > > > > > > and producer. prefix for SinkConnector since those
> >> are
> >> > > > > > additional
> >> > > > > > > > > > > > connector properties to help resolve the Kafka
> >> cluster
> >> > > > other
> >> > > > > > than
> >> > > > > > > > the
> >> > > > > > > > > > one
> >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> >> proposal in
> >> > > > > KIP-458
> >> > > > > > > > > applies
> >> > > > > > > > > > > > producer policies for SinkConnectors and consumer
> >> > > policies
> >> > > > > > > > > > > > SourceConnectors.  So, from what I understand this
> >> new
> >> > > > policy
> >> > > > > > > > should
> >> > > > > > > > > > work
> >> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> >> > > > > > > > > > > > 2. I have updated the KIP to use a default value
> of
> >> > null
> >> > > > and
> >> > > > > > use
> >> > > > > > > > that
> >> > > > > > > > > > to
> >> > > > > > > > > > > > determine if we need to ignore overrides.
> >> > > > > > > > > > > > 3. I would still prefer to keep the special
> >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> >> > > > > > > > > > > > since that is one of the most common use cases one
> >> > would
> >> > > > > choose
> >> > > > > > > to
> >> > > > > > > > > use
> >> > > > > > > > > > > this
> >> > > > > > > > > > > > feature. If we make it a general case, that would
> >> > involve
> >> > > > > users
> >> > > > > > > > > > requiring
> >> > > > > > > > > > > > to add additional configuration and they might
> >> require
> >> > > well
> >> > > > > > more
> >> > > > > > > > than
> >> > > > > > > > > > > just
> >> > > > > > > > > > > > the list of configs but might also want some
> >> > restriction
> >> > > on
> >> > > > > > > values.
> >> > > > > > > > > If
> >> > > > > > > > > > > the
> >> > > > > > > > > > > > concern is about users wanting principal and also
> >> other
> >> > > > > > configs,
> >> > > > > > > it
> >> > > > > > > > > > would
> >> > > > > > > > > > > > still be possible by means of a custom
> >> implementation.
> >> > As
> >> > > > > is, I
> >> > > > > > > > would
> >> > > > > > > > > > > > prefer to keep the proposal to be the same for
> this.
> >> > Let
> >> > > me
> >> > > > > > know
> >> > > > > > > > your
> >> > > > > > > > > > > > thoughts.
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > Thanks,
> >> > > > > > > > > > > > Magesh
> >> > > > > > > > > > > >
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> >> > > > > > > chrise@confluent.io
> >> > > > > > > > >
> >> > > > > > > > > > > wrote:
> >> > > > > > > > > > > >
> >> > > > > > > > > > > >> Hi Magesh,
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> >> > questions/comments
> >> > > > but
> >> > > > > > > > > overall I
> >> > > > > > > > > > > >> like
> >> > > > > > > > > > > >> the direction it's headed in and hope to see it
> >> > included
> >> > > > in
> >> > > > > > the
> >> > > > > > > > > > Connect
> >> > > > > > > > > > > >> framework soon.
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> 1. With the proposed "consumer.", "producer.",
> and
> >> > > > "admin."
> >> > > > > > > > > prefixes,
> >> > > > > > > > > > > how
> >> > > > > > > > > > > >> will this interact with connectors such as the
> >> > upcoming
> >> > > > > Mirror
> >> > > > > > > > Maker
> >> > > > > > > > > > 2.0
> >> > > > > > > > > > > >> (KIP-382) that already support properties with
> >> those
> >> > > > > prefixes?
> >> > > > > > > > Would
> >> > > > > > > > > > it
> >> > > > > > > > > > > be
> >> > > > > > > > > > > >> possible for a user to configure MM2 with those
> >> > > properties
> >> > > > > > > without
> >> > > > > > > > > > them
> >> > > > > > > > > > > >> being interpreted as Connect client overrides,
> >> without
> >> > > > > > isolating
> >> > > > > > > > MM2
> >> > > > > > > > > > > onto
> >> > > > > > > > > > > >> its own cluster and using the
> >> > > > > > IgnoreConnectorClientConfigPolicy
> >> > > > > > > > > > policy?
> >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy class
> >> > > > necessary?
> >> > > > > > The
> >> > > > > > > > > > default
> >> > > > > > > > > > > >> for the connector.client.config.policy property
> >> could
> >> > > > simply
> >> > > > > > be
> >> > > > > > > > null
> >> > > > > > > > > > > >> instead of a new policy that, as far as I can
> tell,
> >> > > isn't
> >> > > > an
> >> > > > > > > > actual
> >> > > > > > > > > > > policy
> >> > > > > > > > > > > >> in that its validate(...) method is never invoked
> >> and
> >> > > > > instead
> >> > > > > > > > > > > represents a
> >> > > > > > > > > > > >> special case to the Connect framework that says
> >> "Drop
> >> > > all
> >> > > > > > > > overrides
> >> > > > > > > > > > and
> >> > > > > > > > > > > >> never use me".
> >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy seems
> >> > like a
> >> > > > > > > specific
> >> > > > > > > > > > > instance
> >> > > > > > > > > > > >> of a more general use case: allow exactly a small
> >> set
> >> > of
> >> > > > > > > overrides
> >> > > > > > > > > and
> >> > > > > > > > > > > no
> >> > > > > > > > > > > >> others. Why not generalize here and create a
> policy
> >> > that
> >> > > > > > > accepts a
> >> > > > > > > > > > list
> >> > > > > > > > > > > of
> >> > > > > > > > > > > >> allowed overrides during configuration?
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> Thanks again for the KIP.
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> Cheers,
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> Chris
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> Nandakumar <
> >> > > > > > > > > > mageshn@confluent.io
> >> > > > > > > > > > > >
> >> > > > > > > > > > > >> wrote:
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> > Hi all,
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client Config
> >> > Override
> >> > > > > > > Policy",
> >> > > > > > > > > > which
> >> > > > > > > > > > > >> > allows users to override the connector client
> >> > > > > configurations
> >> > > > > > > > based
> >> > > > > > > > > > on
> >> > > > > > > > > > > a
> >> > > > > > > > > > > >> > policy defined by the administrator.
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > The KIP can be found at
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >>
> >> > > > > > > > > > >
> >> > > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> >> > > > > > > > > > > >> > .
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > Looking forward for the discussion on the KIP
> and
> >> > all
> >> > > of
> >> > > > > > your
> >> > > > > > > > > > > thoughts &
> >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > Thanks,
> >> > > > > > > > > > > >> > Magesh
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >
> >> > > > > > > > > > >
> >> > > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
Hi Randall,

I have incorporated your comments and updated the KIP with the following


   1. update the config key to be `connector.client.config.override.policy`
   2. update the interface name to be
   `ConnectorClientConfigOverridePolicy`. Updated the implementation names
   also to match the new interface name
   3. introduce useOverrides() in the interface
   4. make `Ignore` the default implementation for the policy.


Let me know if you have any questions.

Thanks
Magesh

On Mon, May 6, 2019 at 5:45 PM Randall Hauch <rh...@gmail.com> wrote:

> That's fine. I don't think there's much difference between the two option
> anyway. I'm looking forward to the updated KIP.
>
> On Mon, May 6, 2019 at 7:38 PM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > Randall,
> >
> > Thanks a lot for your feedback.
> >
> > If I understand it correctly, we could do one of the following, right?
> >
> > 1. introduce a new config `allow.client.config.overrides` with a default
> > value of false. The default value for the policy would be `None`. So by
> > default, we will still preserve the current behavior.
> > 2. introduce `useOverride()` default method that returns true in the
> > interface. The `Ignore` policy would then override it to return false.
> > `Ignore` will also be the default policy.
> >
> > I personally prefer option #2, since it involves one less configuration
> but
> > then I'm also open to the other option.
> >
> > Thanks,
> > Magesh
> >
> > On Mon, May 6, 2019 at 5:29 PM Randall Hauch <rh...@gmail.com> wrote:
> >
> > > I actually like a separate config for whether to pass or filter client
> > > override properties to the connector. I generally dislike adding more
> > > properties, but in this case it keeps the two orthogonal behaviors
> > > independent and reduces the need to implement policies that cover all
> > > permutations.
> > >
> > > However, I still find it strange to have a "non-policy" be the default.
> > So
> > > either of these modifications to the current KIP would be fine with me:
> > > 1) Add a `useOverride()` default method that returns true, but which
> the
> > > None policy could override and return false; and keep the
> `validate(...)`
> > > method as it is.
> > > 2) Change the `validate(Map<...>) method to support a filtering
> pattern,
> > > such as `Map<...> filterOverrides(Map<...> connectorClientOverrides)`
> > >
> > > The point is that the default is the name of a built-in policy.
> > >
> > > Also, one minor suggestion is to use the term "override" in the config
> > > property (e.g., `connector.client.override.policy`) since that term is
> > used
> > > prevalently and matches the `producer.override`, `consumer.override`,
> and
> > > `admin.override` prefixes.
> > >
> > > Thanks for working through this, Magesh.
> > >
> > > Randall
> > >
> > > On Mon, May 6, 2019 at 1:11 PM Magesh Nandakumar <mageshn@confluent.io
> >
> > > wrote:
> > >
> > > > Randall,
> > > >
> > > > I was wondering if you had any thoughts on the above alternatives to
> > deal
> > > > with a default policy.  If it's possible, I would like to finalize
> the
> > > > discussions and start a vote.
> > > > Let me know your thoughts.
> > > >
> > > > Thanks,
> > > > Magesh
> > > >
> > > > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <
> > mageshn@confluent.io>
> > > > wrote:
> > > >
> > > > > Randall,
> > > > >
> > > > > The approach to return the to override configs could possibly make
> it
> > > > > cumbersome to implement a custom policy. This is a new
> configuration
> > > and
> > > > if
> > > > > you don't explicitly set it the existing behavior remains as-is.
> Like
> > > > > Chris, I also preferred this approach for the sake of simplicity.
> If
> > > not
> > > > > for the default `null` I would prefer to fall back to using
> `Ignore`
> > > > which
> > > > > is a misnomer to the interface spec but still gets the job done via
> > > > > instanceOf checks. The other options I could think of are as
> below:-
> > > > >
> > > > >    - have an enforcePolicy() method in the interface which by
> default
> > > > >    returns true and the Ignore implementation could return false
> > > > >    - introduce another worker config
> allow.connector.config.overrides
> > > > >    with a default value of false and the default policy can be None
> > > > >
> > > > > Let me know what you think.
> > > > >
> > > > > Thanks
> > > > > Magesh
> > > > >
> > > > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
> > > wrote:
> > > > >
> > > > >> Thanks, Chris. I still think it's strange to have a non-policy,
> > since
> > > > >> there's now special behavior for when the policy is not specified.
> > > > >>
> > > > >> Perhaps the inability for a policy implementation to represent the
> > > > >> existing
> > > > >> behavior suggests that the policy interface isn't quite right.
> Could
> > > the
> > > > >> policy's "validate" method take the overrides that were supplied
> and
> > > > >> return
> > > > >> the overrides that should be passed to the connector, yet still
> > > throwing
> > > > >> an
> > > > >> exception if any supplied overrides are not allowed. Then the
> > > different
> > > > >> policy implementations might be:
> > > > >>
> > > > >>    - Ignore (default) - returns all supplied override properties
> > > > >>    - None - throws exception if any override properties are
> > supplied;
> > > > >>    always returns empty map if no overrides are provided
> > > > >>    - Principal - throws exception if other override properties are
> > > > >>    provided, but returns an empty map (since no properties should
> be
> > > > >> passed to
> > > > >>    the connector)
> > > > >>    - All - returns all provided override properties
> > > > >>
> > > > >> All override properties defined on the connector configuration
> would
> > > be
> > > > >> passed to the policy for validation, and assuming there's no error
> > all
> > > > of
> > > > >> these overrides would be used in the producer/consumer/admin
> client.
> > > The
> > > > >> result of the policy call, however, is used to determine which of
> > > these
> > > > >> overrides are passed to the connector.
> > > > >>
> > > > >> This approach means that all behaviors can be implemented through
> a
> > > > policy
> > > > >> class, including the defaults. It also gives a bit more control to
> > > > custom
> > > > >> policies, should that be warranted. For example, validating the
> > > provided
> > > > >> client overrides but passing all such override properties to the
> > > > >> connector,
> > > > >> which as I stated earlier is something I think connectors likely
> > don't
> > > > >> look
> > > > >> for.
> > > > >>
> > > > >> Thoughts?
> > > > >>
> > > > >> Randall
> > > > >>
> > > > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <
> chrise@confluent.io>
> > > > >> wrote:
> > > > >>
> > > > >> > Randall,
> > > > >> >
> > > > >> > The special behavior for null was my suggestion. There is no
> > > > >> implementation
> > > > >> > of the proposed interface that causes client overrides to be
> > > ignored,
> > > > so
> > > > >> > the original idea was to have a special implementation that
> would
> > be
> > > > >> > checked for by the Connect framework (probably via the
> instanceof
> > > > >> operator)
> > > > >> > and, if present, cause all would-be overrides to be ignored.
> > > > >> >
> > > > >> > I thought this may be confusing to people who may see that
> > behavior
> > > > and
> > > > >> > wonder how to recreate it themselves, so I suggested leaving
> that
> > > > policy
> > > > >> > out and replace it with a check to see if a policy was specified
> > at
> > > > all.
> > > > >> >
> > > > >> > Would be interested in your thoughts on this, especially if
> > there's
> > > an
> > > > >> > alternative that hasn't been proposed yet.
> > > > >> >
> > > > >> > Cheers,
> > > > >> >
> > > > >> > Chris
> > > > >> >
> > > > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com>
> > wrote:
> > > > >> >
> > > > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> > > > >> mageshn@confluent.io>
> > > > >> > > wrote:
> > > > >> > >
> > > > >> > > > Randall,
> > > > >> > > >
> > > > >> > > > Thanks a lot for your feedback.
> > > > >> > > >
> > > > >> > > > You bring up an interesting point regarding the overrides
> > being
> > > > >> > available
> > > > >> > > > to the connectors. Today everything that is specified in the
> > > > config
> > > > >> > while
> > > > >> > > > creating is available for the connector. But this is a
> > specific
> > > > case
> > > > >> > and
> > > > >> > > we
> > > > >> > > > could do either of the following
> > > > >> > > >
> > > > >> > > >
> > > > >> > > >    - don't pass any configs with these prefixes to the
> > > > >> ConnectorConfig
> > > > >> > > >    instance that's passed in the startConnector
> > > > >> > > >    - allow policies as to whether the configurations with
> the
> > > > >> prefixes
> > > > >> > > >    should be made available to the connector or not. Should
> > this
> > > > >> also
> > > > >> > > > define a
> > > > >> > > >    list of configurations?
> > > > >> > > >
> > > > >> > > > I personally prefer not passing the configs to Connector
> since
> > > > >> that's
> > > > >> > > > simple, straight forward and don't see a reason for the
> > > connector
> > > > to
> > > > >> > > access
> > > > >> > > > those.
> > > > >> > > >
> > > > >> > >
> > > > >> > > I agree that these override properties should be effectively
> new
> > > > >> > > properties, in which case I'd also prefer that they be removed
> > > from
> > > > >> the
> > > > >> > > configuration before it is passed to the connector. Yes, it is
> > > > >> *possible*
> > > > >> > > that an existing connector happened to use connector config
> > > > properties
> > > > >> > with
> > > > >> > > these prefixes, but it's seems pretty unlikely.
> > > > >> > >
> > > > >> > > I'd love to hear whether other people agree.
> > > > >> > >
> > > > >> > >
> > > > >> > > >
> > > > >> > > > For the second point,  None - doesn't allow overrides and
> the
> > > > >> default
> > > > >> > > > policy is null. We preserve backward compatibility when no
> > > policy
> > > > is
> > > > >> > > > configured. Let me know if that's not clear in the KIP.
> > > > >> > > >
> > > > >> > >
> > > > >> > > Why not have a default policy (rather than null) that
> implements
> > > the
> > > > >> > > backward-compatible behavior? It seems strange to have null be
> > the
> > > > >> > default
> > > > >> > > and for non-policy to allow anything.
> > > > >> > >
> > > > >> > >
> > > > >> > > >
> > > > >> > > > Thanks,
> > > > >> > > > Magesh
> > > > >> > > >
> > > > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <
> > rhauch@gmail.com
> > > >
> > > > >> > wrote:
> > > > >> > > >
> > > > >> > > > > Per the proposal, a connector configuration can define one
> > or
> > > > more
> > > > >> > > > > properties that begin with any of the three prefixes:
> > > > >> > > > "producer.override.",
> > > > >> > > > > "consumer.override.", and "admin.override.". The proposal
> > > > states:
> > > > >> > > > >
> > > > >> > > > > Since the users can specify any of these policies, the
> > > > connectors
> > > > >> > > itself
> > > > >> > > > > should not rely on these configurations to be available.
> The
> > > > >> > overrides
> > > > >> > > > are
> > > > >> > > > > to be used purely from an operational perspective.
> > > > >> > > > >
> > > > >> > > > >
> > > > >> > > > > Does this mean that any such properties are visible to
> > > > >> connectors, or
> > > > >> > > > will
> > > > >> > > > > they be hidden to connectors? Currently no connectors have
> > > > access
> > > > >> to
> > > > >> > > such
> > > > >> > > > > client properties, and users are unlike to just put them
> > into
> > > a
> > > > >> > > connector
> > > > >> > > > > configuration unnecessarily. A connector implementation
> > could
> > > > have
> > > > >> > > > defined
> > > > >> > > > > such properties as normal connector-specific properties,
> in
> > > > which
> > > > >> > case
> > > > >> > > > they
> > > > >> > > > > are required, but is that likely given the log prefixes?
> One
> > > > >> concern
> > > > >> > > > that I
> > > > >> > > > > have is that this might allow connector implementations
> > start
> > > > >> > > attempting
> > > > >> > > > to
> > > > >> > > > > circumvent the Connect API if these properties are
> included.
> > > > >> > > > >
> > > > >> > > > > Second, does the None policy allow but ignore these
> > additional
> > > > >> > > properties
> > > > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the
> None
> > > > policy
> > > > >> > fail
> > > > >> > > > if
> > > > >> > > > > any client overrides are specified? The former seems more
> in
> > > > line
> > > > >> > with
> > > > >> > > > the
> > > > >> > > > > current behavior, whereas the "disallows" policy seems
> > useful
> > > > but
> > > > >> not
> > > > >> > > > > exactly backward compatible. Should we also offer a
> > "Disallow"
> > > > >> > policy?
> > > > >> > > In
> > > > >> > > > > fact, should the policies be named "Ignore" (default),
> > > > "Disallow",
> > > > >> > > > > "Prinicipal", and "All"?
> > > > >> > > > >
> > > > >> > > > > Otherwise, I like the idea of this. There have been
> several
> > > > >> requests
> > > > >> > > over
> > > > >> > > > > the past year or two for adding subsets of this
> > functionality.
> > > > >> Might
> > > > >> > be
> > > > >> > > > > good to find and list all of the related KAFKA issues.
> > > > >> > > > >
> > > > >> > > > > Randall
> > > > >> > > > >
> > > > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> > > > >> chrise@confluent.io>
> > > > >> > > > wrote:
> > > > >> > > > >
> > > > >> > > > > > Hi Magesh,
> > > > >> > > > > >
> > > > >> > > > > > Changes look good to me! Excited to see this happen,
> hope
> > > the
> > > > >> KIP
> > > > >> > > > passes
> > > > >> > > > > :)
> > > > >> > > > > >
> > > > >> > > > > > Cheers,
> > > > >> > > > > >
> > > > >> > > > > > Chris
> > > > >> > > > > >
> > > > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > > > >> > > > mageshn@confluent.io>
> > > > >> > > > > > wrote:
> > > > >> > > > > >
> > > > >> > > > > > > Hi Chris,
> > > > >> > > > > > >
> > > > >> > > > > > > I have updated the KIP to reflect the changes that we
> > > > >> discussed
> > > > >> > for
> > > > >> > > > the
> > > > >> > > > > > > prefix. Thanks for all your inputs.
> > > > >> > > > > > >
> > > > >> > > > > > > Thanks,
> > > > >> > > > > > > Magesh
> > > > >> > > > > > >
> > > > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> > > > >> > chrise@confluent.io
> > > > >> > > >
> > > > >> > > > > > wrote:
> > > > >> > > > > > >
> > > > >> > > > > > > > Hi Magesh,
> > > > >> > > > > > > >
> > > > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also
> don't
> > > > have a
> > > > >> > > strong
> > > > >> > > > > > > opinion
> > > > >> > > > > > > > between `connector.` and `.override`, but I have a
> > > slight
> > > > >> > > > inclination
> > > > >> > > > > > > > toward `.override` since `connector.` feels a little
> > > > >> redundant
> > > > >> > > > given
> > > > >> > > > > > that
> > > > >> > > > > > > > the whole configuration is for the connector and the
> > use
> > > > of
> > > > >> > > > > "override"
> > > > >> > > > > > > may
> > > > >> > > > > > > > shed a little light on how the properties for these
> > > > clients
> > > > >> are
> > > > >> > > > > > computed
> > > > >> > > > > > > > and help make the learning curve a little gentler on
> > new
> > > > >> devs
> > > > >> > and
> > > > >> > > > > > users.
> > > > >> > > > > > > >
> > > > >> > > > > > > > Regardless, I think the larger issue of conflicts
> with
> > > > >> existing
> > > > >> > > > > > > properties
> > > > >> > > > > > > > (both in MM2 and potentially other connectors) has
> > been
> > > > >> > > > > satisfactorily
> > > > >> > > > > > > > addressed, so I'm happy.
> > > > >> > > > > > > >
> > > > >> > > > > > > > Cheers,
> > > > >> > > > > > > >
> > > > >> > > > > > > > Chris
> > > > >> > > > > > > >
> > > > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > > >> > > > > > mageshn@confluent.io
> > > > >> > > > > > > >
> > > > >> > > > > > > > wrote:
> > > > >> > > > > > > >
> > > > >> > > > > > > > > HI Chrise,
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > You are right about the "admin." prefix creating
> > > > >> conflicts.
> > > > >> > > Here
> > > > >> > > > > are
> > > > >> > > > > > > few
> > > > >> > > > > > > > > options that I can think of
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only
> > for
> > > > >> DLQ.
> > > > >> > But
> > > > >> > > > > this
> > > > >> > > > > > > > might
> > > > >> > > > > > > > > not really be the case in the future. So, we
> should
> > > > >> possibly
> > > > >> > > drop
> > > > >> > > > > > this
> > > > >> > > > > > > > idea
> > > > >> > > > > > > > > :)
> > > > >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer`
> > and
> > > > >> > > > > > > `connector.admin`
> > > > >> > > > > > > > -
> > > > >> > > > > > > > > provides better context that its connector
> specific
> > > > >> property
> > > > >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override`
> > and
> > > > >> > > > > > `admin.override`
> > > > >> > > > > > > -
> > > > >> > > > > > > > > provides better clarity that these are overrides.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > I don't have a strong opinion in choosing between
> #2
> > > and
> > > > >> #3.
> > > > >> > > Let
> > > > >> > > > me
> > > > >> > > > > > > > > know what you think.
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > Thanks
> > > > >> > > > > > > > > Magesh
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > > > >> > > > > chrise@confluent.io>
> > > > >> > > > > > > > > wrote:
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > > Hi Magesh,
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > Next round :)
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> > > > >> properties
> > > > >> > > that
> > > > >> > > > > > > affect
> > > > >> > > > > > > > > > AdminClients it creates and uses, which IIUC is
> > the
> > > > same
> > > > >> > > prefix
> > > > >> > > > > > name
> > > > >> > > > > > > to
> > > > >> > > > > > > > > be
> > > > >> > > > > > > > > > used for managing the DLQ for sink connectors in
> > > this
> > > > >> KIP.
> > > > >> > > > > Doesn't
> > > > >> > > > > > > that
> > > > >> > > > > > > > > > still leave room for conflict? I'm imagining a
> > > > scenario
> > > > >> > like
> > > > >> > > > > this:
> > > > >> > > > > > a
> > > > >> > > > > > > > > > Connect worker is configured to use the
> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone
> > tries
> > > to
> > > > >> > start
> > > > >> > > an
> > > > >> > > > > > > > instance
> > > > >> > > > > > > > > of
> > > > >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> > > > >> > > > > > > > > "admin.sasl.jaas.config",
> > > > >> > > > > > > > > > and gets rejected because those properties are
> > then
> > > > >> > > interpreted
> > > > >> > > > > by
> > > > >> > > > > > > the
> > > > >> > > > > > > > > > worker as overrides for the AdminClient it uses
> to
> > > > >> manage
> > > > >> > the
> > > > >> > > > > DLQ.
> > > > >> > > > > > > > > > 2. (LGTM)
> > > > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> > > > >> > identifies a
> > > > >> > > > > > common
> > > > >> > > > > > > > use
> > > > >> > > > > > > > > > case that would involve a similar client config
> > > policy
> > > > >> > > > > > implementation
> > > > >> > > > > > > > > that
> > > > >> > > > > > > > > > would be limited to a small set of whitelisted
> > > > configs.
> > > > >> For
> > > > >> > > now
> > > > >> > > > > > > keeping
> > > > >> > > > > > > > > the
> > > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine
> > to
> > > > me.
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > Cheers,
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > Chris
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh
> > Nandakumar <
> > > > >> > > > > > > > mageshn@confluent.io
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > wrote:
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > > > > Hi all,
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > I also have a draft implementation of the KIP
> > > > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I
> > > would
> > > > >> still
> > > > >> > > > need
> > > > >> > > > > to
> > > > >> > > > > > > > > include
> > > > >> > > > > > > > > > > more tests and docs but I thought it would be
> > > useful
> > > > >> to
> > > > >> > > have
> > > > >> > > > > this
> > > > >> > > > > > > for
> > > > >> > > > > > > > > the
> > > > >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> > > > >> valuable
> > > > >> > > > > feedback.
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > Thanks
> > > > >> > > > > > > > > > > Magesh
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
> > > Nandakumar <
> > > > >> > > > > > > > > mageshn@confluent.io
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > wrote:
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > > > > Chrise,
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > Thanks a lot for your feedback. I will
> address
> > > > them
> > > > >> in
> > > > >> > > > order
> > > > >> > > > > of
> > > > >> > > > > > > > your
> > > > >> > > > > > > > > > > > questions/comments.
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > 1. Thanks for bringing this to my attention
> > > about
> > > > >> > > KIP-382.
> > > > >> > > > I
> > > > >> > > > > > had
> > > > >> > > > > > > a
> > > > >> > > > > > > > > > closer
> > > > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> > > > `consumer.`
> > > > >> > > prefix
> > > > >> > > > > for
> > > > >> > > > > > > > > > > SourceConnector
> > > > >> > > > > > > > > > > > and producer. prefix for SinkConnector since
> > > those
> > > > >> are
> > > > >> > > > > > additional
> > > > >> > > > > > > > > > > > connector properties to help resolve the
> Kafka
> > > > >> cluster
> > > > >> > > > other
> > > > >> > > > > > than
> > > > >> > > > > > > > the
> > > > >> > > > > > > > > > one
> > > > >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> > > > >> proposal in
> > > > >> > > > > KIP-458
> > > > >> > > > > > > > > applies
> > > > >> > > > > > > > > > > > producer policies for SinkConnectors and
> > > consumer
> > > > >> > > policies
> > > > >> > > > > > > > > > > > SourceConnectors.  So, from what I
> understand
> > > this
> > > > >> new
> > > > >> > > > policy
> > > > >> > > > > > > > should
> > > > >> > > > > > > > > > work
> > > > >> > > > > > > > > > > > without any issues even for Mirror Maker
> 2.0.
> > > > >> > > > > > > > > > > > 2. I have updated the KIP to use a default
> > value
> > > > of
> > > > >> > null
> > > > >> > > > and
> > > > >> > > > > > use
> > > > >> > > > > > > > that
> > > > >> > > > > > > > > > to
> > > > >> > > > > > > > > > > > determine if we need to ignore overrides.
> > > > >> > > > > > > > > > > > 3. I would still prefer to keep the special
> > > > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > > > >> > > > > > > > > > > > since that is one of the most common use
> cases
> > > one
> > > > >> > would
> > > > >> > > > > choose
> > > > >> > > > > > > to
> > > > >> > > > > > > > > use
> > > > >> > > > > > > > > > > this
> > > > >> > > > > > > > > > > > feature. If we make it a general case, that
> > > would
> > > > >> > involve
> > > > >> > > > > users
> > > > >> > > > > > > > > > requiring
> > > > >> > > > > > > > > > > > to add additional configuration and they
> might
> > > > >> require
> > > > >> > > well
> > > > >> > > > > > more
> > > > >> > > > > > > > than
> > > > >> > > > > > > > > > > just
> > > > >> > > > > > > > > > > > the list of configs but might also want some
> > > > >> > restriction
> > > > >> > > on
> > > > >> > > > > > > values.
> > > > >> > > > > > > > > If
> > > > >> > > > > > > > > > > the
> > > > >> > > > > > > > > > > > concern is about users wanting principal and
> > > also
> > > > >> other
> > > > >> > > > > > configs,
> > > > >> > > > > > > it
> > > > >> > > > > > > > > > would
> > > > >> > > > > > > > > > > > still be possible by means of a custom
> > > > >> implementation.
> > > > >> > As
> > > > >> > > > > is, I
> > > > >> > > > > > > > would
> > > > >> > > > > > > > > > > > prefer to keep the proposal to be the same
> for
> > > > this.
> > > > >> > Let
> > > > >> > > me
> > > > >> > > > > > know
> > > > >> > > > > > > > your
> > > > >> > > > > > > > > > > > thoughts.
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > Thanks,
> > > > >> > > > > > > > > > > > Magesh
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris
> Egerton
> > <
> > > > >> > > > > > > chrise@confluent.io
> > > > >> > > > > > > > >
> > > > >> > > > > > > > > > > wrote:
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > >> Hi Magesh,
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> > > > >> > questions/comments
> > > > >> > > > but
> > > > >> > > > > > > > > overall I
> > > > >> > > > > > > > > > > >> like
> > > > >> > > > > > > > > > > >> the direction it's headed in and hope to
> see
> > it
> > > > >> > included
> > > > >> > > > in
> > > > >> > > > > > the
> > > > >> > > > > > > > > > Connect
> > > > >> > > > > > > > > > > >> framework soon.
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> 1. With the proposed "consumer.",
> > "producer.",
> > > > and
> > > > >> > > > "admin."
> > > > >> > > > > > > > > prefixes,
> > > > >> > > > > > > > > > > how
> > > > >> > > > > > > > > > > >> will this interact with connectors such as
> > the
> > > > >> > upcoming
> > > > >> > > > > Mirror
> > > > >> > > > > > > > Maker
> > > > >> > > > > > > > > > 2.0
> > > > >> > > > > > > > > > > >> (KIP-382) that already support properties
> > with
> > > > >> those
> > > > >> > > > > prefixes?
> > > > >> > > > > > > > Would
> > > > >> > > > > > > > > > it
> > > > >> > > > > > > > > > > be
> > > > >> > > > > > > > > > > >> possible for a user to configure MM2 with
> > those
> > > > >> > > properties
> > > > >> > > > > > > without
> > > > >> > > > > > > > > > them
> > > > >> > > > > > > > > > > >> being interpreted as Connect client
> > overrides,
> > > > >> without
> > > > >> > > > > > isolating
> > > > >> > > > > > > > MM2
> > > > >> > > > > > > > > > > onto
> > > > >> > > > > > > > > > > >> its own cluster and using the
> > > > >> > > > > > IgnoreConnectorClientConfigPolicy
> > > > >> > > > > > > > > > policy?
> > > > >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy
> > > class
> > > > >> > > > necessary?
> > > > >> > > > > > The
> > > > >> > > > > > > > > > default
> > > > >> > > > > > > > > > > >> for the connector.client.config.policy
> > property
> > > > >> could
> > > > >> > > > simply
> > > > >> > > > > > be
> > > > >> > > > > > > > null
> > > > >> > > > > > > > > > > >> instead of a new policy that, as far as I
> can
> > > > tell,
> > > > >> > > isn't
> > > > >> > > > an
> > > > >> > > > > > > > actual
> > > > >> > > > > > > > > > > policy
> > > > >> > > > > > > > > > > >> in that its validate(...) method is never
> > > invoked
> > > > >> and
> > > > >> > > > > instead
> > > > >> > > > > > > > > > > represents a
> > > > >> > > > > > > > > > > >> special case to the Connect framework that
> > says
> > > > >> "Drop
> > > > >> > > all
> > > > >> > > > > > > > overrides
> > > > >> > > > > > > > > > and
> > > > >> > > > > > > > > > > >> never use me".
> > > > >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy
> > > seems
> > > > >> > like a
> > > > >> > > > > > > specific
> > > > >> > > > > > > > > > > instance
> > > > >> > > > > > > > > > > >> of a more general use case: allow exactly a
> > > small
> > > > >> set
> > > > >> > of
> > > > >> > > > > > > overrides
> > > > >> > > > > > > > > and
> > > > >> > > > > > > > > > > no
> > > > >> > > > > > > > > > > >> others. Why not generalize here and create
> a
> > > > policy
> > > > >> > that
> > > > >> > > > > > > accepts a
> > > > >> > > > > > > > > > list
> > > > >> > > > > > > > > > > of
> > > > >> > > > > > > > > > > >> allowed overrides during configuration?
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> Thanks again for the KIP.
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> Cheers,
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> Chris
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> > > > Nandakumar <
> > > > >> > > > > > > > > > mageshn@confluent.io
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > > >> wrote:
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >> > Hi all,
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client
> > Config
> > > > >> > Override
> > > > >> > > > > > > Policy",
> > > > >> > > > > > > > > > which
> > > > >> > > > > > > > > > > >> > allows users to override the connector
> > client
> > > > >> > > > > configurations
> > > > >> > > > > > > > based
> > > > >> > > > > > > > > > on
> > > > >> > > > > > > > > > > a
> > > > >> > > > > > > > > > > >> > policy defined by the administrator.
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > The KIP can be found at
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > >
> > > > >> > > > > > > >
> > > > >> > > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > > >> > > > > > > > > > > >> > .
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > Looking forward for the discussion on the
> > KIP
> > > > and
> > > > >> > all
> > > > >> > > of
> > > > >> > > > > > your
> > > > >> > > > > > > > > > > thoughts &
> > > > >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >> > Thanks,
> > > > >> > > > > > > > > > > >> > Magesh
> > > > >> > > > > > > > > > > >> >
> > > > >> > > > > > > > > > > >>
> > > > >> > > > > > > > > > > >
> > > > >> > > > > > > > > > >
> > > > >> > > > > > > > > >
> > > > >> > > > > > > > >
> > > > >> > > > > > > >
> > > > >> > > > > > >
> > > > >> > > > > >
> > > > >> > > > >
> > > > >> > > >
> > > > >> > >
> > > > >> >
> > > > >>
> > > > >
> > > >
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Randall Hauch <rh...@gmail.com>.
That's fine. I don't think there's much difference between the two option
anyway. I'm looking forward to the updated KIP.

On Mon, May 6, 2019 at 7:38 PM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Randall,
>
> Thanks a lot for your feedback.
>
> If I understand it correctly, we could do one of the following, right?
>
> 1. introduce a new config `allow.client.config.overrides` with a default
> value of false. The default value for the policy would be `None`. So by
> default, we will still preserve the current behavior.
> 2. introduce `useOverride()` default method that returns true in the
> interface. The `Ignore` policy would then override it to return false.
> `Ignore` will also be the default policy.
>
> I personally prefer option #2, since it involves one less configuration but
> then I'm also open to the other option.
>
> Thanks,
> Magesh
>
> On Mon, May 6, 2019 at 5:29 PM Randall Hauch <rh...@gmail.com> wrote:
>
> > I actually like a separate config for whether to pass or filter client
> > override properties to the connector. I generally dislike adding more
> > properties, but in this case it keeps the two orthogonal behaviors
> > independent and reduces the need to implement policies that cover all
> > permutations.
> >
> > However, I still find it strange to have a "non-policy" be the default.
> So
> > either of these modifications to the current KIP would be fine with me:
> > 1) Add a `useOverride()` default method that returns true, but which the
> > None policy could override and return false; and keep the `validate(...)`
> > method as it is.
> > 2) Change the `validate(Map<...>) method to support a filtering pattern,
> > such as `Map<...> filterOverrides(Map<...> connectorClientOverrides)`
> >
> > The point is that the default is the name of a built-in policy.
> >
> > Also, one minor suggestion is to use the term "override" in the config
> > property (e.g., `connector.client.override.policy`) since that term is
> used
> > prevalently and matches the `producer.override`, `consumer.override`, and
> > `admin.override` prefixes.
> >
> > Thanks for working through this, Magesh.
> >
> > Randall
> >
> > On Mon, May 6, 2019 at 1:11 PM Magesh Nandakumar <ma...@confluent.io>
> > wrote:
> >
> > > Randall,
> > >
> > > I was wondering if you had any thoughts on the above alternatives to
> deal
> > > with a default policy.  If it's possible, I would like to finalize the
> > > discussions and start a vote.
> > > Let me know your thoughts.
> > >
> > > Thanks,
> > > Magesh
> > >
> > > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <
> mageshn@confluent.io>
> > > wrote:
> > >
> > > > Randall,
> > > >
> > > > The approach to return the to override configs could possibly make it
> > > > cumbersome to implement a custom policy. This is a new configuration
> > and
> > > if
> > > > you don't explicitly set it the existing behavior remains as-is. Like
> > > > Chris, I also preferred this approach for the sake of simplicity.  If
> > not
> > > > for the default `null` I would prefer to fall back to using `Ignore`
> > > which
> > > > is a misnomer to the interface spec but still gets the job done via
> > > > instanceOf checks. The other options I could think of are as below:-
> > > >
> > > >    - have an enforcePolicy() method in the interface which by default
> > > >    returns true and the Ignore implementation could return false
> > > >    - introduce another worker config allow.connector.config.overrides
> > > >    with a default value of false and the default policy can be None
> > > >
> > > > Let me know what you think.
> > > >
> > > > Thanks
> > > > Magesh
> > > >
> > > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
> > wrote:
> > > >
> > > >> Thanks, Chris. I still think it's strange to have a non-policy,
> since
> > > >> there's now special behavior for when the policy is not specified.
> > > >>
> > > >> Perhaps the inability for a policy implementation to represent the
> > > >> existing
> > > >> behavior suggests that the policy interface isn't quite right. Could
> > the
> > > >> policy's "validate" method take the overrides that were supplied and
> > > >> return
> > > >> the overrides that should be passed to the connector, yet still
> > throwing
> > > >> an
> > > >> exception if any supplied overrides are not allowed. Then the
> > different
> > > >> policy implementations might be:
> > > >>
> > > >>    - Ignore (default) - returns all supplied override properties
> > > >>    - None - throws exception if any override properties are
> supplied;
> > > >>    always returns empty map if no overrides are provided
> > > >>    - Principal - throws exception if other override properties are
> > > >>    provided, but returns an empty map (since no properties should be
> > > >> passed to
> > > >>    the connector)
> > > >>    - All - returns all provided override properties
> > > >>
> > > >> All override properties defined on the connector configuration would
> > be
> > > >> passed to the policy for validation, and assuming there's no error
> all
> > > of
> > > >> these overrides would be used in the producer/consumer/admin client.
> > The
> > > >> result of the policy call, however, is used to determine which of
> > these
> > > >> overrides are passed to the connector.
> > > >>
> > > >> This approach means that all behaviors can be implemented through a
> > > policy
> > > >> class, including the defaults. It also gives a bit more control to
> > > custom
> > > >> policies, should that be warranted. For example, validating the
> > provided
> > > >> client overrides but passing all such override properties to the
> > > >> connector,
> > > >> which as I stated earlier is something I think connectors likely
> don't
> > > >> look
> > > >> for.
> > > >>
> > > >> Thoughts?
> > > >>
> > > >> Randall
> > > >>
> > > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io>
> > > >> wrote:
> > > >>
> > > >> > Randall,
> > > >> >
> > > >> > The special behavior for null was my suggestion. There is no
> > > >> implementation
> > > >> > of the proposed interface that causes client overrides to be
> > ignored,
> > > so
> > > >> > the original idea was to have a special implementation that would
> be
> > > >> > checked for by the Connect framework (probably via the instanceof
> > > >> operator)
> > > >> > and, if present, cause all would-be overrides to be ignored.
> > > >> >
> > > >> > I thought this may be confusing to people who may see that
> behavior
> > > and
> > > >> > wonder how to recreate it themselves, so I suggested leaving that
> > > policy
> > > >> > out and replace it with a check to see if a policy was specified
> at
> > > all.
> > > >> >
> > > >> > Would be interested in your thoughts on this, especially if
> there's
> > an
> > > >> > alternative that hasn't been proposed yet.
> > > >> >
> > > >> > Cheers,
> > > >> >
> > > >> > Chris
> > > >> >
> > > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com>
> wrote:
> > > >> >
> > > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> > > >> mageshn@confluent.io>
> > > >> > > wrote:
> > > >> > >
> > > >> > > > Randall,
> > > >> > > >
> > > >> > > > Thanks a lot for your feedback.
> > > >> > > >
> > > >> > > > You bring up an interesting point regarding the overrides
> being
> > > >> > available
> > > >> > > > to the connectors. Today everything that is specified in the
> > > config
> > > >> > while
> > > >> > > > creating is available for the connector. But this is a
> specific
> > > case
> > > >> > and
> > > >> > > we
> > > >> > > > could do either of the following
> > > >> > > >
> > > >> > > >
> > > >> > > >    - don't pass any configs with these prefixes to the
> > > >> ConnectorConfig
> > > >> > > >    instance that's passed in the startConnector
> > > >> > > >    - allow policies as to whether the configurations with the
> > > >> prefixes
> > > >> > > >    should be made available to the connector or not. Should
> this
> > > >> also
> > > >> > > > define a
> > > >> > > >    list of configurations?
> > > >> > > >
> > > >> > > > I personally prefer not passing the configs to Connector since
> > > >> that's
> > > >> > > > simple, straight forward and don't see a reason for the
> > connector
> > > to
> > > >> > > access
> > > >> > > > those.
> > > >> > > >
> > > >> > >
> > > >> > > I agree that these override properties should be effectively new
> > > >> > > properties, in which case I'd also prefer that they be removed
> > from
> > > >> the
> > > >> > > configuration before it is passed to the connector. Yes, it is
> > > >> *possible*
> > > >> > > that an existing connector happened to use connector config
> > > properties
> > > >> > with
> > > >> > > these prefixes, but it's seems pretty unlikely.
> > > >> > >
> > > >> > > I'd love to hear whether other people agree.
> > > >> > >
> > > >> > >
> > > >> > > >
> > > >> > > > For the second point,  None - doesn't allow overrides and the
> > > >> default
> > > >> > > > policy is null. We preserve backward compatibility when no
> > policy
> > > is
> > > >> > > > configured. Let me know if that's not clear in the KIP.
> > > >> > > >
> > > >> > >
> > > >> > > Why not have a default policy (rather than null) that implements
> > the
> > > >> > > backward-compatible behavior? It seems strange to have null be
> the
> > > >> > default
> > > >> > > and for non-policy to allow anything.
> > > >> > >
> > > >> > >
> > > >> > > >
> > > >> > > > Thanks,
> > > >> > > > Magesh
> > > >> > > >
> > > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <
> rhauch@gmail.com
> > >
> > > >> > wrote:
> > > >> > > >
> > > >> > > > > Per the proposal, a connector configuration can define one
> or
> > > more
> > > >> > > > > properties that begin with any of the three prefixes:
> > > >> > > > "producer.override.",
> > > >> > > > > "consumer.override.", and "admin.override.". The proposal
> > > states:
> > > >> > > > >
> > > >> > > > > Since the users can specify any of these policies, the
> > > connectors
> > > >> > > itself
> > > >> > > > > should not rely on these configurations to be available. The
> > > >> > overrides
> > > >> > > > are
> > > >> > > > > to be used purely from an operational perspective.
> > > >> > > > >
> > > >> > > > >
> > > >> > > > > Does this mean that any such properties are visible to
> > > >> connectors, or
> > > >> > > > will
> > > >> > > > > they be hidden to connectors? Currently no connectors have
> > > access
> > > >> to
> > > >> > > such
> > > >> > > > > client properties, and users are unlike to just put them
> into
> > a
> > > >> > > connector
> > > >> > > > > configuration unnecessarily. A connector implementation
> could
> > > have
> > > >> > > > defined
> > > >> > > > > such properties as normal connector-specific properties, in
> > > which
> > > >> > case
> > > >> > > > they
> > > >> > > > > are required, but is that likely given the log prefixes? One
> > > >> concern
> > > >> > > > that I
> > > >> > > > > have is that this might allow connector implementations
> start
> > > >> > > attempting
> > > >> > > > to
> > > >> > > > > circumvent the Connect API if these properties are included.
> > > >> > > > >
> > > >> > > > > Second, does the None policy allow but ignore these
> additional
> > > >> > > properties
> > > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None
> > > policy
> > > >> > fail
> > > >> > > > if
> > > >> > > > > any client overrides are specified? The former seems more in
> > > line
> > > >> > with
> > > >> > > > the
> > > >> > > > > current behavior, whereas the "disallows" policy seems
> useful
> > > but
> > > >> not
> > > >> > > > > exactly backward compatible. Should we also offer a
> "Disallow"
> > > >> > policy?
> > > >> > > In
> > > >> > > > > fact, should the policies be named "Ignore" (default),
> > > "Disallow",
> > > >> > > > > "Prinicipal", and "All"?
> > > >> > > > >
> > > >> > > > > Otherwise, I like the idea of this. There have been several
> > > >> requests
> > > >> > > over
> > > >> > > > > the past year or two for adding subsets of this
> functionality.
> > > >> Might
> > > >> > be
> > > >> > > > > good to find and list all of the related KAFKA issues.
> > > >> > > > >
> > > >> > > > > Randall
> > > >> > > > >
> > > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> > > >> chrise@confluent.io>
> > > >> > > > wrote:
> > > >> > > > >
> > > >> > > > > > Hi Magesh,
> > > >> > > > > >
> > > >> > > > > > Changes look good to me! Excited to see this happen, hope
> > the
> > > >> KIP
> > > >> > > > passes
> > > >> > > > > :)
> > > >> > > > > >
> > > >> > > > > > Cheers,
> > > >> > > > > >
> > > >> > > > > > Chris
> > > >> > > > > >
> > > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > > >> > > > mageshn@confluent.io>
> > > >> > > > > > wrote:
> > > >> > > > > >
> > > >> > > > > > > Hi Chris,
> > > >> > > > > > >
> > > >> > > > > > > I have updated the KIP to reflect the changes that we
> > > >> discussed
> > > >> > for
> > > >> > > > the
> > > >> > > > > > > prefix. Thanks for all your inputs.
> > > >> > > > > > >
> > > >> > > > > > > Thanks,
> > > >> > > > > > > Magesh
> > > >> > > > > > >
> > > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> > > >> > chrise@confluent.io
> > > >> > > >
> > > >> > > > > > wrote:
> > > >> > > > > > >
> > > >> > > > > > > > Hi Magesh,
> > > >> > > > > > > >
> > > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't
> > > have a
> > > >> > > strong
> > > >> > > > > > > opinion
> > > >> > > > > > > > between `connector.` and `.override`, but I have a
> > slight
> > > >> > > > inclination
> > > >> > > > > > > > toward `.override` since `connector.` feels a little
> > > >> redundant
> > > >> > > > given
> > > >> > > > > > that
> > > >> > > > > > > > the whole configuration is for the connector and the
> use
> > > of
> > > >> > > > > "override"
> > > >> > > > > > > may
> > > >> > > > > > > > shed a little light on how the properties for these
> > > clients
> > > >> are
> > > >> > > > > > computed
> > > >> > > > > > > > and help make the learning curve a little gentler on
> new
> > > >> devs
> > > >> > and
> > > >> > > > > > users.
> > > >> > > > > > > >
> > > >> > > > > > > > Regardless, I think the larger issue of conflicts with
> > > >> existing
> > > >> > > > > > > properties
> > > >> > > > > > > > (both in MM2 and potentially other connectors) has
> been
> > > >> > > > > satisfactorily
> > > >> > > > > > > > addressed, so I'm happy.
> > > >> > > > > > > >
> > > >> > > > > > > > Cheers,
> > > >> > > > > > > >
> > > >> > > > > > > > Chris
> > > >> > > > > > > >
> > > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > >> > > > > > mageshn@confluent.io
> > > >> > > > > > > >
> > > >> > > > > > > > wrote:
> > > >> > > > > > > >
> > > >> > > > > > > > > HI Chrise,
> > > >> > > > > > > > >
> > > >> > > > > > > > > You are right about the "admin." prefix creating
> > > >> conflicts.
> > > >> > > Here
> > > >> > > > > are
> > > >> > > > > > > few
> > > >> > > > > > > > > options that I can think of
> > > >> > > > > > > > >
> > > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only
> for
> > > >> DLQ.
> > > >> > But
> > > >> > > > > this
> > > >> > > > > > > > might
> > > >> > > > > > > > > not really be the case in the future. So, we should
> > > >> possibly
> > > >> > > drop
> > > >> > > > > > this
> > > >> > > > > > > > idea
> > > >> > > > > > > > > :)
> > > >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer`
> and
> > > >> > > > > > > `connector.admin`
> > > >> > > > > > > > -
> > > >> > > > > > > > > provides better context that its connector specific
> > > >> property
> > > >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override`
> and
> > > >> > > > > > `admin.override`
> > > >> > > > > > > -
> > > >> > > > > > > > > provides better clarity that these are overrides.
> > > >> > > > > > > > >
> > > >> > > > > > > > > I don't have a strong opinion in choosing between #2
> > and
> > > >> #3.
> > > >> > > Let
> > > >> > > > me
> > > >> > > > > > > > > know what you think.
> > > >> > > > > > > > >
> > > >> > > > > > > > > Thanks
> > > >> > > > > > > > > Magesh
> > > >> > > > > > > > >
> > > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > > >> > > > > chrise@confluent.io>
> > > >> > > > > > > > > wrote:
> > > >> > > > > > > > >
> > > >> > > > > > > > > > Hi Magesh,
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > Next round :)
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> > > >> properties
> > > >> > > that
> > > >> > > > > > > affect
> > > >> > > > > > > > > > AdminClients it creates and uses, which IIUC is
> the
> > > same
> > > >> > > prefix
> > > >> > > > > > name
> > > >> > > > > > > to
> > > >> > > > > > > > > be
> > > >> > > > > > > > > > used for managing the DLQ for sink connectors in
> > this
> > > >> KIP.
> > > >> > > > > Doesn't
> > > >> > > > > > > that
> > > >> > > > > > > > > > still leave room for conflict? I'm imagining a
> > > scenario
> > > >> > like
> > > >> > > > > this:
> > > >> > > > > > a
> > > >> > > > > > > > > > Connect worker is configured to use the
> > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone
> tries
> > to
> > > >> > start
> > > >> > > an
> > > >> > > > > > > > instance
> > > >> > > > > > > > > of
> > > >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> > > >> > > > > > > > > "admin.sasl.jaas.config",
> > > >> > > > > > > > > > and gets rejected because those properties are
> then
> > > >> > > interpreted
> > > >> > > > > by
> > > >> > > > > > > the
> > > >> > > > > > > > > > worker as overrides for the AdminClient it uses to
> > > >> manage
> > > >> > the
> > > >> > > > > DLQ.
> > > >> > > > > > > > > > 2. (LGTM)
> > > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> > > >> > identifies a
> > > >> > > > > > common
> > > >> > > > > > > > use
> > > >> > > > > > > > > > case that would involve a similar client config
> > policy
> > > >> > > > > > implementation
> > > >> > > > > > > > > that
> > > >> > > > > > > > > > would be limited to a small set of whitelisted
> > > configs.
> > > >> For
> > > >> > > now
> > > >> > > > > > > keeping
> > > >> > > > > > > > > the
> > > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine
> to
> > > me.
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > Cheers,
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > Chris
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh
> Nandakumar <
> > > >> > > > > > > > mageshn@confluent.io
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > wrote:
> > > >> > > > > > > > > >
> > > >> > > > > > > > > > > Hi all,
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > I also have a draft implementation of the KIP
> > > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I
> > would
> > > >> still
> > > >> > > > need
> > > >> > > > > to
> > > >> > > > > > > > > include
> > > >> > > > > > > > > > > more tests and docs but I thought it would be
> > useful
> > > >> to
> > > >> > > have
> > > >> > > > > this
> > > >> > > > > > > for
> > > >> > > > > > > > > the
> > > >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> > > >> valuable
> > > >> > > > > feedback.
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > Thanks
> > > >> > > > > > > > > > > Magesh
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
> > Nandakumar <
> > > >> > > > > > > > > mageshn@confluent.io
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > wrote:
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > > > > Chrise,
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > Thanks a lot for your feedback. I will address
> > > them
> > > >> in
> > > >> > > > order
> > > >> > > > > of
> > > >> > > > > > > > your
> > > >> > > > > > > > > > > > questions/comments.
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > 1. Thanks for bringing this to my attention
> > about
> > > >> > > KIP-382.
> > > >> > > > I
> > > >> > > > > > had
> > > >> > > > > > > a
> > > >> > > > > > > > > > closer
> > > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> > > `consumer.`
> > > >> > > prefix
> > > >> > > > > for
> > > >> > > > > > > > > > > SourceConnector
> > > >> > > > > > > > > > > > and producer. prefix for SinkConnector since
> > those
> > > >> are
> > > >> > > > > > additional
> > > >> > > > > > > > > > > > connector properties to help resolve the Kafka
> > > >> cluster
> > > >> > > > other
> > > >> > > > > > than
> > > >> > > > > > > > the
> > > >> > > > > > > > > > one
> > > >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> > > >> proposal in
> > > >> > > > > KIP-458
> > > >> > > > > > > > > applies
> > > >> > > > > > > > > > > > producer policies for SinkConnectors and
> > consumer
> > > >> > > policies
> > > >> > > > > > > > > > > > SourceConnectors.  So, from what I understand
> > this
> > > >> new
> > > >> > > > policy
> > > >> > > > > > > > should
> > > >> > > > > > > > > > work
> > > >> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> > > >> > > > > > > > > > > > 2. I have updated the KIP to use a default
> value
> > > of
> > > >> > null
> > > >> > > > and
> > > >> > > > > > use
> > > >> > > > > > > > that
> > > >> > > > > > > > > > to
> > > >> > > > > > > > > > > > determine if we need to ignore overrides.
> > > >> > > > > > > > > > > > 3. I would still prefer to keep the special
> > > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > > >> > > > > > > > > > > > since that is one of the most common use cases
> > one
> > > >> > would
> > > >> > > > > choose
> > > >> > > > > > > to
> > > >> > > > > > > > > use
> > > >> > > > > > > > > > > this
> > > >> > > > > > > > > > > > feature. If we make it a general case, that
> > would
> > > >> > involve
> > > >> > > > > users
> > > >> > > > > > > > > > requiring
> > > >> > > > > > > > > > > > to add additional configuration and they might
> > > >> require
> > > >> > > well
> > > >> > > > > > more
> > > >> > > > > > > > than
> > > >> > > > > > > > > > > just
> > > >> > > > > > > > > > > > the list of configs but might also want some
> > > >> > restriction
> > > >> > > on
> > > >> > > > > > > values.
> > > >> > > > > > > > > If
> > > >> > > > > > > > > > > the
> > > >> > > > > > > > > > > > concern is about users wanting principal and
> > also
> > > >> other
> > > >> > > > > > configs,
> > > >> > > > > > > it
> > > >> > > > > > > > > > would
> > > >> > > > > > > > > > > > still be possible by means of a custom
> > > >> implementation.
> > > >> > As
> > > >> > > > > is, I
> > > >> > > > > > > > would
> > > >> > > > > > > > > > > > prefer to keep the proposal to be the same for
> > > this.
> > > >> > Let
> > > >> > > me
> > > >> > > > > > know
> > > >> > > > > > > > your
> > > >> > > > > > > > > > > > thoughts.
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > Thanks,
> > > >> > > > > > > > > > > > Magesh
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton
> <
> > > >> > > > > > > chrise@confluent.io
> > > >> > > > > > > > >
> > > >> > > > > > > > > > > wrote:
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > >> Hi Magesh,
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> > > >> > questions/comments
> > > >> > > > but
> > > >> > > > > > > > > overall I
> > > >> > > > > > > > > > > >> like
> > > >> > > > > > > > > > > >> the direction it's headed in and hope to see
> it
> > > >> > included
> > > >> > > > in
> > > >> > > > > > the
> > > >> > > > > > > > > > Connect
> > > >> > > > > > > > > > > >> framework soon.
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> 1. With the proposed "consumer.",
> "producer.",
> > > and
> > > >> > > > "admin."
> > > >> > > > > > > > > prefixes,
> > > >> > > > > > > > > > > how
> > > >> > > > > > > > > > > >> will this interact with connectors such as
> the
> > > >> > upcoming
> > > >> > > > > Mirror
> > > >> > > > > > > > Maker
> > > >> > > > > > > > > > 2.0
> > > >> > > > > > > > > > > >> (KIP-382) that already support properties
> with
> > > >> those
> > > >> > > > > prefixes?
> > > >> > > > > > > > Would
> > > >> > > > > > > > > > it
> > > >> > > > > > > > > > > be
> > > >> > > > > > > > > > > >> possible for a user to configure MM2 with
> those
> > > >> > > properties
> > > >> > > > > > > without
> > > >> > > > > > > > > > them
> > > >> > > > > > > > > > > >> being interpreted as Connect client
> overrides,
> > > >> without
> > > >> > > > > > isolating
> > > >> > > > > > > > MM2
> > > >> > > > > > > > > > > onto
> > > >> > > > > > > > > > > >> its own cluster and using the
> > > >> > > > > > IgnoreConnectorClientConfigPolicy
> > > >> > > > > > > > > > policy?
> > > >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy
> > class
> > > >> > > > necessary?
> > > >> > > > > > The
> > > >> > > > > > > > > > default
> > > >> > > > > > > > > > > >> for the connector.client.config.policy
> property
> > > >> could
> > > >> > > > simply
> > > >> > > > > > be
> > > >> > > > > > > > null
> > > >> > > > > > > > > > > >> instead of a new policy that, as far as I can
> > > tell,
> > > >> > > isn't
> > > >> > > > an
> > > >> > > > > > > > actual
> > > >> > > > > > > > > > > policy
> > > >> > > > > > > > > > > >> in that its validate(...) method is never
> > invoked
> > > >> and
> > > >> > > > > instead
> > > >> > > > > > > > > > > represents a
> > > >> > > > > > > > > > > >> special case to the Connect framework that
> says
> > > >> "Drop
> > > >> > > all
> > > >> > > > > > > > overrides
> > > >> > > > > > > > > > and
> > > >> > > > > > > > > > > >> never use me".
> > > >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy
> > seems
> > > >> > like a
> > > >> > > > > > > specific
> > > >> > > > > > > > > > > instance
> > > >> > > > > > > > > > > >> of a more general use case: allow exactly a
> > small
> > > >> set
> > > >> > of
> > > >> > > > > > > overrides
> > > >> > > > > > > > > and
> > > >> > > > > > > > > > > no
> > > >> > > > > > > > > > > >> others. Why not generalize here and create a
> > > policy
> > > >> > that
> > > >> > > > > > > accepts a
> > > >> > > > > > > > > > list
> > > >> > > > > > > > > > > of
> > > >> > > > > > > > > > > >> allowed overrides during configuration?
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> Thanks again for the KIP.
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> Cheers,
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> Chris
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> > > Nandakumar <
> > > >> > > > > > > > > > mageshn@confluent.io
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > > >> wrote:
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >> > Hi all,
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client
> Config
> > > >> > Override
> > > >> > > > > > > Policy",
> > > >> > > > > > > > > > which
> > > >> > > > > > > > > > > >> > allows users to override the connector
> client
> > > >> > > > > configurations
> > > >> > > > > > > > based
> > > >> > > > > > > > > > on
> > > >> > > > > > > > > > > a
> > > >> > > > > > > > > > > >> > policy defined by the administrator.
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > The KIP can be found at
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > >
> > > >> > > > > > > > >
> > > >> > > > > > > >
> > > >> > > > > > >
> > > >> > > > > >
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > >> > > > > > > > > > > >> > .
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > Looking forward for the discussion on the
> KIP
> > > and
> > > >> > all
> > > >> > > of
> > > >> > > > > > your
> > > >> > > > > > > > > > > thoughts &
> > > >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >> > Thanks,
> > > >> > > > > > > > > > > >> > Magesh
> > > >> > > > > > > > > > > >> >
> > > >> > > > > > > > > > > >>
> > > >> > > > > > > > > > > >
> > > >> > > > > > > > > > >
> > > >> > > > > > > > > >
> > > >> > > > > > > > >
> > > >> > > > > > > >
> > > >> > > > > > >
> > > >> > > > > >
> > > >> > > > >
> > > >> > > >
> > > >> > >
> > > >> >
> > > >>
> > > >
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
Randall,

Thanks a lot for your feedback.

If I understand it correctly, we could do one of the following, right?

1. introduce a new config `allow.client.config.overrides` with a default
value of false. The default value for the policy would be `None`. So by
default, we will still preserve the current behavior.
2. introduce `useOverride()` default method that returns true in the
interface. The `Ignore` policy would then override it to return false.
`Ignore` will also be the default policy.

I personally prefer option #2, since it involves one less configuration but
then I'm also open to the other option.

Thanks,
Magesh

On Mon, May 6, 2019 at 5:29 PM Randall Hauch <rh...@gmail.com> wrote:

> I actually like a separate config for whether to pass or filter client
> override properties to the connector. I generally dislike adding more
> properties, but in this case it keeps the two orthogonal behaviors
> independent and reduces the need to implement policies that cover all
> permutations.
>
> However, I still find it strange to have a "non-policy" be the default. So
> either of these modifications to the current KIP would be fine with me:
> 1) Add a `useOverride()` default method that returns true, but which the
> None policy could override and return false; and keep the `validate(...)`
> method as it is.
> 2) Change the `validate(Map<...>) method to support a filtering pattern,
> such as `Map<...> filterOverrides(Map<...> connectorClientOverrides)`
>
> The point is that the default is the name of a built-in policy.
>
> Also, one minor suggestion is to use the term "override" in the config
> property (e.g., `connector.client.override.policy`) since that term is used
> prevalently and matches the `producer.override`, `consumer.override`, and
> `admin.override` prefixes.
>
> Thanks for working through this, Magesh.
>
> Randall
>
> On Mon, May 6, 2019 at 1:11 PM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > Randall,
> >
> > I was wondering if you had any thoughts on the above alternatives to deal
> > with a default policy.  If it's possible, I would like to finalize the
> > discussions and start a vote.
> > Let me know your thoughts.
> >
> > Thanks,
> > Magesh
> >
> > On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <ma...@confluent.io>
> > wrote:
> >
> > > Randall,
> > >
> > > The approach to return the to override configs could possibly make it
> > > cumbersome to implement a custom policy. This is a new configuration
> and
> > if
> > > you don't explicitly set it the existing behavior remains as-is. Like
> > > Chris, I also preferred this approach for the sake of simplicity.  If
> not
> > > for the default `null` I would prefer to fall back to using `Ignore`
> > which
> > > is a misnomer to the interface spec but still gets the job done via
> > > instanceOf checks. The other options I could think of are as below:-
> > >
> > >    - have an enforcePolicy() method in the interface which by default
> > >    returns true and the Ignore implementation could return false
> > >    - introduce another worker config allow.connector.config.overrides
> > >    with a default value of false and the default policy can be None
> > >
> > > Let me know what you think.
> > >
> > > Thanks
> > > Magesh
> > >
> > > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com>
> wrote:
> > >
> > >> Thanks, Chris. I still think it's strange to have a non-policy, since
> > >> there's now special behavior for when the policy is not specified.
> > >>
> > >> Perhaps the inability for a policy implementation to represent the
> > >> existing
> > >> behavior suggests that the policy interface isn't quite right. Could
> the
> > >> policy's "validate" method take the overrides that were supplied and
> > >> return
> > >> the overrides that should be passed to the connector, yet still
> throwing
> > >> an
> > >> exception if any supplied overrides are not allowed. Then the
> different
> > >> policy implementations might be:
> > >>
> > >>    - Ignore (default) - returns all supplied override properties
> > >>    - None - throws exception if any override properties are supplied;
> > >>    always returns empty map if no overrides are provided
> > >>    - Principal - throws exception if other override properties are
> > >>    provided, but returns an empty map (since no properties should be
> > >> passed to
> > >>    the connector)
> > >>    - All - returns all provided override properties
> > >>
> > >> All override properties defined on the connector configuration would
> be
> > >> passed to the policy for validation, and assuming there's no error all
> > of
> > >> these overrides would be used in the producer/consumer/admin client.
> The
> > >> result of the policy call, however, is used to determine which of
> these
> > >> overrides are passed to the connector.
> > >>
> > >> This approach means that all behaviors can be implemented through a
> > policy
> > >> class, including the defaults. It also gives a bit more control to
> > custom
> > >> policies, should that be warranted. For example, validating the
> provided
> > >> client overrides but passing all such override properties to the
> > >> connector,
> > >> which as I stated earlier is something I think connectors likely don't
> > >> look
> > >> for.
> > >>
> > >> Thoughts?
> > >>
> > >> Randall
> > >>
> > >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io>
> > >> wrote:
> > >>
> > >> > Randall,
> > >> >
> > >> > The special behavior for null was my suggestion. There is no
> > >> implementation
> > >> > of the proposed interface that causes client overrides to be
> ignored,
> > so
> > >> > the original idea was to have a special implementation that would be
> > >> > checked for by the Connect framework (probably via the instanceof
> > >> operator)
> > >> > and, if present, cause all would-be overrides to be ignored.
> > >> >
> > >> > I thought this may be confusing to people who may see that behavior
> > and
> > >> > wonder how to recreate it themselves, so I suggested leaving that
> > policy
> > >> > out and replace it with a check to see if a policy was specified at
> > all.
> > >> >
> > >> > Would be interested in your thoughts on this, especially if there's
> an
> > >> > alternative that hasn't been proposed yet.
> > >> >
> > >> > Cheers,
> > >> >
> > >> > Chris
> > >> >
> > >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:
> > >> >
> > >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> > >> mageshn@confluent.io>
> > >> > > wrote:
> > >> > >
> > >> > > > Randall,
> > >> > > >
> > >> > > > Thanks a lot for your feedback.
> > >> > > >
> > >> > > > You bring up an interesting point regarding the overrides being
> > >> > available
> > >> > > > to the connectors. Today everything that is specified in the
> > config
> > >> > while
> > >> > > > creating is available for the connector. But this is a specific
> > case
> > >> > and
> > >> > > we
> > >> > > > could do either of the following
> > >> > > >
> > >> > > >
> > >> > > >    - don't pass any configs with these prefixes to the
> > >> ConnectorConfig
> > >> > > >    instance that's passed in the startConnector
> > >> > > >    - allow policies as to whether the configurations with the
> > >> prefixes
> > >> > > >    should be made available to the connector or not. Should this
> > >> also
> > >> > > > define a
> > >> > > >    list of configurations?
> > >> > > >
> > >> > > > I personally prefer not passing the configs to Connector since
> > >> that's
> > >> > > > simple, straight forward and don't see a reason for the
> connector
> > to
> > >> > > access
> > >> > > > those.
> > >> > > >
> > >> > >
> > >> > > I agree that these override properties should be effectively new
> > >> > > properties, in which case I'd also prefer that they be removed
> from
> > >> the
> > >> > > configuration before it is passed to the connector. Yes, it is
> > >> *possible*
> > >> > > that an existing connector happened to use connector config
> > properties
> > >> > with
> > >> > > these prefixes, but it's seems pretty unlikely.
> > >> > >
> > >> > > I'd love to hear whether other people agree.
> > >> > >
> > >> > >
> > >> > > >
> > >> > > > For the second point,  None - doesn't allow overrides and the
> > >> default
> > >> > > > policy is null. We preserve backward compatibility when no
> policy
> > is
> > >> > > > configured. Let me know if that's not clear in the KIP.
> > >> > > >
> > >> > >
> > >> > > Why not have a default policy (rather than null) that implements
> the
> > >> > > backward-compatible behavior? It seems strange to have null be the
> > >> > default
> > >> > > and for non-policy to allow anything.
> > >> > >
> > >> > >
> > >> > > >
> > >> > > > Thanks,
> > >> > > > Magesh
> > >> > > >
> > >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rhauch@gmail.com
> >
> > >> > wrote:
> > >> > > >
> > >> > > > > Per the proposal, a connector configuration can define one or
> > more
> > >> > > > > properties that begin with any of the three prefixes:
> > >> > > > "producer.override.",
> > >> > > > > "consumer.override.", and "admin.override.". The proposal
> > states:
> > >> > > > >
> > >> > > > > Since the users can specify any of these policies, the
> > connectors
> > >> > > itself
> > >> > > > > should not rely on these configurations to be available. The
> > >> > overrides
> > >> > > > are
> > >> > > > > to be used purely from an operational perspective.
> > >> > > > >
> > >> > > > >
> > >> > > > > Does this mean that any such properties are visible to
> > >> connectors, or
> > >> > > > will
> > >> > > > > they be hidden to connectors? Currently no connectors have
> > access
> > >> to
> > >> > > such
> > >> > > > > client properties, and users are unlike to just put them into
> a
> > >> > > connector
> > >> > > > > configuration unnecessarily. A connector implementation could
> > have
> > >> > > > defined
> > >> > > > > such properties as normal connector-specific properties, in
> > which
> > >> > case
> > >> > > > they
> > >> > > > > are required, but is that likely given the log prefixes? One
> > >> concern
> > >> > > > that I
> > >> > > > > have is that this might allow connector implementations start
> > >> > > attempting
> > >> > > > to
> > >> > > > > circumvent the Connect API if these properties are included.
> > >> > > > >
> > >> > > > > Second, does the None policy allow but ignore these additional
> > >> > > properties
> > >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None
> > policy
> > >> > fail
> > >> > > > if
> > >> > > > > any client overrides are specified? The former seems more in
> > line
> > >> > with
> > >> > > > the
> > >> > > > > current behavior, whereas the "disallows" policy seems useful
> > but
> > >> not
> > >> > > > > exactly backward compatible. Should we also offer a "Disallow"
> > >> > policy?
> > >> > > In
> > >> > > > > fact, should the policies be named "Ignore" (default),
> > "Disallow",
> > >> > > > > "Prinicipal", and "All"?
> > >> > > > >
> > >> > > > > Otherwise, I like the idea of this. There have been several
> > >> requests
> > >> > > over
> > >> > > > > the past year or two for adding subsets of this functionality.
> > >> Might
> > >> > be
> > >> > > > > good to find and list all of the related KAFKA issues.
> > >> > > > >
> > >> > > > > Randall
> > >> > > > >
> > >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> > >> chrise@confluent.io>
> > >> > > > wrote:
> > >> > > > >
> > >> > > > > > Hi Magesh,
> > >> > > > > >
> > >> > > > > > Changes look good to me! Excited to see this happen, hope
> the
> > >> KIP
> > >> > > > passes
> > >> > > > > :)
> > >> > > > > >
> > >> > > > > > Cheers,
> > >> > > > > >
> > >> > > > > > Chris
> > >> > > > > >
> > >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > >> > > > mageshn@confluent.io>
> > >> > > > > > wrote:
> > >> > > > > >
> > >> > > > > > > Hi Chris,
> > >> > > > > > >
> > >> > > > > > > I have updated the KIP to reflect the changes that we
> > >> discussed
> > >> > for
> > >> > > > the
> > >> > > > > > > prefix. Thanks for all your inputs.
> > >> > > > > > >
> > >> > > > > > > Thanks,
> > >> > > > > > > Magesh
> > >> > > > > > >
> > >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> > >> > chrise@confluent.io
> > >> > > >
> > >> > > > > > wrote:
> > >> > > > > > >
> > >> > > > > > > > Hi Magesh,
> > >> > > > > > > >
> > >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't
> > have a
> > >> > > strong
> > >> > > > > > > opinion
> > >> > > > > > > > between `connector.` and `.override`, but I have a
> slight
> > >> > > > inclination
> > >> > > > > > > > toward `.override` since `connector.` feels a little
> > >> redundant
> > >> > > > given
> > >> > > > > > that
> > >> > > > > > > > the whole configuration is for the connector and the use
> > of
> > >> > > > > "override"
> > >> > > > > > > may
> > >> > > > > > > > shed a little light on how the properties for these
> > clients
> > >> are
> > >> > > > > > computed
> > >> > > > > > > > and help make the learning curve a little gentler on new
> > >> devs
> > >> > and
> > >> > > > > > users.
> > >> > > > > > > >
> > >> > > > > > > > Regardless, I think the larger issue of conflicts with
> > >> existing
> > >> > > > > > > properties
> > >> > > > > > > > (both in MM2 and potentially other connectors) has been
> > >> > > > > satisfactorily
> > >> > > > > > > > addressed, so I'm happy.
> > >> > > > > > > >
> > >> > > > > > > > Cheers,
> > >> > > > > > > >
> > >> > > > > > > > Chris
> > >> > > > > > > >
> > >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > >> > > > > > mageshn@confluent.io
> > >> > > > > > > >
> > >> > > > > > > > wrote:
> > >> > > > > > > >
> > >> > > > > > > > > HI Chrise,
> > >> > > > > > > > >
> > >> > > > > > > > > You are right about the "admin." prefix creating
> > >> conflicts.
> > >> > > Here
> > >> > > > > are
> > >> > > > > > > few
> > >> > > > > > > > > options that I can think of
> > >> > > > > > > > >
> > >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only for
> > >> DLQ.
> > >> > But
> > >> > > > > this
> > >> > > > > > > > might
> > >> > > > > > > > > not really be the case in the future. So, we should
> > >> possibly
> > >> > > drop
> > >> > > > > > this
> > >> > > > > > > > idea
> > >> > > > > > > > > :)
> > >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> > >> > > > > > > `connector.admin`
> > >> > > > > > > > -
> > >> > > > > > > > > provides better context that its connector specific
> > >> property
> > >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override` and
> > >> > > > > > `admin.override`
> > >> > > > > > > -
> > >> > > > > > > > > provides better clarity that these are overrides.
> > >> > > > > > > > >
> > >> > > > > > > > > I don't have a strong opinion in choosing between #2
> and
> > >> #3.
> > >> > > Let
> > >> > > > me
> > >> > > > > > > > > know what you think.
> > >> > > > > > > > >
> > >> > > > > > > > > Thanks
> > >> > > > > > > > > Magesh
> > >> > > > > > > > >
> > >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > >> > > > > chrise@confluent.io>
> > >> > > > > > > > > wrote:
> > >> > > > > > > > >
> > >> > > > > > > > > > Hi Magesh,
> > >> > > > > > > > > >
> > >> > > > > > > > > > Next round :)
> > >> > > > > > > > > >
> > >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> > >> properties
> > >> > > that
> > >> > > > > > > affect
> > >> > > > > > > > > > AdminClients it creates and uses, which IIUC is the
> > same
> > >> > > prefix
> > >> > > > > > name
> > >> > > > > > > to
> > >> > > > > > > > > be
> > >> > > > > > > > > > used for managing the DLQ for sink connectors in
> this
> > >> KIP.
> > >> > > > > Doesn't
> > >> > > > > > > that
> > >> > > > > > > > > > still leave room for conflict? I'm imagining a
> > scenario
> > >> > like
> > >> > > > > this:
> > >> > > > > > a
> > >> > > > > > > > > > Connect worker is configured to use the
> > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries
> to
> > >> > start
> > >> > > an
> > >> > > > > > > > instance
> > >> > > > > > > > > of
> > >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> > >> > > > > > > > > "admin.sasl.jaas.config",
> > >> > > > > > > > > > and gets rejected because those properties are then
> > >> > > interpreted
> > >> > > > > by
> > >> > > > > > > the
> > >> > > > > > > > > > worker as overrides for the AdminClient it uses to
> > >> manage
> > >> > the
> > >> > > > > DLQ.
> > >> > > > > > > > > > 2. (LGTM)
> > >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> > >> > identifies a
> > >> > > > > > common
> > >> > > > > > > > use
> > >> > > > > > > > > > case that would involve a similar client config
> policy
> > >> > > > > > implementation
> > >> > > > > > > > > that
> > >> > > > > > > > > > would be limited to a small set of whitelisted
> > configs.
> > >> For
> > >> > > now
> > >> > > > > > > keeping
> > >> > > > > > > > > the
> > >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to
> > me.
> > >> > > > > > > > > >
> > >> > > > > > > > > > Cheers,
> > >> > > > > > > > > >
> > >> > > > > > > > > > Chris
> > >> > > > > > > > > >
> > >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> > >> > > > > > > > mageshn@confluent.io
> > >> > > > > > > > > >
> > >> > > > > > > > > > wrote:
> > >> > > > > > > > > >
> > >> > > > > > > > > > > Hi all,
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > I also have a draft implementation of the KIP
> > >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I
> would
> > >> still
> > >> > > > need
> > >> > > > > to
> > >> > > > > > > > > include
> > >> > > > > > > > > > > more tests and docs but I thought it would be
> useful
> > >> to
> > >> > > have
> > >> > > > > this
> > >> > > > > > > for
> > >> > > > > > > > > the
> > >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> > >> valuable
> > >> > > > > feedback.
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > Thanks
> > >> > > > > > > > > > > Magesh
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh
> Nandakumar <
> > >> > > > > > > > > mageshn@confluent.io
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > wrote:
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > > Chrise,
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > Thanks a lot for your feedback. I will address
> > them
> > >> in
> > >> > > > order
> > >> > > > > of
> > >> > > > > > > > your
> > >> > > > > > > > > > > > questions/comments.
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > 1. Thanks for bringing this to my attention
> about
> > >> > > KIP-382.
> > >> > > > I
> > >> > > > > > had
> > >> > > > > > > a
> > >> > > > > > > > > > closer
> > >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> > `consumer.`
> > >> > > prefix
> > >> > > > > for
> > >> > > > > > > > > > > SourceConnector
> > >> > > > > > > > > > > > and producer. prefix for SinkConnector since
> those
> > >> are
> > >> > > > > > additional
> > >> > > > > > > > > > > > connector properties to help resolve the Kafka
> > >> cluster
> > >> > > > other
> > >> > > > > > than
> > >> > > > > > > > the
> > >> > > > > > > > > > one
> > >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> > >> proposal in
> > >> > > > > KIP-458
> > >> > > > > > > > > applies
> > >> > > > > > > > > > > > producer policies for SinkConnectors and
> consumer
> > >> > > policies
> > >> > > > > > > > > > > > SourceConnectors.  So, from what I understand
> this
> > >> new
> > >> > > > policy
> > >> > > > > > > > should
> > >> > > > > > > > > > work
> > >> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> > >> > > > > > > > > > > > 2. I have updated the KIP to use a default value
> > of
> > >> > null
> > >> > > > and
> > >> > > > > > use
> > >> > > > > > > > that
> > >> > > > > > > > > > to
> > >> > > > > > > > > > > > determine if we need to ignore overrides.
> > >> > > > > > > > > > > > 3. I would still prefer to keep the special
> > >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > >> > > > > > > > > > > > since that is one of the most common use cases
> one
> > >> > would
> > >> > > > > choose
> > >> > > > > > > to
> > >> > > > > > > > > use
> > >> > > > > > > > > > > this
> > >> > > > > > > > > > > > feature. If we make it a general case, that
> would
> > >> > involve
> > >> > > > > users
> > >> > > > > > > > > > requiring
> > >> > > > > > > > > > > > to add additional configuration and they might
> > >> require
> > >> > > well
> > >> > > > > > more
> > >> > > > > > > > than
> > >> > > > > > > > > > > just
> > >> > > > > > > > > > > > the list of configs but might also want some
> > >> > restriction
> > >> > > on
> > >> > > > > > > values.
> > >> > > > > > > > > If
> > >> > > > > > > > > > > the
> > >> > > > > > > > > > > > concern is about users wanting principal and
> also
> > >> other
> > >> > > > > > configs,
> > >> > > > > > > it
> > >> > > > > > > > > > would
> > >> > > > > > > > > > > > still be possible by means of a custom
> > >> implementation.
> > >> > As
> > >> > > > > is, I
> > >> > > > > > > > would
> > >> > > > > > > > > > > > prefer to keep the proposal to be the same for
> > this.
> > >> > Let
> > >> > > me
> > >> > > > > > know
> > >> > > > > > > > your
> > >> > > > > > > > > > > > thoughts.
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > Thanks,
> > >> > > > > > > > > > > > Magesh
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> > >> > > > > > > chrise@confluent.io
> > >> > > > > > > > >
> > >> > > > > > > > > > > wrote:
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > >> Hi Magesh,
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> > >> > questions/comments
> > >> > > > but
> > >> > > > > > > > > overall I
> > >> > > > > > > > > > > >> like
> > >> > > > > > > > > > > >> the direction it's headed in and hope to see it
> > >> > included
> > >> > > > in
> > >> > > > > > the
> > >> > > > > > > > > > Connect
> > >> > > > > > > > > > > >> framework soon.
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> 1. With the proposed "consumer.", "producer.",
> > and
> > >> > > > "admin."
> > >> > > > > > > > > prefixes,
> > >> > > > > > > > > > > how
> > >> > > > > > > > > > > >> will this interact with connectors such as the
> > >> > upcoming
> > >> > > > > Mirror
> > >> > > > > > > > Maker
> > >> > > > > > > > > > 2.0
> > >> > > > > > > > > > > >> (KIP-382) that already support properties with
> > >> those
> > >> > > > > prefixes?
> > >> > > > > > > > Would
> > >> > > > > > > > > > it
> > >> > > > > > > > > > > be
> > >> > > > > > > > > > > >> possible for a user to configure MM2 with those
> > >> > > properties
> > >> > > > > > > without
> > >> > > > > > > > > > them
> > >> > > > > > > > > > > >> being interpreted as Connect client overrides,
> > >> without
> > >> > > > > > isolating
> > >> > > > > > > > MM2
> > >> > > > > > > > > > > onto
> > >> > > > > > > > > > > >> its own cluster and using the
> > >> > > > > > IgnoreConnectorClientConfigPolicy
> > >> > > > > > > > > > policy?
> > >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy
> class
> > >> > > > necessary?
> > >> > > > > > The
> > >> > > > > > > > > > default
> > >> > > > > > > > > > > >> for the connector.client.config.policy property
> > >> could
> > >> > > > simply
> > >> > > > > > be
> > >> > > > > > > > null
> > >> > > > > > > > > > > >> instead of a new policy that, as far as I can
> > tell,
> > >> > > isn't
> > >> > > > an
> > >> > > > > > > > actual
> > >> > > > > > > > > > > policy
> > >> > > > > > > > > > > >> in that its validate(...) method is never
> invoked
> > >> and
> > >> > > > > instead
> > >> > > > > > > > > > > represents a
> > >> > > > > > > > > > > >> special case to the Connect framework that says
> > >> "Drop
> > >> > > all
> > >> > > > > > > > overrides
> > >> > > > > > > > > > and
> > >> > > > > > > > > > > >> never use me".
> > >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy
> seems
> > >> > like a
> > >> > > > > > > specific
> > >> > > > > > > > > > > instance
> > >> > > > > > > > > > > >> of a more general use case: allow exactly a
> small
> > >> set
> > >> > of
> > >> > > > > > > overrides
> > >> > > > > > > > > and
> > >> > > > > > > > > > > no
> > >> > > > > > > > > > > >> others. Why not generalize here and create a
> > policy
> > >> > that
> > >> > > > > > > accepts a
> > >> > > > > > > > > > list
> > >> > > > > > > > > > > of
> > >> > > > > > > > > > > >> allowed overrides during configuration?
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> Thanks again for the KIP.
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> Cheers,
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> Chris
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> > Nandakumar <
> > >> > > > > > > > > > mageshn@confluent.io
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > >> wrote:
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >> > Hi all,
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client Config
> > >> > Override
> > >> > > > > > > Policy",
> > >> > > > > > > > > > which
> > >> > > > > > > > > > > >> > allows users to override the connector client
> > >> > > > > configurations
> > >> > > > > > > > based
> > >> > > > > > > > > > on
> > >> > > > > > > > > > > a
> > >> > > > > > > > > > > >> > policy defined by the administrator.
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > The KIP can be found at
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > >
> > >> > > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > >> > > > > > > > > > > >> > .
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > Looking forward for the discussion on the KIP
> > and
> > >> > all
> > >> > > of
> > >> > > > > > your
> > >> > > > > > > > > > > thoughts &
> > >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >> > Thanks,
> > >> > > > > > > > > > > >> > Magesh
> > >> > > > > > > > > > > >> >
> > >> > > > > > > > > > > >>
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > >
> > >> > > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > >
> > >> > > > > > >
> > >> > > > > >
> > >> > > > >
> > >> > > >
> > >> > >
> > >> >
> > >>
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Randall Hauch <rh...@gmail.com>.
I actually like a separate config for whether to pass or filter client
override properties to the connector. I generally dislike adding more
properties, but in this case it keeps the two orthogonal behaviors
independent and reduces the need to implement policies that cover all
permutations.

However, I still find it strange to have a "non-policy" be the default. So
either of these modifications to the current KIP would be fine with me:
1) Add a `useOverride()` default method that returns true, but which the
None policy could override and return false; and keep the `validate(...)`
method as it is.
2) Change the `validate(Map<...>) method to support a filtering pattern,
such as `Map<...> filterOverrides(Map<...> connectorClientOverrides)`

The point is that the default is the name of a built-in policy.

Also, one minor suggestion is to use the term "override" in the config
property (e.g., `connector.client.override.policy`) since that term is used
prevalently and matches the `producer.override`, `consumer.override`, and
`admin.override` prefixes.

Thanks for working through this, Magesh.

Randall

On Mon, May 6, 2019 at 1:11 PM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Randall,
>
> I was wondering if you had any thoughts on the above alternatives to deal
> with a default policy.  If it's possible, I would like to finalize the
> discussions and start a vote.
> Let me know your thoughts.
>
> Thanks,
> Magesh
>
> On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > Randall,
> >
> > The approach to return the to override configs could possibly make it
> > cumbersome to implement a custom policy. This is a new configuration and
> if
> > you don't explicitly set it the existing behavior remains as-is. Like
> > Chris, I also preferred this approach for the sake of simplicity.  If not
> > for the default `null` I would prefer to fall back to using `Ignore`
> which
> > is a misnomer to the interface spec but still gets the job done via
> > instanceOf checks. The other options I could think of are as below:-
> >
> >    - have an enforcePolicy() method in the interface which by default
> >    returns true and the Ignore implementation could return false
> >    - introduce another worker config allow.connector.config.overrides
> >    with a default value of false and the default policy can be None
> >
> > Let me know what you think.
> >
> > Thanks
> > Magesh
> >
> > On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:
> >
> >> Thanks, Chris. I still think it's strange to have a non-policy, since
> >> there's now special behavior for when the policy is not specified.
> >>
> >> Perhaps the inability for a policy implementation to represent the
> >> existing
> >> behavior suggests that the policy interface isn't quite right. Could the
> >> policy's "validate" method take the overrides that were supplied and
> >> return
> >> the overrides that should be passed to the connector, yet still throwing
> >> an
> >> exception if any supplied overrides are not allowed. Then the different
> >> policy implementations might be:
> >>
> >>    - Ignore (default) - returns all supplied override properties
> >>    - None - throws exception if any override properties are supplied;
> >>    always returns empty map if no overrides are provided
> >>    - Principal - throws exception if other override properties are
> >>    provided, but returns an empty map (since no properties should be
> >> passed to
> >>    the connector)
> >>    - All - returns all provided override properties
> >>
> >> All override properties defined on the connector configuration would be
> >> passed to the policy for validation, and assuming there's no error all
> of
> >> these overrides would be used in the producer/consumer/admin client. The
> >> result of the policy call, however, is used to determine which of these
> >> overrides are passed to the connector.
> >>
> >> This approach means that all behaviors can be implemented through a
> policy
> >> class, including the defaults. It also gives a bit more control to
> custom
> >> policies, should that be warranted. For example, validating the provided
> >> client overrides but passing all such override properties to the
> >> connector,
> >> which as I stated earlier is something I think connectors likely don't
> >> look
> >> for.
> >>
> >> Thoughts?
> >>
> >> Randall
> >>
> >> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io>
> >> wrote:
> >>
> >> > Randall,
> >> >
> >> > The special behavior for null was my suggestion. There is no
> >> implementation
> >> > of the proposed interface that causes client overrides to be ignored,
> so
> >> > the original idea was to have a special implementation that would be
> >> > checked for by the Connect framework (probably via the instanceof
> >> operator)
> >> > and, if present, cause all would-be overrides to be ignored.
> >> >
> >> > I thought this may be confusing to people who may see that behavior
> and
> >> > wonder how to recreate it themselves, so I suggested leaving that
> policy
> >> > out and replace it with a check to see if a policy was specified at
> all.
> >> >
> >> > Would be interested in your thoughts on this, especially if there's an
> >> > alternative that hasn't been proposed yet.
> >> >
> >> > Cheers,
> >> >
> >> > Chris
> >> >
> >> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:
> >> >
> >> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> >> mageshn@confluent.io>
> >> > > wrote:
> >> > >
> >> > > > Randall,
> >> > > >
> >> > > > Thanks a lot for your feedback.
> >> > > >
> >> > > > You bring up an interesting point regarding the overrides being
> >> > available
> >> > > > to the connectors. Today everything that is specified in the
> config
> >> > while
> >> > > > creating is available for the connector. But this is a specific
> case
> >> > and
> >> > > we
> >> > > > could do either of the following
> >> > > >
> >> > > >
> >> > > >    - don't pass any configs with these prefixes to the
> >> ConnectorConfig
> >> > > >    instance that's passed in the startConnector
> >> > > >    - allow policies as to whether the configurations with the
> >> prefixes
> >> > > >    should be made available to the connector or not. Should this
> >> also
> >> > > > define a
> >> > > >    list of configurations?
> >> > > >
> >> > > > I personally prefer not passing the configs to Connector since
> >> that's
> >> > > > simple, straight forward and don't see a reason for the connector
> to
> >> > > access
> >> > > > those.
> >> > > >
> >> > >
> >> > > I agree that these override properties should be effectively new
> >> > > properties, in which case I'd also prefer that they be removed from
> >> the
> >> > > configuration before it is passed to the connector. Yes, it is
> >> *possible*
> >> > > that an existing connector happened to use connector config
> properties
> >> > with
> >> > > these prefixes, but it's seems pretty unlikely.
> >> > >
> >> > > I'd love to hear whether other people agree.
> >> > >
> >> > >
> >> > > >
> >> > > > For the second point,  None - doesn't allow overrides and the
> >> default
> >> > > > policy is null. We preserve backward compatibility when no policy
> is
> >> > > > configured. Let me know if that's not clear in the KIP.
> >> > > >
> >> > >
> >> > > Why not have a default policy (rather than null) that implements the
> >> > > backward-compatible behavior? It seems strange to have null be the
> >> > default
> >> > > and for non-policy to allow anything.
> >> > >
> >> > >
> >> > > >
> >> > > > Thanks,
> >> > > > Magesh
> >> > > >
> >> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rh...@gmail.com>
> >> > wrote:
> >> > > >
> >> > > > > Per the proposal, a connector configuration can define one or
> more
> >> > > > > properties that begin with any of the three prefixes:
> >> > > > "producer.override.",
> >> > > > > "consumer.override.", and "admin.override.". The proposal
> states:
> >> > > > >
> >> > > > > Since the users can specify any of these policies, the
> connectors
> >> > > itself
> >> > > > > should not rely on these configurations to be available. The
> >> > overrides
> >> > > > are
> >> > > > > to be used purely from an operational perspective.
> >> > > > >
> >> > > > >
> >> > > > > Does this mean that any such properties are visible to
> >> connectors, or
> >> > > > will
> >> > > > > they be hidden to connectors? Currently no connectors have
> access
> >> to
> >> > > such
> >> > > > > client properties, and users are unlike to just put them into a
> >> > > connector
> >> > > > > configuration unnecessarily. A connector implementation could
> have
> >> > > > defined
> >> > > > > such properties as normal connector-specific properties, in
> which
> >> > case
> >> > > > they
> >> > > > > are required, but is that likely given the log prefixes? One
> >> concern
> >> > > > that I
> >> > > > > have is that this might allow connector implementations start
> >> > > attempting
> >> > > > to
> >> > > > > circumvent the Connect API if these properties are included.
> >> > > > >
> >> > > > > Second, does the None policy allow but ignore these additional
> >> > > properties
> >> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None
> policy
> >> > fail
> >> > > > if
> >> > > > > any client overrides are specified? The former seems more in
> line
> >> > with
> >> > > > the
> >> > > > > current behavior, whereas the "disallows" policy seems useful
> but
> >> not
> >> > > > > exactly backward compatible. Should we also offer a "Disallow"
> >> > policy?
> >> > > In
> >> > > > > fact, should the policies be named "Ignore" (default),
> "Disallow",
> >> > > > > "Prinicipal", and "All"?
> >> > > > >
> >> > > > > Otherwise, I like the idea of this. There have been several
> >> requests
> >> > > over
> >> > > > > the past year or two for adding subsets of this functionality.
> >> Might
> >> > be
> >> > > > > good to find and list all of the related KAFKA issues.
> >> > > > >
> >> > > > > Randall
> >> > > > >
> >> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
> >> chrise@confluent.io>
> >> > > > wrote:
> >> > > > >
> >> > > > > > Hi Magesh,
> >> > > > > >
> >> > > > > > Changes look good to me! Excited to see this happen, hope the
> >> KIP
> >> > > > passes
> >> > > > > :)
> >> > > > > >
> >> > > > > > Cheers,
> >> > > > > >
> >> > > > > > Chris
> >> > > > > >
> >> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> >> > > > mageshn@confluent.io>
> >> > > > > > wrote:
> >> > > > > >
> >> > > > > > > Hi Chris,
> >> > > > > > >
> >> > > > > > > I have updated the KIP to reflect the changes that we
> >> discussed
> >> > for
> >> > > > the
> >> > > > > > > prefix. Thanks for all your inputs.
> >> > > > > > >
> >> > > > > > > Thanks,
> >> > > > > > > Magesh
> >> > > > > > >
> >> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> >> > chrise@confluent.io
> >> > > >
> >> > > > > > wrote:
> >> > > > > > >
> >> > > > > > > > Hi Magesh,
> >> > > > > > > >
> >> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't
> have a
> >> > > strong
> >> > > > > > > opinion
> >> > > > > > > > between `connector.` and `.override`, but I have a slight
> >> > > > inclination
> >> > > > > > > > toward `.override` since `connector.` feels a little
> >> redundant
> >> > > > given
> >> > > > > > that
> >> > > > > > > > the whole configuration is for the connector and the use
> of
> >> > > > > "override"
> >> > > > > > > may
> >> > > > > > > > shed a little light on how the properties for these
> clients
> >> are
> >> > > > > > computed
> >> > > > > > > > and help make the learning curve a little gentler on new
> >> devs
> >> > and
> >> > > > > > users.
> >> > > > > > > >
> >> > > > > > > > Regardless, I think the larger issue of conflicts with
> >> existing
> >> > > > > > > properties
> >> > > > > > > > (both in MM2 and potentially other connectors) has been
> >> > > > > satisfactorily
> >> > > > > > > > addressed, so I'm happy.
> >> > > > > > > >
> >> > > > > > > > Cheers,
> >> > > > > > > >
> >> > > > > > > > Chris
> >> > > > > > > >
> >> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> >> > > > > > mageshn@confluent.io
> >> > > > > > > >
> >> > > > > > > > wrote:
> >> > > > > > > >
> >> > > > > > > > > HI Chrise,
> >> > > > > > > > >
> >> > > > > > > > > You are right about the "admin." prefix creating
> >> conflicts.
> >> > > Here
> >> > > > > are
> >> > > > > > > few
> >> > > > > > > > > options that I can think of
> >> > > > > > > > >
> >> > > > > > > > > 1. Use `dlq.admin` since admin client is used only for
> >> DLQ.
> >> > But
> >> > > > > this
> >> > > > > > > > might
> >> > > > > > > > > not really be the case in the future. So, we should
> >> possibly
> >> > > drop
> >> > > > > > this
> >> > > > > > > > idea
> >> > > > > > > > > :)
> >> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> >> > > > > > > `connector.admin`
> >> > > > > > > > -
> >> > > > > > > > > provides better context that its connector specific
> >> property
> >> > > > > > > > > 3.  Use `producer.override`, '`consumer.override` and
> >> > > > > > `admin.override`
> >> > > > > > > -
> >> > > > > > > > > provides better clarity that these are overrides.
> >> > > > > > > > >
> >> > > > > > > > > I don't have a strong opinion in choosing between #2 and
> >> #3.
> >> > > Let
> >> > > > me
> >> > > > > > > > > know what you think.
> >> > > > > > > > >
> >> > > > > > > > > Thanks
> >> > > > > > > > > Magesh
> >> > > > > > > > >
> >> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> >> > > > > chrise@confluent.io>
> >> > > > > > > > > wrote:
> >> > > > > > > > >
> >> > > > > > > > > > Hi Magesh,
> >> > > > > > > > > >
> >> > > > > > > > > > Next round :)
> >> > > > > > > > > >
> >> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> >> properties
> >> > > that
> >> > > > > > > affect
> >> > > > > > > > > > AdminClients it creates and uses, which IIUC is the
> same
> >> > > prefix
> >> > > > > > name
> >> > > > > > > to
> >> > > > > > > > > be
> >> > > > > > > > > > used for managing the DLQ for sink connectors in this
> >> KIP.
> >> > > > > Doesn't
> >> > > > > > > that
> >> > > > > > > > > > still leave room for conflict? I'm imagining a
> scenario
> >> > like
> >> > > > > this:
> >> > > > > > a
> >> > > > > > > > > > Connect worker is configured to use the
> >> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries to
> >> > start
> >> > > an
> >> > > > > > > > instance
> >> > > > > > > > > of
> >> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> >> > > > > > > > > "admin.sasl.jaas.config",
> >> > > > > > > > > > and gets rejected because those properties are then
> >> > > interpreted
> >> > > > > by
> >> > > > > > > the
> >> > > > > > > > > > worker as overrides for the AdminClient it uses to
> >> manage
> >> > the
> >> > > > > DLQ.
> >> > > > > > > > > > 2. (LGTM)
> >> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> >> > identifies a
> >> > > > > > common
> >> > > > > > > > use
> >> > > > > > > > > > case that would involve a similar client config policy
> >> > > > > > implementation
> >> > > > > > > > > that
> >> > > > > > > > > > would be limited to a small set of whitelisted
> configs.
> >> For
> >> > > now
> >> > > > > > > keeping
> >> > > > > > > > > the
> >> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to
> me.
> >> > > > > > > > > >
> >> > > > > > > > > > Cheers,
> >> > > > > > > > > >
> >> > > > > > > > > > Chris
> >> > > > > > > > > >
> >> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> >> > > > > > > > mageshn@confluent.io
> >> > > > > > > > > >
> >> > > > > > > > > > wrote:
> >> > > > > > > > > >
> >> > > > > > > > > > > Hi all,
> >> > > > > > > > > > >
> >> > > > > > > > > > > I also have a draft implementation of the KIP
> >> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I would
> >> still
> >> > > > need
> >> > > > > to
> >> > > > > > > > > include
> >> > > > > > > > > > > more tests and docs but I thought it would be useful
> >> to
> >> > > have
> >> > > > > this
> >> > > > > > > for
> >> > > > > > > > > the
> >> > > > > > > > > > > KIP discussion. Looking forward to all of your
> >> valuable
> >> > > > > feedback.
> >> > > > > > > > > > >
> >> > > > > > > > > > > Thanks
> >> > > > > > > > > > > Magesh
> >> > > > > > > > > > >
> >> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh Nandakumar <
> >> > > > > > > > > mageshn@confluent.io
> >> > > > > > > > > > >
> >> > > > > > > > > > > wrote:
> >> > > > > > > > > > >
> >> > > > > > > > > > > > Chrise,
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > Thanks a lot for your feedback. I will address
> them
> >> in
> >> > > > order
> >> > > > > of
> >> > > > > > > > your
> >> > > > > > > > > > > > questions/comments.
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > 1. Thanks for bringing this to my attention about
> >> > > KIP-382.
> >> > > > I
> >> > > > > > had
> >> > > > > > > a
> >> > > > > > > > > > closer
> >> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows
> `consumer.`
> >> > > prefix
> >> > > > > for
> >> > > > > > > > > > > SourceConnector
> >> > > > > > > > > > > > and producer. prefix for SinkConnector since those
> >> are
> >> > > > > > additional
> >> > > > > > > > > > > > connector properties to help resolve the Kafka
> >> cluster
> >> > > > other
> >> > > > > > than
> >> > > > > > > > the
> >> > > > > > > > > > one
> >> > > > > > > > > > > > Connect framework knows about. Whereas, the
> >> proposal in
> >> > > > > KIP-458
> >> > > > > > > > > applies
> >> > > > > > > > > > > > producer policies for SinkConnectors and consumer
> >> > > policies
> >> > > > > > > > > > > > SourceConnectors.  So, from what I understand this
> >> new
> >> > > > policy
> >> > > > > > > > should
> >> > > > > > > > > > work
> >> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> >> > > > > > > > > > > > 2. I have updated the KIP to use a default value
> of
> >> > null
> >> > > > and
> >> > > > > > use
> >> > > > > > > > that
> >> > > > > > > > > > to
> >> > > > > > > > > > > > determine if we need to ignore overrides.
> >> > > > > > > > > > > > 3. I would still prefer to keep the special
> >> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> >> > > > > > > > > > > > since that is one of the most common use cases one
> >> > would
> >> > > > > choose
> >> > > > > > > to
> >> > > > > > > > > use
> >> > > > > > > > > > > this
> >> > > > > > > > > > > > feature. If we make it a general case, that would
> >> > involve
> >> > > > > users
> >> > > > > > > > > > requiring
> >> > > > > > > > > > > > to add additional configuration and they might
> >> require
> >> > > well
> >> > > > > > more
> >> > > > > > > > than
> >> > > > > > > > > > > just
> >> > > > > > > > > > > > the list of configs but might also want some
> >> > restriction
> >> > > on
> >> > > > > > > values.
> >> > > > > > > > > If
> >> > > > > > > > > > > the
> >> > > > > > > > > > > > concern is about users wanting principal and also
> >> other
> >> > > > > > configs,
> >> > > > > > > it
> >> > > > > > > > > > would
> >> > > > > > > > > > > > still be possible by means of a custom
> >> implementation.
> >> > As
> >> > > > > is, I
> >> > > > > > > > would
> >> > > > > > > > > > > > prefer to keep the proposal to be the same for
> this.
> >> > Let
> >> > > me
> >> > > > > > know
> >> > > > > > > > your
> >> > > > > > > > > > > > thoughts.
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > Thanks,
> >> > > > > > > > > > > > Magesh
> >> > > > > > > > > > > >
> >> > > > > > > > > > > >
> >> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> >> > > > > > > chrise@confluent.io
> >> > > > > > > > >
> >> > > > > > > > > > > wrote:
> >> > > > > > > > > > > >
> >> > > > > > > > > > > >> Hi Magesh,
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> This is an exciting KIP! I have a few
> >> > questions/comments
> >> > > > but
> >> > > > > > > > > overall I
> >> > > > > > > > > > > >> like
> >> > > > > > > > > > > >> the direction it's headed in and hope to see it
> >> > included
> >> > > > in
> >> > > > > > the
> >> > > > > > > > > > Connect
> >> > > > > > > > > > > >> framework soon.
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> 1. With the proposed "consumer.", "producer.",
> and
> >> > > > "admin."
> >> > > > > > > > > prefixes,
> >> > > > > > > > > > > how
> >> > > > > > > > > > > >> will this interact with connectors such as the
> >> > upcoming
> >> > > > > Mirror
> >> > > > > > > > Maker
> >> > > > > > > > > > 2.0
> >> > > > > > > > > > > >> (KIP-382) that already support properties with
> >> those
> >> > > > > prefixes?
> >> > > > > > > > Would
> >> > > > > > > > > > it
> >> > > > > > > > > > > be
> >> > > > > > > > > > > >> possible for a user to configure MM2 with those
> >> > > properties
> >> > > > > > > without
> >> > > > > > > > > > them
> >> > > > > > > > > > > >> being interpreted as Connect client overrides,
> >> without
> >> > > > > > isolating
> >> > > > > > > > MM2
> >> > > > > > > > > > > onto
> >> > > > > > > > > > > >> its own cluster and using the
> >> > > > > > IgnoreConnectorClientConfigPolicy
> >> > > > > > > > > > policy?
> >> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy class
> >> > > > necessary?
> >> > > > > > The
> >> > > > > > > > > > default
> >> > > > > > > > > > > >> for the connector.client.config.policy property
> >> could
> >> > > > simply
> >> > > > > > be
> >> > > > > > > > null
> >> > > > > > > > > > > >> instead of a new policy that, as far as I can
> tell,
> >> > > isn't
> >> > > > an
> >> > > > > > > > actual
> >> > > > > > > > > > > policy
> >> > > > > > > > > > > >> in that its validate(...) method is never invoked
> >> and
> >> > > > > instead
> >> > > > > > > > > > > represents a
> >> > > > > > > > > > > >> special case to the Connect framework that says
> >> "Drop
> >> > > all
> >> > > > > > > > overrides
> >> > > > > > > > > > and
> >> > > > > > > > > > > >> never use me".
> >> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy seems
> >> > like a
> >> > > > > > > specific
> >> > > > > > > > > > > instance
> >> > > > > > > > > > > >> of a more general use case: allow exactly a small
> >> set
> >> > of
> >> > > > > > > overrides
> >> > > > > > > > > and
> >> > > > > > > > > > > no
> >> > > > > > > > > > > >> others. Why not generalize here and create a
> policy
> >> > that
> >> > > > > > > accepts a
> >> > > > > > > > > > list
> >> > > > > > > > > > > of
> >> > > > > > > > > > > >> allowed overrides during configuration?
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> Thanks again for the KIP.
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> Cheers,
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> Chris
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh
> Nandakumar <
> >> > > > > > > > > > mageshn@confluent.io
> >> > > > > > > > > > > >
> >> > > > > > > > > > > >> wrote:
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >> > Hi all,
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client Config
> >> > Override
> >> > > > > > > Policy",
> >> > > > > > > > > > which
> >> > > > > > > > > > > >> > allows users to override the connector client
> >> > > > > configurations
> >> > > > > > > > based
> >> > > > > > > > > > on
> >> > > > > > > > > > > a
> >> > > > > > > > > > > >> > policy defined by the administrator.
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > The KIP can be found at
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >>
> >> > > > > > > > > > >
> >> > > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> >> > > > > > > > > > > >> > .
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > Looking forward for the discussion on the KIP
> and
> >> > all
> >> > > of
> >> > > > > > your
> >> > > > > > > > > > > thoughts &
> >> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >> > Thanks,
> >> > > > > > > > > > > >> > Magesh
> >> > > > > > > > > > > >> >
> >> > > > > > > > > > > >>
> >> > > > > > > > > > > >
> >> > > > > > > > > > >
> >> > > > > > > > > >
> >> > > > > > > > >
> >> > > > > > > >
> >> > > > > > >
> >> > > > > >
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
Randall,

I was wondering if you had any thoughts on the above alternatives to deal
with a default policy.  If it's possible, I would like to finalize the
discussions and start a vote.
Let me know your thoughts.

Thanks,
Magesh

On Tue, Apr 30, 2019 at 8:46 PM Magesh Nandakumar <ma...@confluent.io>
wrote:

> Randall,
>
> The approach to return the to override configs could possibly make it
> cumbersome to implement a custom policy. This is a new configuration and if
> you don't explicitly set it the existing behavior remains as-is. Like
> Chris, I also preferred this approach for the sake of simplicity.  If not
> for the default `null` I would prefer to fall back to using `Ignore` which
> is a misnomer to the interface spec but still gets the job done via
> instanceOf checks. The other options I could think of are as below:-
>
>    - have an enforcePolicy() method in the interface which by default
>    returns true and the Ignore implementation could return false
>    - introduce another worker config allow.connector.config.overrides
>    with a default value of false and the default policy can be None
>
> Let me know what you think.
>
> Thanks
> Magesh
>
> On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:
>
>> Thanks, Chris. I still think it's strange to have a non-policy, since
>> there's now special behavior for when the policy is not specified.
>>
>> Perhaps the inability for a policy implementation to represent the
>> existing
>> behavior suggests that the policy interface isn't quite right. Could the
>> policy's "validate" method take the overrides that were supplied and
>> return
>> the overrides that should be passed to the connector, yet still throwing
>> an
>> exception if any supplied overrides are not allowed. Then the different
>> policy implementations might be:
>>
>>    - Ignore (default) - returns all supplied override properties
>>    - None - throws exception if any override properties are supplied;
>>    always returns empty map if no overrides are provided
>>    - Principal - throws exception if other override properties are
>>    provided, but returns an empty map (since no properties should be
>> passed to
>>    the connector)
>>    - All - returns all provided override properties
>>
>> All override properties defined on the connector configuration would be
>> passed to the policy for validation, and assuming there's no error all of
>> these overrides would be used in the producer/consumer/admin client. The
>> result of the policy call, however, is used to determine which of these
>> overrides are passed to the connector.
>>
>> This approach means that all behaviors can be implemented through a policy
>> class, including the defaults. It also gives a bit more control to custom
>> policies, should that be warranted. For example, validating the provided
>> client overrides but passing all such override properties to the
>> connector,
>> which as I stated earlier is something I think connectors likely don't
>> look
>> for.
>>
>> Thoughts?
>>
>> Randall
>>
>> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io>
>> wrote:
>>
>> > Randall,
>> >
>> > The special behavior for null was my suggestion. There is no
>> implementation
>> > of the proposed interface that causes client overrides to be ignored, so
>> > the original idea was to have a special implementation that would be
>> > checked for by the Connect framework (probably via the instanceof
>> operator)
>> > and, if present, cause all would-be overrides to be ignored.
>> >
>> > I thought this may be confusing to people who may see that behavior and
>> > wonder how to recreate it themselves, so I suggested leaving that policy
>> > out and replace it with a check to see if a policy was specified at all.
>> >
>> > Would be interested in your thoughts on this, especially if there's an
>> > alternative that hasn't been proposed yet.
>> >
>> > Cheers,
>> >
>> > Chris
>> >
>> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:
>> >
>> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
>> mageshn@confluent.io>
>> > > wrote:
>> > >
>> > > > Randall,
>> > > >
>> > > > Thanks a lot for your feedback.
>> > > >
>> > > > You bring up an interesting point regarding the overrides being
>> > available
>> > > > to the connectors. Today everything that is specified in the config
>> > while
>> > > > creating is available for the connector. But this is a specific case
>> > and
>> > > we
>> > > > could do either of the following
>> > > >
>> > > >
>> > > >    - don't pass any configs with these prefixes to the
>> ConnectorConfig
>> > > >    instance that's passed in the startConnector
>> > > >    - allow policies as to whether the configurations with the
>> prefixes
>> > > >    should be made available to the connector or not. Should this
>> also
>> > > > define a
>> > > >    list of configurations?
>> > > >
>> > > > I personally prefer not passing the configs to Connector since
>> that's
>> > > > simple, straight forward and don't see a reason for the connector to
>> > > access
>> > > > those.
>> > > >
>> > >
>> > > I agree that these override properties should be effectively new
>> > > properties, in which case I'd also prefer that they be removed from
>> the
>> > > configuration before it is passed to the connector. Yes, it is
>> *possible*
>> > > that an existing connector happened to use connector config properties
>> > with
>> > > these prefixes, but it's seems pretty unlikely.
>> > >
>> > > I'd love to hear whether other people agree.
>> > >
>> > >
>> > > >
>> > > > For the second point,  None - doesn't allow overrides and the
>> default
>> > > > policy is null. We preserve backward compatibility when no policy is
>> > > > configured. Let me know if that's not clear in the KIP.
>> > > >
>> > >
>> > > Why not have a default policy (rather than null) that implements the
>> > > backward-compatible behavior? It seems strange to have null be the
>> > default
>> > > and for non-policy to allow anything.
>> > >
>> > >
>> > > >
>> > > > Thanks,
>> > > > Magesh
>> > > >
>> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rh...@gmail.com>
>> > wrote:
>> > > >
>> > > > > Per the proposal, a connector configuration can define one or more
>> > > > > properties that begin with any of the three prefixes:
>> > > > "producer.override.",
>> > > > > "consumer.override.", and "admin.override.". The proposal states:
>> > > > >
>> > > > > Since the users can specify any of these policies, the connectors
>> > > itself
>> > > > > should not rely on these configurations to be available. The
>> > overrides
>> > > > are
>> > > > > to be used purely from an operational perspective.
>> > > > >
>> > > > >
>> > > > > Does this mean that any such properties are visible to
>> connectors, or
>> > > > will
>> > > > > they be hidden to connectors? Currently no connectors have access
>> to
>> > > such
>> > > > > client properties, and users are unlike to just put them into a
>> > > connector
>> > > > > configuration unnecessarily. A connector implementation could have
>> > > > defined
>> > > > > such properties as normal connector-specific properties, in which
>> > case
>> > > > they
>> > > > > are required, but is that likely given the log prefixes? One
>> concern
>> > > > that I
>> > > > > have is that this might allow connector implementations start
>> > > attempting
>> > > > to
>> > > > > circumvent the Connect API if these properties are included.
>> > > > >
>> > > > > Second, does the None policy allow but ignore these additional
>> > > properties
>> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None policy
>> > fail
>> > > > if
>> > > > > any client overrides are specified? The former seems more in line
>> > with
>> > > > the
>> > > > > current behavior, whereas the "disallows" policy seems useful but
>> not
>> > > > > exactly backward compatible. Should we also offer a "Disallow"
>> > policy?
>> > > In
>> > > > > fact, should the policies be named "Ignore" (default), "Disallow",
>> > > > > "Prinicipal", and "All"?
>> > > > >
>> > > > > Otherwise, I like the idea of this. There have been several
>> requests
>> > > over
>> > > > > the past year or two for adding subsets of this functionality.
>> Might
>> > be
>> > > > > good to find and list all of the related KAFKA issues.
>> > > > >
>> > > > > Randall
>> > > > >
>> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <
>> chrise@confluent.io>
>> > > > wrote:
>> > > > >
>> > > > > > Hi Magesh,
>> > > > > >
>> > > > > > Changes look good to me! Excited to see this happen, hope the
>> KIP
>> > > > passes
>> > > > > :)
>> > > > > >
>> > > > > > Cheers,
>> > > > > >
>> > > > > > Chris
>> > > > > >
>> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
>> > > > mageshn@confluent.io>
>> > > > > > wrote:
>> > > > > >
>> > > > > > > Hi Chris,
>> > > > > > >
>> > > > > > > I have updated the KIP to reflect the changes that we
>> discussed
>> > for
>> > > > the
>> > > > > > > prefix. Thanks for all your inputs.
>> > > > > > >
>> > > > > > > Thanks,
>> > > > > > > Magesh
>> > > > > > >
>> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
>> > chrise@confluent.io
>> > > >
>> > > > > > wrote:
>> > > > > > >
>> > > > > > > > Hi Magesh,
>> > > > > > > >
>> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't have a
>> > > strong
>> > > > > > > opinion
>> > > > > > > > between `connector.` and `.override`, but I have a slight
>> > > > inclination
>> > > > > > > > toward `.override` since `connector.` feels a little
>> redundant
>> > > > given
>> > > > > > that
>> > > > > > > > the whole configuration is for the connector and the use of
>> > > > > "override"
>> > > > > > > may
>> > > > > > > > shed a little light on how the properties for these clients
>> are
>> > > > > > computed
>> > > > > > > > and help make the learning curve a little gentler on new
>> devs
>> > and
>> > > > > > users.
>> > > > > > > >
>> > > > > > > > Regardless, I think the larger issue of conflicts with
>> existing
>> > > > > > > properties
>> > > > > > > > (both in MM2 and potentially other connectors) has been
>> > > > > satisfactorily
>> > > > > > > > addressed, so I'm happy.
>> > > > > > > >
>> > > > > > > > Cheers,
>> > > > > > > >
>> > > > > > > > Chris
>> > > > > > > >
>> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
>> > > > > > mageshn@confluent.io
>> > > > > > > >
>> > > > > > > > wrote:
>> > > > > > > >
>> > > > > > > > > HI Chrise,
>> > > > > > > > >
>> > > > > > > > > You are right about the "admin." prefix creating
>> conflicts.
>> > > Here
>> > > > > are
>> > > > > > > few
>> > > > > > > > > options that I can think of
>> > > > > > > > >
>> > > > > > > > > 1. Use `dlq.admin` since admin client is used only for
>> DLQ.
>> > But
>> > > > > this
>> > > > > > > > might
>> > > > > > > > > not really be the case in the future. So, we should
>> possibly
>> > > drop
>> > > > > > this
>> > > > > > > > idea
>> > > > > > > > > :)
>> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
>> > > > > > > `connector.admin`
>> > > > > > > > -
>> > > > > > > > > provides better context that its connector specific
>> property
>> > > > > > > > > 3.  Use `producer.override`, '`consumer.override` and
>> > > > > > `admin.override`
>> > > > > > > -
>> > > > > > > > > provides better clarity that these are overrides.
>> > > > > > > > >
>> > > > > > > > > I don't have a strong opinion in choosing between #2 and
>> #3.
>> > > Let
>> > > > me
>> > > > > > > > > know what you think.
>> > > > > > > > >
>> > > > > > > > > Thanks
>> > > > > > > > > Magesh
>> > > > > > > > >
>> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
>> > > > > chrise@confluent.io>
>> > > > > > > > > wrote:
>> > > > > > > > >
>> > > > > > > > > > Hi Magesh,
>> > > > > > > > > >
>> > > > > > > > > > Next round :)
>> > > > > > > > > >
>> > > > > > > > > > 1. It looks like MM2 will also support "admin."
>> properties
>> > > that
>> > > > > > > affect
>> > > > > > > > > > AdminClients it creates and uses, which IIUC is the same
>> > > prefix
>> > > > > > name
>> > > > > > > to
>> > > > > > > > > be
>> > > > > > > > > > used for managing the DLQ for sink connectors in this
>> KIP.
>> > > > > Doesn't
>> > > > > > > that
>> > > > > > > > > > still leave room for conflict? I'm imagining a scenario
>> > like
>> > > > > this:
>> > > > > > a
>> > > > > > > > > > Connect worker is configured to use the
>> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries to
>> > start
>> > > an
>> > > > > > > > instance
>> > > > > > > > > of
>> > > > > > > > > > an MM2 sink with "admin." properties beyond just
>> > > > > > > > > "admin.sasl.jaas.config",
>> > > > > > > > > > and gets rejected because those properties are then
>> > > interpreted
>> > > > > by
>> > > > > > > the
>> > > > > > > > > > worker as overrides for the AdminClient it uses to
>> manage
>> > the
>> > > > > DLQ.
>> > > > > > > > > > 2. (LGTM)
>> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
>> > identifies a
>> > > > > > common
>> > > > > > > > use
>> > > > > > > > > > case that would involve a similar client config policy
>> > > > > > implementation
>> > > > > > > > > that
>> > > > > > > > > > would be limited to a small set of whitelisted configs.
>> For
>> > > now
>> > > > > > > keeping
>> > > > > > > > > the
>> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to me.
>> > > > > > > > > >
>> > > > > > > > > > Cheers,
>> > > > > > > > > >
>> > > > > > > > > > Chris
>> > > > > > > > > >
>> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
>> > > > > > > > mageshn@confluent.io
>> > > > > > > > > >
>> > > > > > > > > > wrote:
>> > > > > > > > > >
>> > > > > > > > > > > Hi all,
>> > > > > > > > > > >
>> > > > > > > > > > > I also have a draft implementation of the KIP
>> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I would
>> still
>> > > > need
>> > > > > to
>> > > > > > > > > include
>> > > > > > > > > > > more tests and docs but I thought it would be useful
>> to
>> > > have
>> > > > > this
>> > > > > > > for
>> > > > > > > > > the
>> > > > > > > > > > > KIP discussion. Looking forward to all of your
>> valuable
>> > > > > feedback.
>> > > > > > > > > > >
>> > > > > > > > > > > Thanks
>> > > > > > > > > > > Magesh
>> > > > > > > > > > >
>> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh Nandakumar <
>> > > > > > > > > mageshn@confluent.io
>> > > > > > > > > > >
>> > > > > > > > > > > wrote:
>> > > > > > > > > > >
>> > > > > > > > > > > > Chrise,
>> > > > > > > > > > > >
>> > > > > > > > > > > > Thanks a lot for your feedback. I will address them
>> in
>> > > > order
>> > > > > of
>> > > > > > > > your
>> > > > > > > > > > > > questions/comments.
>> > > > > > > > > > > >
>> > > > > > > > > > > > 1. Thanks for bringing this to my attention about
>> > > KIP-382.
>> > > > I
>> > > > > > had
>> > > > > > > a
>> > > > > > > > > > closer
>> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows `consumer.`
>> > > prefix
>> > > > > for
>> > > > > > > > > > > SourceConnector
>> > > > > > > > > > > > and producer. prefix for SinkConnector since those
>> are
>> > > > > > additional
>> > > > > > > > > > > > connector properties to help resolve the Kafka
>> cluster
>> > > > other
>> > > > > > than
>> > > > > > > > the
>> > > > > > > > > > one
>> > > > > > > > > > > > Connect framework knows about. Whereas, the
>> proposal in
>> > > > > KIP-458
>> > > > > > > > > applies
>> > > > > > > > > > > > producer policies for SinkConnectors and consumer
>> > > policies
>> > > > > > > > > > > > SourceConnectors.  So, from what I understand this
>> new
>> > > > policy
>> > > > > > > > should
>> > > > > > > > > > work
>> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
>> > > > > > > > > > > > 2. I have updated the KIP to use a default value of
>> > null
>> > > > and
>> > > > > > use
>> > > > > > > > that
>> > > > > > > > > > to
>> > > > > > > > > > > > determine if we need to ignore overrides.
>> > > > > > > > > > > > 3. I would still prefer to keep the special
>> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
>> > > > > > > > > > > > since that is one of the most common use cases one
>> > would
>> > > > > choose
>> > > > > > > to
>> > > > > > > > > use
>> > > > > > > > > > > this
>> > > > > > > > > > > > feature. If we make it a general case, that would
>> > involve
>> > > > > users
>> > > > > > > > > > requiring
>> > > > > > > > > > > > to add additional configuration and they might
>> require
>> > > well
>> > > > > > more
>> > > > > > > > than
>> > > > > > > > > > > just
>> > > > > > > > > > > > the list of configs but might also want some
>> > restriction
>> > > on
>> > > > > > > values.
>> > > > > > > > > If
>> > > > > > > > > > > the
>> > > > > > > > > > > > concern is about users wanting principal and also
>> other
>> > > > > > configs,
>> > > > > > > it
>> > > > > > > > > > would
>> > > > > > > > > > > > still be possible by means of a custom
>> implementation.
>> > As
>> > > > > is, I
>> > > > > > > > would
>> > > > > > > > > > > > prefer to keep the proposal to be the same for this.
>> > Let
>> > > me
>> > > > > > know
>> > > > > > > > your
>> > > > > > > > > > > > thoughts.
>> > > > > > > > > > > >
>> > > > > > > > > > > > Thanks,
>> > > > > > > > > > > > Magesh
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
>> > > > > > > chrise@confluent.io
>> > > > > > > > >
>> > > > > > > > > > > wrote:
>> > > > > > > > > > > >
>> > > > > > > > > > > >> Hi Magesh,
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> This is an exciting KIP! I have a few
>> > questions/comments
>> > > > but
>> > > > > > > > > overall I
>> > > > > > > > > > > >> like
>> > > > > > > > > > > >> the direction it's headed in and hope to see it
>> > included
>> > > > in
>> > > > > > the
>> > > > > > > > > > Connect
>> > > > > > > > > > > >> framework soon.
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> 1. With the proposed "consumer.", "producer.", and
>> > > > "admin."
>> > > > > > > > > prefixes,
>> > > > > > > > > > > how
>> > > > > > > > > > > >> will this interact with connectors such as the
>> > upcoming
>> > > > > Mirror
>> > > > > > > > Maker
>> > > > > > > > > > 2.0
>> > > > > > > > > > > >> (KIP-382) that already support properties with
>> those
>> > > > > prefixes?
>> > > > > > > > Would
>> > > > > > > > > > it
>> > > > > > > > > > > be
>> > > > > > > > > > > >> possible for a user to configure MM2 with those
>> > > properties
>> > > > > > > without
>> > > > > > > > > > them
>> > > > > > > > > > > >> being interpreted as Connect client overrides,
>> without
>> > > > > > isolating
>> > > > > > > > MM2
>> > > > > > > > > > > onto
>> > > > > > > > > > > >> its own cluster and using the
>> > > > > > IgnoreConnectorClientConfigPolicy
>> > > > > > > > > > policy?
>> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy class
>> > > > necessary?
>> > > > > > The
>> > > > > > > > > > default
>> > > > > > > > > > > >> for the connector.client.config.policy property
>> could
>> > > > simply
>> > > > > > be
>> > > > > > > > null
>> > > > > > > > > > > >> instead of a new policy that, as far as I can tell,
>> > > isn't
>> > > > an
>> > > > > > > > actual
>> > > > > > > > > > > policy
>> > > > > > > > > > > >> in that its validate(...) method is never invoked
>> and
>> > > > > instead
>> > > > > > > > > > > represents a
>> > > > > > > > > > > >> special case to the Connect framework that says
>> "Drop
>> > > all
>> > > > > > > > overrides
>> > > > > > > > > > and
>> > > > > > > > > > > >> never use me".
>> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy seems
>> > like a
>> > > > > > > specific
>> > > > > > > > > > > instance
>> > > > > > > > > > > >> of a more general use case: allow exactly a small
>> set
>> > of
>> > > > > > > overrides
>> > > > > > > > > and
>> > > > > > > > > > > no
>> > > > > > > > > > > >> others. Why not generalize here and create a policy
>> > that
>> > > > > > > accepts a
>> > > > > > > > > > list
>> > > > > > > > > > > of
>> > > > > > > > > > > >> allowed overrides during configuration?
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> Thanks again for the KIP.
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> Cheers,
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> Chris
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh Nandakumar <
>> > > > > > > > > > mageshn@confluent.io
>> > > > > > > > > > > >
>> > > > > > > > > > > >> wrote:
>> > > > > > > > > > > >>
>> > > > > > > > > > > >> > Hi all,
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client Config
>> > Override
>> > > > > > > Policy",
>> > > > > > > > > > which
>> > > > > > > > > > > >> > allows users to override the connector client
>> > > > > configurations
>> > > > > > > > based
>> > > > > > > > > > on
>> > > > > > > > > > > a
>> > > > > > > > > > > >> > policy defined by the administrator.
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > The KIP can be found at
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
>> > > > > > > > > > > >> > .
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > Looking forward for the discussion on the KIP and
>> > all
>> > > of
>> > > > > > your
>> > > > > > > > > > > thoughts &
>> > > > > > > > > > > >> > feedback on this enhancement to Connect.
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >> > Thanks,
>> > > > > > > > > > > >> > Magesh
>> > > > > > > > > > > >> >
>> > > > > > > > > > > >>
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Magesh Nandakumar <ma...@confluent.io>.
Randall,

The approach to return the to override configs could possibly make it
cumbersome to implement a custom policy. This is a new configuration and if
you don't explicitly set it the existing behavior remains as-is. Like
Chris, I also preferred this approach for the sake of simplicity.  If not
for the default `null` I would prefer to fall back to using `Ignore` which
is a misnomer to the interface spec but still gets the job done via
instanceOf checks. The other options I could think of are as below:-

   - have an enforcePolicy() method in the interface which by default
   returns true and the Ignore implementation could return false
   - introduce another worker config allow.connector.config.overrides with
   a default value of false and the default policy can be None

Let me know what you think.

Thanks
Magesh

On Tue, Apr 30, 2019 at 6:52 PM Randall Hauch <rh...@gmail.com> wrote:

> Thanks, Chris. I still think it's strange to have a non-policy, since
> there's now special behavior for when the policy is not specified.
>
> Perhaps the inability for a policy implementation to represent the existing
> behavior suggests that the policy interface isn't quite right. Could the
> policy's "validate" method take the overrides that were supplied and return
> the overrides that should be passed to the connector, yet still throwing an
> exception if any supplied overrides are not allowed. Then the different
> policy implementations might be:
>
>    - Ignore (default) - returns all supplied override properties
>    - None - throws exception if any override properties are supplied;
>    always returns empty map if no overrides are provided
>    - Principal - throws exception if other override properties are
>    provided, but returns an empty map (since no properties should be
> passed to
>    the connector)
>    - All - returns all provided override properties
>
> All override properties defined on the connector configuration would be
> passed to the policy for validation, and assuming there's no error all of
> these overrides would be used in the producer/consumer/admin client. The
> result of the policy call, however, is used to determine which of these
> overrides are passed to the connector.
>
> This approach means that all behaviors can be implemented through a policy
> class, including the defaults. It also gives a bit more control to custom
> policies, should that be warranted. For example, validating the provided
> client overrides but passing all such override properties to the connector,
> which as I stated earlier is something I think connectors likely don't look
> for.
>
> Thoughts?
>
> Randall
>
> On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io> wrote:
>
> > Randall,
> >
> > The special behavior for null was my suggestion. There is no
> implementation
> > of the proposed interface that causes client overrides to be ignored, so
> > the original idea was to have a special implementation that would be
> > checked for by the Connect framework (probably via the instanceof
> operator)
> > and, if present, cause all would-be overrides to be ignored.
> >
> > I thought this may be confusing to people who may see that behavior and
> > wonder how to recreate it themselves, so I suggested leaving that policy
> > out and replace it with a check to see if a policy was specified at all.
> >
> > Would be interested in your thoughts on this, especially if there's an
> > alternative that hasn't been proposed yet.
> >
> > Cheers,
> >
> > Chris
> >
> > On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:
> >
> > > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <
> mageshn@confluent.io>
> > > wrote:
> > >
> > > > Randall,
> > > >
> > > > Thanks a lot for your feedback.
> > > >
> > > > You bring up an interesting point regarding the overrides being
> > available
> > > > to the connectors. Today everything that is specified in the config
> > while
> > > > creating is available for the connector. But this is a specific case
> > and
> > > we
> > > > could do either of the following
> > > >
> > > >
> > > >    - don't pass any configs with these prefixes to the
> ConnectorConfig
> > > >    instance that's passed in the startConnector
> > > >    - allow policies as to whether the configurations with the
> prefixes
> > > >    should be made available to the connector or not. Should this also
> > > > define a
> > > >    list of configurations?
> > > >
> > > > I personally prefer not passing the configs to Connector since that's
> > > > simple, straight forward and don't see a reason for the connector to
> > > access
> > > > those.
> > > >
> > >
> > > I agree that these override properties should be effectively new
> > > properties, in which case I'd also prefer that they be removed from the
> > > configuration before it is passed to the connector. Yes, it is
> *possible*
> > > that an existing connector happened to use connector config properties
> > with
> > > these prefixes, but it's seems pretty unlikely.
> > >
> > > I'd love to hear whether other people agree.
> > >
> > >
> > > >
> > > > For the second point,  None - doesn't allow overrides and the default
> > > > policy is null. We preserve backward compatibility when no policy is
> > > > configured. Let me know if that's not clear in the KIP.
> > > >
> > >
> > > Why not have a default policy (rather than null) that implements the
> > > backward-compatible behavior? It seems strange to have null be the
> > default
> > > and for non-policy to allow anything.
> > >
> > >
> > > >
> > > > Thanks,
> > > > Magesh
> > > >
> > > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rh...@gmail.com>
> > wrote:
> > > >
> > > > > Per the proposal, a connector configuration can define one or more
> > > > > properties that begin with any of the three prefixes:
> > > > "producer.override.",
> > > > > "consumer.override.", and "admin.override.". The proposal states:
> > > > >
> > > > > Since the users can specify any of these policies, the connectors
> > > itself
> > > > > should not rely on these configurations to be available. The
> > overrides
> > > > are
> > > > > to be used purely from an operational perspective.
> > > > >
> > > > >
> > > > > Does this mean that any such properties are visible to connectors,
> or
> > > > will
> > > > > they be hidden to connectors? Currently no connectors have access
> to
> > > such
> > > > > client properties, and users are unlike to just put them into a
> > > connector
> > > > > configuration unnecessarily. A connector implementation could have
> > > > defined
> > > > > such properties as normal connector-specific properties, in which
> > case
> > > > they
> > > > > are required, but is that likely given the log prefixes? One
> concern
> > > > that I
> > > > > have is that this might allow connector implementations start
> > > attempting
> > > > to
> > > > > circumvent the Connect API if these properties are included.
> > > > >
> > > > > Second, does the None policy allow but ignore these additional
> > > properties
> > > > > (e.g., "validate(...)" is simply a no-op)? Or does the None policy
> > fail
> > > > if
> > > > > any client overrides are specified? The former seems more in line
> > with
> > > > the
> > > > > current behavior, whereas the "disallows" policy seems useful but
> not
> > > > > exactly backward compatible. Should we also offer a "Disallow"
> > policy?
> > > In
> > > > > fact, should the policies be named "Ignore" (default), "Disallow",
> > > > > "Prinicipal", and "All"?
> > > > >
> > > > > Otherwise, I like the idea of this. There have been several
> requests
> > > over
> > > > > the past year or two for adding subsets of this functionality.
> Might
> > be
> > > > > good to find and list all of the related KAFKA issues.
> > > > >
> > > > > Randall
> > > > >
> > > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <chrise@confluent.io
> >
> > > > wrote:
> > > > >
> > > > > > Hi Magesh,
> > > > > >
> > > > > > Changes look good to me! Excited to see this happen, hope the KIP
> > > > passes
> > > > > :)
> > > > > >
> > > > > > Cheers,
> > > > > >
> > > > > > Chris
> > > > > >
> > > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > > > mageshn@confluent.io>
> > > > > > wrote:
> > > > > >
> > > > > > > Hi Chris,
> > > > > > >
> > > > > > > I have updated the KIP to reflect the changes that we discussed
> > for
> > > > the
> > > > > > > prefix. Thanks for all your inputs.
> > > > > > >
> > > > > > > Thanks,
> > > > > > > Magesh
> > > > > > >
> > > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> > chrise@confluent.io
> > > >
> > > > > > wrote:
> > > > > > >
> > > > > > > > Hi Magesh,
> > > > > > > >
> > > > > > > > Agreed that we should avoid `dlq.admin`. I also don't have a
> > > strong
> > > > > > > opinion
> > > > > > > > between `connector.` and `.override`, but I have a slight
> > > > inclination
> > > > > > > > toward `.override` since `connector.` feels a little
> redundant
> > > > given
> > > > > > that
> > > > > > > > the whole configuration is for the connector and the use of
> > > > > "override"
> > > > > > > may
> > > > > > > > shed a little light on how the properties for these clients
> are
> > > > > > computed
> > > > > > > > and help make the learning curve a little gentler on new devs
> > and
> > > > > > users.
> > > > > > > >
> > > > > > > > Regardless, I think the larger issue of conflicts with
> existing
> > > > > > > properties
> > > > > > > > (both in MM2 and potentially other connectors) has been
> > > > > satisfactorily
> > > > > > > > addressed, so I'm happy.
> > > > > > > >
> > > > > > > > Cheers,
> > > > > > > >
> > > > > > > > Chris
> > > > > > > >
> > > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > > > > mageshn@confluent.io
> > > > > > > >
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > HI Chrise,
> > > > > > > > >
> > > > > > > > > You are right about the "admin." prefix creating conflicts.
> > > Here
> > > > > are
> > > > > > > few
> > > > > > > > > options that I can think of
> > > > > > > > >
> > > > > > > > > 1. Use `dlq.admin` since admin client is used only for DLQ.
> > But
> > > > > this
> > > > > > > > might
> > > > > > > > > not really be the case in the future. So, we should
> possibly
> > > drop
> > > > > > this
> > > > > > > > idea
> > > > > > > > > :)
> > > > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> > > > > > > `connector.admin`
> > > > > > > > -
> > > > > > > > > provides better context that its connector specific
> property
> > > > > > > > > 3.  Use `producer.override`, '`consumer.override` and
> > > > > > `admin.override`
> > > > > > > -
> > > > > > > > > provides better clarity that these are overrides.
> > > > > > > > >
> > > > > > > > > I don't have a strong opinion in choosing between #2 and
> #3.
> > > Let
> > > > me
> > > > > > > > > know what you think.
> > > > > > > > >
> > > > > > > > > Thanks
> > > > > > > > > Magesh
> > > > > > > > >
> > > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > > > > chrise@confluent.io>
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Hi Magesh,
> > > > > > > > > >
> > > > > > > > > > Next round :)
> > > > > > > > > >
> > > > > > > > > > 1. It looks like MM2 will also support "admin."
> properties
> > > that
> > > > > > > affect
> > > > > > > > > > AdminClients it creates and uses, which IIUC is the same
> > > prefix
> > > > > > name
> > > > > > > to
> > > > > > > > > be
> > > > > > > > > > used for managing the DLQ for sink connectors in this
> KIP.
> > > > > Doesn't
> > > > > > > that
> > > > > > > > > > still leave room for conflict? I'm imagining a scenario
> > like
> > > > > this:
> > > > > > a
> > > > > > > > > > Connect worker is configured to use the
> > > > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries to
> > start
> > > an
> > > > > > > > instance
> > > > > > > > > of
> > > > > > > > > > an MM2 sink with "admin." properties beyond just
> > > > > > > > > "admin.sasl.jaas.config",
> > > > > > > > > > and gets rejected because those properties are then
> > > interpreted
> > > > > by
> > > > > > > the
> > > > > > > > > > worker as overrides for the AdminClient it uses to manage
> > the
> > > > > DLQ.
> > > > > > > > > > 2. (LGTM)
> > > > > > > > > > 3. I'm convinced by this, as long as nobody else
> > identifies a
> > > > > > common
> > > > > > > > use
> > > > > > > > > > case that would involve a similar client config policy
> > > > > > implementation
> > > > > > > > > that
> > > > > > > > > > would be limited to a small set of whitelisted configs.
> For
> > > now
> > > > > > > keeping
> > > > > > > > > the
> > > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to me.
> > > > > > > > > >
> > > > > > > > > > Cheers,
> > > > > > > > > >
> > > > > > > > > > Chris
> > > > > > > > > >
> > > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> > > > > > > > mageshn@confluent.io
> > > > > > > > > >
> > > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Hi all,
> > > > > > > > > > >
> > > > > > > > > > > I also have a draft implementation of the KIP
> > > > > > > > > > > https://github.com/apache/kafka/pull/6624. I would
> still
> > > > need
> > > > > to
> > > > > > > > > include
> > > > > > > > > > > more tests and docs but I thought it would be useful to
> > > have
> > > > > this
> > > > > > > for
> > > > > > > > > the
> > > > > > > > > > > KIP discussion. Looking forward to all of your valuable
> > > > > feedback.
> > > > > > > > > > >
> > > > > > > > > > > Thanks
> > > > > > > > > > > Magesh
> > > > > > > > > > >
> > > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh Nandakumar <
> > > > > > > > > mageshn@confluent.io
> > > > > > > > > > >
> > > > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > > Chrise,
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks a lot for your feedback. I will address them
> in
> > > > order
> > > > > of
> > > > > > > > your
> > > > > > > > > > > > questions/comments.
> > > > > > > > > > > >
> > > > > > > > > > > > 1. Thanks for bringing this to my attention about
> > > KIP-382.
> > > > I
> > > > > > had
> > > > > > > a
> > > > > > > > > > closer
> > > > > > > > > > > > look at the KIP and IIUC, the KIP allows `consumer.`
> > > prefix
> > > > > for
> > > > > > > > > > > SourceConnector
> > > > > > > > > > > > and producer. prefix for SinkConnector since those
> are
> > > > > > additional
> > > > > > > > > > > > connector properties to help resolve the Kafka
> cluster
> > > > other
> > > > > > than
> > > > > > > > the
> > > > > > > > > > one
> > > > > > > > > > > > Connect framework knows about. Whereas, the proposal
> in
> > > > > KIP-458
> > > > > > > > > applies
> > > > > > > > > > > > producer policies for SinkConnectors and consumer
> > > policies
> > > > > > > > > > > > SourceConnectors.  So, from what I understand this
> new
> > > > policy
> > > > > > > > should
> > > > > > > > > > work
> > > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> > > > > > > > > > > > 2. I have updated the KIP to use a default value of
> > null
> > > > and
> > > > > > use
> > > > > > > > that
> > > > > > > > > > to
> > > > > > > > > > > > determine if we need to ignore overrides.
> > > > > > > > > > > > 3. I would still prefer to keep the special
> > > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > > > > > > > > > > > since that is one of the most common use cases one
> > would
> > > > > choose
> > > > > > > to
> > > > > > > > > use
> > > > > > > > > > > this
> > > > > > > > > > > > feature. If we make it a general case, that would
> > involve
> > > > > users
> > > > > > > > > > requiring
> > > > > > > > > > > > to add additional configuration and they might
> require
> > > well
> > > > > > more
> > > > > > > > than
> > > > > > > > > > > just
> > > > > > > > > > > > the list of configs but might also want some
> > restriction
> > > on
> > > > > > > values.
> > > > > > > > > If
> > > > > > > > > > > the
> > > > > > > > > > > > concern is about users wanting principal and also
> other
> > > > > > configs,
> > > > > > > it
> > > > > > > > > > would
> > > > > > > > > > > > still be possible by means of a custom
> implementation.
> > As
> > > > > is, I
> > > > > > > > would
> > > > > > > > > > > > prefer to keep the proposal to be the same for this.
> > Let
> > > me
> > > > > > know
> > > > > > > > your
> > > > > > > > > > > > thoughts.
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks,
> > > > > > > > > > > > Magesh
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> > > > > > > chrise@confluent.io
> > > > > > > > >
> > > > > > > > > > > wrote:
> > > > > > > > > > > >
> > > > > > > > > > > >> Hi Magesh,
> > > > > > > > > > > >>
> > > > > > > > > > > >> This is an exciting KIP! I have a few
> > questions/comments
> > > > but
> > > > > > > > > overall I
> > > > > > > > > > > >> like
> > > > > > > > > > > >> the direction it's headed in and hope to see it
> > included
> > > > in
> > > > > > the
> > > > > > > > > > Connect
> > > > > > > > > > > >> framework soon.
> > > > > > > > > > > >>
> > > > > > > > > > > >> 1. With the proposed "consumer.", "producer.", and
> > > > "admin."
> > > > > > > > > prefixes,
> > > > > > > > > > > how
> > > > > > > > > > > >> will this interact with connectors such as the
> > upcoming
> > > > > Mirror
> > > > > > > > Maker
> > > > > > > > > > 2.0
> > > > > > > > > > > >> (KIP-382) that already support properties with those
> > > > > prefixes?
> > > > > > > > Would
> > > > > > > > > > it
> > > > > > > > > > > be
> > > > > > > > > > > >> possible for a user to configure MM2 with those
> > > properties
> > > > > > > without
> > > > > > > > > > them
> > > > > > > > > > > >> being interpreted as Connect client overrides,
> without
> > > > > > isolating
> > > > > > > > MM2
> > > > > > > > > > > onto
> > > > > > > > > > > >> its own cluster and using the
> > > > > > IgnoreConnectorClientConfigPolicy
> > > > > > > > > > policy?
> > > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy class
> > > > necessary?
> > > > > > The
> > > > > > > > > > default
> > > > > > > > > > > >> for the connector.client.config.policy property
> could
> > > > simply
> > > > > > be
> > > > > > > > null
> > > > > > > > > > > >> instead of a new policy that, as far as I can tell,
> > > isn't
> > > > an
> > > > > > > > actual
> > > > > > > > > > > policy
> > > > > > > > > > > >> in that its validate(...) method is never invoked
> and
> > > > > instead
> > > > > > > > > > > represents a
> > > > > > > > > > > >> special case to the Connect framework that says
> "Drop
> > > all
> > > > > > > > overrides
> > > > > > > > > > and
> > > > > > > > > > > >> never use me".
> > > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy seems
> > like a
> > > > > > > specific
> > > > > > > > > > > instance
> > > > > > > > > > > >> of a more general use case: allow exactly a small
> set
> > of
> > > > > > > overrides
> > > > > > > > > and
> > > > > > > > > > > no
> > > > > > > > > > > >> others. Why not generalize here and create a policy
> > that
> > > > > > > accepts a
> > > > > > > > > > list
> > > > > > > > > > > of
> > > > > > > > > > > >> allowed overrides during configuration?
> > > > > > > > > > > >>
> > > > > > > > > > > >> Thanks again for the KIP.
> > > > > > > > > > > >>
> > > > > > > > > > > >> Cheers,
> > > > > > > > > > > >>
> > > > > > > > > > > >> Chris
> > > > > > > > > > > >>
> > > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh Nandakumar <
> > > > > > > > > > mageshn@confluent.io
> > > > > > > > > > > >
> > > > > > > > > > > >> wrote:
> > > > > > > > > > > >>
> > > > > > > > > > > >> > Hi all,
> > > > > > > > > > > >> >
> > > > > > > > > > > >> > I've posted "KIP-458: Connector Client Config
> > Override
> > > > > > > Policy",
> > > > > > > > > > which
> > > > > > > > > > > >> > allows users to override the connector client
> > > > > configurations
> > > > > > > > based
> > > > > > > > > > on
> > > > > > > > > > > a
> > > > > > > > > > > >> > policy defined by the administrator.
> > > > > > > > > > > >> >
> > > > > > > > > > > >> > The KIP can be found at
> > > > > > > > > > > >> >
> > > > > > > > > > > >> >
> > > > > > > > > > > >>
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > > > > > > > > > >> > .
> > > > > > > > > > > >> >
> > > > > > > > > > > >> > Looking forward for the discussion on the KIP and
> > all
> > > of
> > > > > > your
> > > > > > > > > > > thoughts &
> > > > > > > > > > > >> > feedback on this enhancement to Connect.
> > > > > > > > > > > >> >
> > > > > > > > > > > >> > Thanks,
> > > > > > > > > > > >> > Magesh
> > > > > > > > > > > >> >
> > > > > > > > > > > >>
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Randall Hauch <rh...@gmail.com>.
Thanks, Chris. I still think it's strange to have a non-policy, since
there's now special behavior for when the policy is not specified.

Perhaps the inability for a policy implementation to represent the existing
behavior suggests that the policy interface isn't quite right. Could the
policy's "validate" method take the overrides that were supplied and return
the overrides that should be passed to the connector, yet still throwing an
exception if any supplied overrides are not allowed. Then the different
policy implementations might be:

   - Ignore (default) - returns all supplied override properties
   - None - throws exception if any override properties are supplied;
   always returns empty map if no overrides are provided
   - Principal - throws exception if other override properties are
   provided, but returns an empty map (since no properties should be passed to
   the connector)
   - All - returns all provided override properties

All override properties defined on the connector configuration would be
passed to the policy for validation, and assuming there's no error all of
these overrides would be used in the producer/consumer/admin client. The
result of the policy call, however, is used to determine which of these
overrides are passed to the connector.

This approach means that all behaviors can be implemented through a policy
class, including the defaults. It also gives a bit more control to custom
policies, should that be warranted. For example, validating the provided
client overrides but passing all such override properties to the connector,
which as I stated earlier is something I think connectors likely don't look
for.

Thoughts?

Randall

On Tue, Apr 30, 2019 at 6:07 PM Chris Egerton <ch...@confluent.io> wrote:

> Randall,
>
> The special behavior for null was my suggestion. There is no implementation
> of the proposed interface that causes client overrides to be ignored, so
> the original idea was to have a special implementation that would be
> checked for by the Connect framework (probably via the instanceof operator)
> and, if present, cause all would-be overrides to be ignored.
>
> I thought this may be confusing to people who may see that behavior and
> wonder how to recreate it themselves, so I suggested leaving that policy
> out and replace it with a check to see if a policy was specified at all.
>
> Would be interested in your thoughts on this, especially if there's an
> alternative that hasn't been proposed yet.
>
> Cheers,
>
> Chris
>
> On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:
>
> > On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <ma...@confluent.io>
> > wrote:
> >
> > > Randall,
> > >
> > > Thanks a lot for your feedback.
> > >
> > > You bring up an interesting point regarding the overrides being
> available
> > > to the connectors. Today everything that is specified in the config
> while
> > > creating is available for the connector. But this is a specific case
> and
> > we
> > > could do either of the following
> > >
> > >
> > >    - don't pass any configs with these prefixes to the ConnectorConfig
> > >    instance that's passed in the startConnector
> > >    - allow policies as to whether the configurations with the prefixes
> > >    should be made available to the connector or not. Should this also
> > > define a
> > >    list of configurations?
> > >
> > > I personally prefer not passing the configs to Connector since that's
> > > simple, straight forward and don't see a reason for the connector to
> > access
> > > those.
> > >
> >
> > I agree that these override properties should be effectively new
> > properties, in which case I'd also prefer that they be removed from the
> > configuration before it is passed to the connector. Yes, it is *possible*
> > that an existing connector happened to use connector config properties
> with
> > these prefixes, but it's seems pretty unlikely.
> >
> > I'd love to hear whether other people agree.
> >
> >
> > >
> > > For the second point,  None - doesn't allow overrides and the default
> > > policy is null. We preserve backward compatibility when no policy is
> > > configured. Let me know if that's not clear in the KIP.
> > >
> >
> > Why not have a default policy (rather than null) that implements the
> > backward-compatible behavior? It seems strange to have null be the
> default
> > and for non-policy to allow anything.
> >
> >
> > >
> > > Thanks,
> > > Magesh
> > >
> > > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rh...@gmail.com>
> wrote:
> > >
> > > > Per the proposal, a connector configuration can define one or more
> > > > properties that begin with any of the three prefixes:
> > > "producer.override.",
> > > > "consumer.override.", and "admin.override.". The proposal states:
> > > >
> > > > Since the users can specify any of these policies, the connectors
> > itself
> > > > should not rely on these configurations to be available. The
> overrides
> > > are
> > > > to be used purely from an operational perspective.
> > > >
> > > >
> > > > Does this mean that any such properties are visible to connectors, or
> > > will
> > > > they be hidden to connectors? Currently no connectors have access to
> > such
> > > > client properties, and users are unlike to just put them into a
> > connector
> > > > configuration unnecessarily. A connector implementation could have
> > > defined
> > > > such properties as normal connector-specific properties, in which
> case
> > > they
> > > > are required, but is that likely given the log prefixes? One concern
> > > that I
> > > > have is that this might allow connector implementations start
> > attempting
> > > to
> > > > circumvent the Connect API if these properties are included.
> > > >
> > > > Second, does the None policy allow but ignore these additional
> > properties
> > > > (e.g., "validate(...)" is simply a no-op)? Or does the None policy
> fail
> > > if
> > > > any client overrides are specified? The former seems more in line
> with
> > > the
> > > > current behavior, whereas the "disallows" policy seems useful but not
> > > > exactly backward compatible. Should we also offer a "Disallow"
> policy?
> > In
> > > > fact, should the policies be named "Ignore" (default), "Disallow",
> > > > "Prinicipal", and "All"?
> > > >
> > > > Otherwise, I like the idea of this. There have been several requests
> > over
> > > > the past year or two for adding subsets of this functionality. Might
> be
> > > > good to find and list all of the related KAFKA issues.
> > > >
> > > > Randall
> > > >
> > > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <ch...@confluent.io>
> > > wrote:
> > > >
> > > > > Hi Magesh,
> > > > >
> > > > > Changes look good to me! Excited to see this happen, hope the KIP
> > > passes
> > > > :)
> > > > >
> > > > > Cheers,
> > > > >
> > > > > Chris
> > > > >
> > > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > > mageshn@confluent.io>
> > > > > wrote:
> > > > >
> > > > > > Hi Chris,
> > > > > >
> > > > > > I have updated the KIP to reflect the changes that we discussed
> for
> > > the
> > > > > > prefix. Thanks for all your inputs.
> > > > > >
> > > > > > Thanks,
> > > > > > Magesh
> > > > > >
> > > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <
> chrise@confluent.io
> > >
> > > > > wrote:
> > > > > >
> > > > > > > Hi Magesh,
> > > > > > >
> > > > > > > Agreed that we should avoid `dlq.admin`. I also don't have a
> > strong
> > > > > > opinion
> > > > > > > between `connector.` and `.override`, but I have a slight
> > > inclination
> > > > > > > toward `.override` since `connector.` feels a little redundant
> > > given
> > > > > that
> > > > > > > the whole configuration is for the connector and the use of
> > > > "override"
> > > > > > may
> > > > > > > shed a little light on how the properties for these clients are
> > > > > computed
> > > > > > > and help make the learning curve a little gentler on new devs
> and
> > > > > users.
> > > > > > >
> > > > > > > Regardless, I think the larger issue of conflicts with existing
> > > > > > properties
> > > > > > > (both in MM2 and potentially other connectors) has been
> > > > satisfactorily
> > > > > > > addressed, so I'm happy.
> > > > > > >
> > > > > > > Cheers,
> > > > > > >
> > > > > > > Chris
> > > > > > >
> > > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > > > mageshn@confluent.io
> > > > > > >
> > > > > > > wrote:
> > > > > > >
> > > > > > > > HI Chrise,
> > > > > > > >
> > > > > > > > You are right about the "admin." prefix creating conflicts.
> > Here
> > > > are
> > > > > > few
> > > > > > > > options that I can think of
> > > > > > > >
> > > > > > > > 1. Use `dlq.admin` since admin client is used only for DLQ.
> But
> > > > this
> > > > > > > might
> > > > > > > > not really be the case in the future. So, we should possibly
> > drop
> > > > > this
> > > > > > > idea
> > > > > > > > :)
> > > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> > > > > > `connector.admin`
> > > > > > > -
> > > > > > > > provides better context that its connector specific property
> > > > > > > > 3.  Use `producer.override`, '`consumer.override` and
> > > > > `admin.override`
> > > > > > -
> > > > > > > > provides better clarity that these are overrides.
> > > > > > > >
> > > > > > > > I don't have a strong opinion in choosing between #2 and #3.
> > Let
> > > me
> > > > > > > > know what you think.
> > > > > > > >
> > > > > > > > Thanks
> > > > > > > > Magesh
> > > > > > > >
> > > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > > > chrise@confluent.io>
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Hi Magesh,
> > > > > > > > >
> > > > > > > > > Next round :)
> > > > > > > > >
> > > > > > > > > 1. It looks like MM2 will also support "admin." properties
> > that
> > > > > > affect
> > > > > > > > > AdminClients it creates and uses, which IIUC is the same
> > prefix
> > > > > name
> > > > > > to
> > > > > > > > be
> > > > > > > > > used for managing the DLQ for sink connectors in this KIP.
> > > > Doesn't
> > > > > > that
> > > > > > > > > still leave room for conflict? I'm imagining a scenario
> like
> > > > this:
> > > > > a
> > > > > > > > > Connect worker is configured to use the
> > > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries to
> start
> > an
> > > > > > > instance
> > > > > > > > of
> > > > > > > > > an MM2 sink with "admin." properties beyond just
> > > > > > > > "admin.sasl.jaas.config",
> > > > > > > > > and gets rejected because those properties are then
> > interpreted
> > > > by
> > > > > > the
> > > > > > > > > worker as overrides for the AdminClient it uses to manage
> the
> > > > DLQ.
> > > > > > > > > 2. (LGTM)
> > > > > > > > > 3. I'm convinced by this, as long as nobody else
> identifies a
> > > > > common
> > > > > > > use
> > > > > > > > > case that would involve a similar client config policy
> > > > > implementation
> > > > > > > > that
> > > > > > > > > would be limited to a small set of whitelisted configs. For
> > now
> > > > > > keeping
> > > > > > > > the
> > > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to me.
> > > > > > > > >
> > > > > > > > > Cheers,
> > > > > > > > >
> > > > > > > > > Chris
> > > > > > > > >
> > > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> > > > > > > mageshn@confluent.io
> > > > > > > > >
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Hi all,
> > > > > > > > > >
> > > > > > > > > > I also have a draft implementation of the KIP
> > > > > > > > > > https://github.com/apache/kafka/pull/6624. I would still
> > > need
> > > > to
> > > > > > > > include
> > > > > > > > > > more tests and docs but I thought it would be useful to
> > have
> > > > this
> > > > > > for
> > > > > > > > the
> > > > > > > > > > KIP discussion. Looking forward to all of your valuable
> > > > feedback.
> > > > > > > > > >
> > > > > > > > > > Thanks
> > > > > > > > > > Magesh
> > > > > > > > > >
> > > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh Nandakumar <
> > > > > > > > mageshn@confluent.io
> > > > > > > > > >
> > > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Chrise,
> > > > > > > > > > >
> > > > > > > > > > > Thanks a lot for your feedback. I will address them in
> > > order
> > > > of
> > > > > > > your
> > > > > > > > > > > questions/comments.
> > > > > > > > > > >
> > > > > > > > > > > 1. Thanks for bringing this to my attention about
> > KIP-382.
> > > I
> > > > > had
> > > > > > a
> > > > > > > > > closer
> > > > > > > > > > > look at the KIP and IIUC, the KIP allows `consumer.`
> > prefix
> > > > for
> > > > > > > > > > SourceConnector
> > > > > > > > > > > and producer. prefix for SinkConnector since those are
> > > > > additional
> > > > > > > > > > > connector properties to help resolve the Kafka cluster
> > > other
> > > > > than
> > > > > > > the
> > > > > > > > > one
> > > > > > > > > > > Connect framework knows about. Whereas, the proposal in
> > > > KIP-458
> > > > > > > > applies
> > > > > > > > > > > producer policies for SinkConnectors and consumer
> > policies
> > > > > > > > > > > SourceConnectors.  So, from what I understand this new
> > > policy
> > > > > > > should
> > > > > > > > > work
> > > > > > > > > > > without any issues even for Mirror Maker 2.0.
> > > > > > > > > > > 2. I have updated the KIP to use a default value of
> null
> > > and
> > > > > use
> > > > > > > that
> > > > > > > > > to
> > > > > > > > > > > determine if we need to ignore overrides.
> > > > > > > > > > > 3. I would still prefer to keep the special
> > > > > > > > > > PrincipalConnectorClientConfigPolicy
> > > > > > > > > > > since that is one of the most common use cases one
> would
> > > > choose
> > > > > > to
> > > > > > > > use
> > > > > > > > > > this
> > > > > > > > > > > feature. If we make it a general case, that would
> involve
> > > > users
> > > > > > > > > requiring
> > > > > > > > > > > to add additional configuration and they might require
> > well
> > > > > more
> > > > > > > than
> > > > > > > > > > just
> > > > > > > > > > > the list of configs but might also want some
> restriction
> > on
> > > > > > values.
> > > > > > > > If
> > > > > > > > > > the
> > > > > > > > > > > concern is about users wanting principal and also other
> > > > > configs,
> > > > > > it
> > > > > > > > > would
> > > > > > > > > > > still be possible by means of a custom implementation.
> As
> > > > is, I
> > > > > > > would
> > > > > > > > > > > prefer to keep the proposal to be the same for this.
> Let
> > me
> > > > > know
> > > > > > > your
> > > > > > > > > > > thoughts.
> > > > > > > > > > >
> > > > > > > > > > > Thanks,
> > > > > > > > > > > Magesh
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> > > > > > chrise@confluent.io
> > > > > > > >
> > > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > >> Hi Magesh,
> > > > > > > > > > >>
> > > > > > > > > > >> This is an exciting KIP! I have a few
> questions/comments
> > > but
> > > > > > > > overall I
> > > > > > > > > > >> like
> > > > > > > > > > >> the direction it's headed in and hope to see it
> included
> > > in
> > > > > the
> > > > > > > > > Connect
> > > > > > > > > > >> framework soon.
> > > > > > > > > > >>
> > > > > > > > > > >> 1. With the proposed "consumer.", "producer.", and
> > > "admin."
> > > > > > > > prefixes,
> > > > > > > > > > how
> > > > > > > > > > >> will this interact with connectors such as the
> upcoming
> > > > Mirror
> > > > > > > Maker
> > > > > > > > > 2.0
> > > > > > > > > > >> (KIP-382) that already support properties with those
> > > > prefixes?
> > > > > > > Would
> > > > > > > > > it
> > > > > > > > > > be
> > > > > > > > > > >> possible for a user to configure MM2 with those
> > properties
> > > > > > without
> > > > > > > > > them
> > > > > > > > > > >> being interpreted as Connect client overrides, without
> > > > > isolating
> > > > > > > MM2
> > > > > > > > > > onto
> > > > > > > > > > >> its own cluster and using the
> > > > > IgnoreConnectorClientConfigPolicy
> > > > > > > > > policy?
> > > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy class
> > > necessary?
> > > > > The
> > > > > > > > > default
> > > > > > > > > > >> for the connector.client.config.policy property could
> > > simply
> > > > > be
> > > > > > > null
> > > > > > > > > > >> instead of a new policy that, as far as I can tell,
> > isn't
> > > an
> > > > > > > actual
> > > > > > > > > > policy
> > > > > > > > > > >> in that its validate(...) method is never invoked and
> > > > instead
> > > > > > > > > > represents a
> > > > > > > > > > >> special case to the Connect framework that says "Drop
> > all
> > > > > > > overrides
> > > > > > > > > and
> > > > > > > > > > >> never use me".
> > > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy seems
> like a
> > > > > > specific
> > > > > > > > > > instance
> > > > > > > > > > >> of a more general use case: allow exactly a small set
> of
> > > > > > overrides
> > > > > > > > and
> > > > > > > > > > no
> > > > > > > > > > >> others. Why not generalize here and create a policy
> that
> > > > > > accepts a
> > > > > > > > > list
> > > > > > > > > > of
> > > > > > > > > > >> allowed overrides during configuration?
> > > > > > > > > > >>
> > > > > > > > > > >> Thanks again for the KIP.
> > > > > > > > > > >>
> > > > > > > > > > >> Cheers,
> > > > > > > > > > >>
> > > > > > > > > > >> Chris
> > > > > > > > > > >>
> > > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh Nandakumar <
> > > > > > > > > mageshn@confluent.io
> > > > > > > > > > >
> > > > > > > > > > >> wrote:
> > > > > > > > > > >>
> > > > > > > > > > >> > Hi all,
> > > > > > > > > > >> >
> > > > > > > > > > >> > I've posted "KIP-458: Connector Client Config
> Override
> > > > > > Policy",
> > > > > > > > > which
> > > > > > > > > > >> > allows users to override the connector client
> > > > configurations
> > > > > > > based
> > > > > > > > > on
> > > > > > > > > > a
> > > > > > > > > > >> > policy defined by the administrator.
> > > > > > > > > > >> >
> > > > > > > > > > >> > The KIP can be found at
> > > > > > > > > > >> >
> > > > > > > > > > >> >
> > > > > > > > > > >>
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > > > > > > > > >> > .
> > > > > > > > > > >> >
> > > > > > > > > > >> > Looking forward for the discussion on the KIP and
> all
> > of
> > > > > your
> > > > > > > > > > thoughts &
> > > > > > > > > > >> > feedback on this enhancement to Connect.
> > > > > > > > > > >> >
> > > > > > > > > > >> > Thanks,
> > > > > > > > > > >> > Magesh
> > > > > > > > > > >> >
> > > > > > > > > > >>
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Re: [DISCUSS] KIP-458: Connector Client Config Override Policy

Posted by Chris Egerton <ch...@confluent.io>.
Randall,

The special behavior for null was my suggestion. There is no implementation
of the proposed interface that causes client overrides to be ignored, so
the original idea was to have a special implementation that would be
checked for by the Connect framework (probably via the instanceof operator)
and, if present, cause all would-be overrides to be ignored.

I thought this may be confusing to people who may see that behavior and
wonder how to recreate it themselves, so I suggested leaving that policy
out and replace it with a check to see if a policy was specified at all.

Would be interested in your thoughts on this, especially if there's an
alternative that hasn't been proposed yet.

Cheers,

Chris

On Tue, Apr 30, 2019, 18:01 Randall Hauch <rh...@gmail.com> wrote:

> On Tue, Apr 30, 2019 at 4:20 PM Magesh Nandakumar <ma...@confluent.io>
> wrote:
>
> > Randall,
> >
> > Thanks a lot for your feedback.
> >
> > You bring up an interesting point regarding the overrides being available
> > to the connectors. Today everything that is specified in the config while
> > creating is available for the connector. But this is a specific case and
> we
> > could do either of the following
> >
> >
> >    - don't pass any configs with these prefixes to the ConnectorConfig
> >    instance that's passed in the startConnector
> >    - allow policies as to whether the configurations with the prefixes
> >    should be made available to the connector or not. Should this also
> > define a
> >    list of configurations?
> >
> > I personally prefer not passing the configs to Connector since that's
> > simple, straight forward and don't see a reason for the connector to
> access
> > those.
> >
>
> I agree that these override properties should be effectively new
> properties, in which case I'd also prefer that they be removed from the
> configuration before it is passed to the connector. Yes, it is *possible*
> that an existing connector happened to use connector config properties with
> these prefixes, but it's seems pretty unlikely.
>
> I'd love to hear whether other people agree.
>
>
> >
> > For the second point,  None - doesn't allow overrides and the default
> > policy is null. We preserve backward compatibility when no policy is
> > configured. Let me know if that's not clear in the KIP.
> >
>
> Why not have a default policy (rather than null) that implements the
> backward-compatible behavior? It seems strange to have null be the default
> and for non-policy to allow anything.
>
>
> >
> > Thanks,
> > Magesh
> >
> > On Mon, Apr 29, 2019 at 4:07 PM Randall Hauch <rh...@gmail.com> wrote:
> >
> > > Per the proposal, a connector configuration can define one or more
> > > properties that begin with any of the three prefixes:
> > "producer.override.",
> > > "consumer.override.", and "admin.override.". The proposal states:
> > >
> > > Since the users can specify any of these policies, the connectors
> itself
> > > should not rely on these configurations to be available. The overrides
> > are
> > > to be used purely from an operational perspective.
> > >
> > >
> > > Does this mean that any such properties are visible to connectors, or
> > will
> > > they be hidden to connectors? Currently no connectors have access to
> such
> > > client properties, and users are unlike to just put them into a
> connector
> > > configuration unnecessarily. A connector implementation could have
> > defined
> > > such properties as normal connector-specific properties, in which case
> > they
> > > are required, but is that likely given the log prefixes? One concern
> > that I
> > > have is that this might allow connector implementations start
> attempting
> > to
> > > circumvent the Connect API if these properties are included.
> > >
> > > Second, does the None policy allow but ignore these additional
> properties
> > > (e.g., "validate(...)" is simply a no-op)? Or does the None policy fail
> > if
> > > any client overrides are specified? The former seems more in line with
> > the
> > > current behavior, whereas the "disallows" policy seems useful but not
> > > exactly backward compatible. Should we also offer a "Disallow" policy?
> In
> > > fact, should the policies be named "Ignore" (default), "Disallow",
> > > "Prinicipal", and "All"?
> > >
> > > Otherwise, I like the idea of this. There have been several requests
> over
> > > the past year or two for adding subsets of this functionality. Might be
> > > good to find and list all of the related KAFKA issues.
> > >
> > > Randall
> > >
> > > On Fri, Apr 26, 2019 at 4:04 PM Chris Egerton <ch...@confluent.io>
> > wrote:
> > >
> > > > Hi Magesh,
> > > >
> > > > Changes look good to me! Excited to see this happen, hope the KIP
> > passes
> > > :)
> > > >
> > > > Cheers,
> > > >
> > > > Chris
> > > >
> > > > On Fri, Apr 26, 2019 at 1:44 PM Magesh Nandakumar <
> > mageshn@confluent.io>
> > > > wrote:
> > > >
> > > > > Hi Chris,
> > > > >
> > > > > I have updated the KIP to reflect the changes that we discussed for
> > the
> > > > > prefix. Thanks for all your inputs.
> > > > >
> > > > > Thanks,
> > > > > Magesh
> > > > >
> > > > > On Thu, Apr 25, 2019 at 2:18 PM Chris Egerton <chrise@confluent.io
> >
> > > > wrote:
> > > > >
> > > > > > Hi Magesh,
> > > > > >
> > > > > > Agreed that we should avoid `dlq.admin`. I also don't have a
> strong
> > > > > opinion
> > > > > > between `connector.` and `.override`, but I have a slight
> > inclination
> > > > > > toward `.override` since `connector.` feels a little redundant
> > given
> > > > that
> > > > > > the whole configuration is for the connector and the use of
> > > "override"
> > > > > may
> > > > > > shed a little light on how the properties for these clients are
> > > > computed
> > > > > > and help make the learning curve a little gentler on new devs and
> > > > users.
> > > > > >
> > > > > > Regardless, I think the larger issue of conflicts with existing
> > > > > properties
> > > > > > (both in MM2 and potentially other connectors) has been
> > > satisfactorily
> > > > > > addressed, so I'm happy.
> > > > > >
> > > > > > Cheers,
> > > > > >
> > > > > > Chris
> > > > > >
> > > > > > On Wed, Apr 24, 2019 at 11:14 AM Magesh Nandakumar <
> > > > mageshn@confluent.io
> > > > > >
> > > > > > wrote:
> > > > > >
> > > > > > > HI Chrise,
> > > > > > >
> > > > > > > You are right about the "admin." prefix creating conflicts.
> Here
> > > are
> > > > > few
> > > > > > > options that I can think of
> > > > > > >
> > > > > > > 1. Use `dlq.admin` since admin client is used only for DLQ. But
> > > this
> > > > > > might
> > > > > > > not really be the case in the future. So, we should possibly
> drop
> > > > this
> > > > > > idea
> > > > > > > :)
> > > > > > > 2.  Use `connector.producer`, `connector.consumer` and
> > > > > `connector.admin`
> > > > > > -
> > > > > > > provides better context that its connector specific property
> > > > > > > 3.  Use `producer.override`, '`consumer.override` and
> > > > `admin.override`
> > > > > -
> > > > > > > provides better clarity that these are overrides.
> > > > > > >
> > > > > > > I don't have a strong opinion in choosing between #2 and #3.
> Let
> > me
> > > > > > > know what you think.
> > > > > > >
> > > > > > > Thanks
> > > > > > > Magesh
> > > > > > >
> > > > > > > On Wed, Apr 24, 2019 at 10:25 AM Chris Egerton <
> > > chrise@confluent.io>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Hi Magesh,
> > > > > > > >
> > > > > > > > Next round :)
> > > > > > > >
> > > > > > > > 1. It looks like MM2 will also support "admin." properties
> that
> > > > > affect
> > > > > > > > AdminClients it creates and uses, which IIUC is the same
> prefix
> > > > name
> > > > > to
> > > > > > > be
> > > > > > > > used for managing the DLQ for sink connectors in this KIP.
> > > Doesn't
> > > > > that
> > > > > > > > still leave room for conflict? I'm imagining a scenario like
> > > this:
> > > > a
> > > > > > > > Connect worker is configured to use the
> > > > > > > > PrincipalConnectorClientConfigPolicy, someone tries to start
> an
> > > > > > instance
> > > > > > > of
> > > > > > > > an MM2 sink with "admin." properties beyond just
> > > > > > > "admin.sasl.jaas.config",
> > > > > > > > and gets rejected because those properties are then
> interpreted
> > > by
> > > > > the
> > > > > > > > worker as overrides for the AdminClient it uses to manage the
> > > DLQ.
> > > > > > > > 2. (LGTM)
> > > > > > > > 3. I'm convinced by this, as long as nobody else identifies a
> > > > common
> > > > > > use
> > > > > > > > case that would involve a similar client config policy
> > > > implementation
> > > > > > > that
> > > > > > > > would be limited to a small set of whitelisted configs. For
> now
> > > > > keeping
> > > > > > > the
> > > > > > > > PrincipalConnectorClientConfigPolicy sounds fine to me.
> > > > > > > >
> > > > > > > > Cheers,
> > > > > > > >
> > > > > > > > Chris
> > > > > > > >
> > > > > > > > On Tue, Apr 23, 2019 at 10:30 PM Magesh Nandakumar <
> > > > > > mageshn@confluent.io
> > > > > > > >
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Hi all,
> > > > > > > > >
> > > > > > > > > I also have a draft implementation of the KIP
> > > > > > > > > https://github.com/apache/kafka/pull/6624. I would still
> > need
> > > to
> > > > > > > include
> > > > > > > > > more tests and docs but I thought it would be useful to
> have
> > > this
> > > > > for
> > > > > > > the
> > > > > > > > > KIP discussion. Looking forward to all of your valuable
> > > feedback.
> > > > > > > > >
> > > > > > > > > Thanks
> > > > > > > > > Magesh
> > > > > > > > >
> > > > > > > > > On Tue, Apr 23, 2019 at 10:27 PM Magesh Nandakumar <
> > > > > > > mageshn@confluent.io
> > > > > > > > >
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Chrise,
> > > > > > > > > >
> > > > > > > > > > Thanks a lot for your feedback. I will address them in
> > order
> > > of
> > > > > > your
> > > > > > > > > > questions/comments.
> > > > > > > > > >
> > > > > > > > > > 1. Thanks for bringing this to my attention about
> KIP-382.
> > I
> > > > had
> > > > > a
> > > > > > > > closer
> > > > > > > > > > look at the KIP and IIUC, the KIP allows `consumer.`
> prefix
> > > for
> > > > > > > > > SourceConnector
> > > > > > > > > > and producer. prefix for SinkConnector since those are
> > > > additional
> > > > > > > > > > connector properties to help resolve the Kafka cluster
> > other
> > > > than
> > > > > > the
> > > > > > > > one
> > > > > > > > > > Connect framework knows about. Whereas, the proposal in
> > > KIP-458
> > > > > > > applies
> > > > > > > > > > producer policies for SinkConnectors and consumer
> policies
> > > > > > > > > > SourceConnectors.  So, from what I understand this new
> > policy
> > > > > > should
> > > > > > > > work
> > > > > > > > > > without any issues even for Mirror Maker 2.0.
> > > > > > > > > > 2. I have updated the KIP to use a default value of null
> > and
> > > > use
> > > > > > that
> > > > > > > > to
> > > > > > > > > > determine if we need to ignore overrides.
> > > > > > > > > > 3. I would still prefer to keep the special
> > > > > > > > > PrincipalConnectorClientConfigPolicy
> > > > > > > > > > since that is one of the most common use cases one would
> > > choose
> > > > > to
> > > > > > > use
> > > > > > > > > this
> > > > > > > > > > feature. If we make it a general case, that would involve
> > > users
> > > > > > > > requiring
> > > > > > > > > > to add additional configuration and they might require
> well
> > > > more
> > > > > > than
> > > > > > > > > just
> > > > > > > > > > the list of configs but might also want some restriction
> on
> > > > > values.
> > > > > > > If
> > > > > > > > > the
> > > > > > > > > > concern is about users wanting principal and also other
> > > > configs,
> > > > > it
> > > > > > > > would
> > > > > > > > > > still be possible by means of a custom implementation. As
> > > is, I
> > > > > > would
> > > > > > > > > > prefer to keep the proposal to be the same for this. Let
> me
> > > > know
> > > > > > your
> > > > > > > > > > thoughts.
> > > > > > > > > >
> > > > > > > > > > Thanks,
> > > > > > > > > > Magesh
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > On Mon, Apr 22, 2019 at 3:44 PM Chris Egerton <
> > > > > chrise@confluent.io
> > > > > > >
> > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > >> Hi Magesh,
> > > > > > > > > >>
> > > > > > > > > >> This is an exciting KIP! I have a few questions/comments
> > but
> > > > > > > overall I
> > > > > > > > > >> like
> > > > > > > > > >> the direction it's headed in and hope to see it included
> > in
> > > > the
> > > > > > > > Connect
> > > > > > > > > >> framework soon.
> > > > > > > > > >>
> > > > > > > > > >> 1. With the proposed "consumer.", "producer.", and
> > "admin."
> > > > > > > prefixes,
> > > > > > > > > how
> > > > > > > > > >> will this interact with connectors such as the upcoming
> > > Mirror
> > > > > > Maker
> > > > > > > > 2.0
> > > > > > > > > >> (KIP-382) that already support properties with those
> > > prefixes?
> > > > > > Would
> > > > > > > > it
> > > > > > > > > be
> > > > > > > > > >> possible for a user to configure MM2 with those
> properties
> > > > > without
> > > > > > > > them
> > > > > > > > > >> being interpreted as Connect client overrides, without
> > > > isolating
> > > > > > MM2
> > > > > > > > > onto
> > > > > > > > > >> its own cluster and using the
> > > > IgnoreConnectorClientConfigPolicy
> > > > > > > > policy?
> > > > > > > > > >> 2. Is the IgnoreConnectorClientConfigPolicy class
> > necessary?
> > > > The
> > > > > > > > default
> > > > > > > > > >> for the connector.client.config.policy property could
> > simply
> > > > be
> > > > > > null
> > > > > > > > > >> instead of a new policy that, as far as I can tell,
> isn't
> > an
> > > > > > actual
> > > > > > > > > policy
> > > > > > > > > >> in that its validate(...) method is never invoked and
> > > instead
> > > > > > > > > represents a
> > > > > > > > > >> special case to the Connect framework that says "Drop
> all
> > > > > > overrides
> > > > > > > > and
> > > > > > > > > >> never use me".
> > > > > > > > > >> 3. The PrincipalConnectorClientConfigPolicy seems like a
> > > > > specific
> > > > > > > > > instance
> > > > > > > > > >> of a more general use case: allow exactly a small set of
> > > > > overrides
> > > > > > > and
> > > > > > > > > no
> > > > > > > > > >> others. Why not generalize here and create a policy that
> > > > > accepts a
> > > > > > > > list
> > > > > > > > > of
> > > > > > > > > >> allowed overrides during configuration?
> > > > > > > > > >>
> > > > > > > > > >> Thanks again for the KIP.
> > > > > > > > > >>
> > > > > > > > > >> Cheers,
> > > > > > > > > >>
> > > > > > > > > >> Chris
> > > > > > > > > >>
> > > > > > > > > >> On Fri, Apr 19, 2019 at 2:53 PM Magesh Nandakumar <
> > > > > > > > mageshn@confluent.io
> > > > > > > > > >
> > > > > > > > > >> wrote:
> > > > > > > > > >>
> > > > > > > > > >> > Hi all,
> > > > > > > > > >> >
> > > > > > > > > >> > I've posted "KIP-458: Connector Client Config Override
> > > > > Policy",
> > > > > > > > which
> > > > > > > > > >> > allows users to override the connector client
> > > configurations
> > > > > > based
> > > > > > > > on
> > > > > > > > > a
> > > > > > > > > >> > policy defined by the administrator.
> > > > > > > > > >> >
> > > > > > > > > >> > The KIP can be found at
> > > > > > > > > >> >
> > > > > > > > > >> >
> > > > > > > > > >>
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-458%3A+Connector+Client+Config+Override+Policy
> > > > > > > > > >> > .
> > > > > > > > > >> >
> > > > > > > > > >> > Looking forward for the discussion on the KIP and all
> of
> > > > your
> > > > > > > > > thoughts &
> > > > > > > > > >> > feedback on this enhancement to Connect.
> > > > > > > > > >> >
> > > > > > > > > >> > Thanks,
> > > > > > > > > >> > Magesh
> > > > > > > > > >> >
> > > > > > > > > >>
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>