Thanks Randall, updated.

On Sun, Dec 5, 2021 at 6:05 AM Arjun Satish <arjun.sat...@gmail.com> wrote:
>
> hey folks,
>
> Thanks a lot for the KIP and the discussions. Here are a couple of thoughts
> (apologies if I missed some point in this thread).
>
> 1. it seems like we are changing the behavior of /connector-plugins by now
> returning the list of transforms, converters as well? This would break
> backward compatibility, and clients would need to track what version of
> Connect workers they are querying to keep their experience consistent. I
> wonder if we can keep the old behavior, with one of the following methods:
>
> 1a. We add an "expand" multi-query to the /connector-plugin endpoint like
> how it was done in KIP-465 [1]. This would preserve backward compatibility,
> as well as allow you to get consolidated output. Acceptable values for the
> new param could be: "all" (to show all plugins), or
> "connectors|transforms|predicates" that show a subset of the plugin types.
>
> 1b. Query params might get crummy to extend. Alternatively, we could have
> an additional fine-grained paths for each plugin:
>
> # to list all the source and sink plugins
> /connector-plugins/connectors
>
> # to list all the SMT plugins
> /connector-plugins/transformations
>
> # to list all the predicate plugins
> /connector-plugins/predicates
>
> # to list all the converter plugins
> /connector-plugins/converters
>
> # to list all the header converter plugins
> /connector-plugins/header-converters
>
> This allows us to cleanly add new types of plugins down the road, and
> naturally extend to displaying attributes of these objects. Configs, for
> example, can be accessed with
>
> http://localhost:8083/connector-plugins/transformations/Cast$Value/config
>
> A migration path (for both the suggestions above) would be to add a
> deprecation notice on the current behavior of /connector-plugins (where,
> after this PR is merged, both /connector-plugins and
> /connector-plugins/connectors return the same output). And starting from
> the next major version release, /connector-plugins redirects to
> /connector-plugins/connectors (making it super easy for clients to catch
> up).
>
> 2. Regarding /worker-plugins, I agree that it is useful to have the REST
> API inform the state of the REST extensions, and Config Providers. However,
> users of the Connect clusters will rarely need to know how a config
> provider or REST extension is configured to construct data pipelines. It's
> mostly an admin task, AFAICT. Also, we have also seen these problems in
> Connect clusters where one host is somewhat differently set up than other
> (contents of plugin path, classpath, local worker configuration files, jvm
> versions, GC settings) that surface as issues in Connector behavior.
> Overall, I'm wondering if we should just tackle this problem in a separate
> KIP, that evaluates all of these cases. All of this might nicely fall into
> under the /admin endpoint and allow us to expose detailed info on the state
> of the worker (maybe a /admin/worker/ that returns all of this info).
>
> Thanks,
>
> [1]
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-465%3A+Add+Consolidated+Connector+Endpoint+to+Connect+REST+API
>
>
> On Sat, Dec 4, 2021 at 10:29 AM Randall Hauch <rha...@gmail.com> wrote:
>
> > Thanks, Mickael. Can we call out these as literals? For example:
> >
> > > The response structure of the objects in the array remain unchanged, but
> > this proposal does add "converter", "header_converter" and "transformation"
> > to the allowed values for the "type" field, in addition to the existing
> > "sink" and "source" values.
> >
> > Best regards,
> >
> > Randall
> >
> > On Sat, Dec 4, 2021 at 4:58 AM Mickael Maison <mickael.mai...@gmail.com>
> > wrote:
> > >
> > > Hi Randall,
> > >
> > > Sure. The types are sink, source, converter, header_converter,
> > > transformation and predicate. I've updated the KIP.
> > >
> > > Thanks,
> > > Mickael
> > >
> > > On Fri, Dec 3, 2021 at 10:14 PM Randall Hauch <rha...@gmail.com> wrote:
> > > >
> > > > One more thing, inline below:
> > > >
> > > > Randall
> > > >
> > > > On Fri, Dec 3, 2021 at 10:38 AM Mickael Maison <
> > mickael.mai...@gmail.com> wrote:
> > > > >
> > > > > Thanks Randall for the feedback!
> > > > >
> > > > > 1. Done
> > > > >
> > > > > 2. Yes that makes sense. I've updated the KIP
> > > > >
> > > > > 3.a I've updated to explicitly mention the plugin can be provided
> > > > > using the fully qualified class or the alias.
> > > > > 3.b Only concrete classes will be returned. I made the mistake when I
> > > > > crafted the examples by hand. Fixed
> > > >
> > > > Can we also enumerate all of the values that can be included in the
> > > > "type" field in the response from the "GET
> > > > /connector-plugins?connectorsOnly=false"?
> > > >
> > > > >
> > > > > 4. If a plugin does not override config(), the response is an empty
> > > > > array. I've updated the KIP
> > > > >
> > > > > 5. I have updated the compatibility section with more details
> > > > >
> > > > > 6. Can you clarify what you mean? KIP-507 was for securing internal
> > > > > REST endpoints.
> > > > >
> > > > > 7. I don't think it is necessary. I think the use case Chris
> > mentioned
> > > > > could be useful for admins. I'm interested in exposing the
> > > > > connector-level plugins and their configs. I thought it was easy to
> > > > > add an API for worker plugins while working in this area but if there
> > > > > isn't a strong consensus, I'm happy to drop it.
> > > > >
> > > > > Mickael
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On Wed, Dec 1, 2021 at 5:39 PM Randall Hauch <rha...@gmail.com>
> > wrote:
> > > > > >
> > > > > > Thanks for the KIP, Mickael. And thanks to everyone else for the
> > good
> > > > > > discussion so far.
> > > > > >
> > > > > > Overall this is pretty good, but I do have a few
> > questions/comments:
> > > > > > 1. Can we include the HTTP method/verb in each of the endpoints in
> > the
> > > > > > "Public Interfaces" section?
> > > > > > 2. The sample output for `GET
> > /connector-plugins?connectorsOnly=false`
> > > > > > includes a `version` field for the connector plugin, but not for
> > the
> > > > > > transform or converter plugins. Neither the `Transformation` or
> > > > > > `Converter` interfaces have a version nor implement the `Versioned`
> > > > > > interface, so should we add the `Versioned` interface to the
> > > > > > `Transformation` and `Converter` interfaces and add a default
> > method
> > > > > > that returns "unknown"? Yes, we could do that in a separate KIP,
> > but I
> > > > > > think it's appropriate to do it in this KIP for a few reasons.
> > First,
> > > > > > we're already modifying the `Converter` interface in this KIP and
> > it
> > > > > > would be quite straightforward to also extend the `Versioned`
> > > > > > interface and add a default method; then doing that for
> > > > > > `Transformation` would also be relatively straightforward. Second,
> > > > > > this KIP provides the justification for adding a version to the
> > > > > > `Transformation` and `Converter` interfaces.
> > > > > > 3. In the "Public Interfaces" section, there are two
> > inconsistencies
> > > > > > between the `GET /connector-plugins` and `GET
> > > > > > /connector-plugins/<plugin>/config` methods. Both will make it
> > > > > > difficult to use the second method, since the input to the second
> > > > > > method is not directly found in the response from the first method:
> > > > > >  a. The example for `GET /connector-plugins/Cast$Value/config` uses
> > > > > > short name, or what Connect often refers to as the alias,
> > "Cast$Value"
> > > > > > for the plugin, rather than the fully-qualified name
> > > > > > "org.apache.kafka.connect.transforms.Cast$Value". The KIP should
> > > > > > specify whether it will support both the shortened name and the
> > > > > > fully-qualified name, or whether only one of these will be
> > supported.
> > > > > > Not supporting the fully-qualified name will make it impossible to
> > use
> > > > > > the response from the first method as an input to the second.
> > > > > >  a. The example for the list method returns the `Transformation`
> > base
> > > > > > and abstract classes (e.g.,
> > > > > > "org.apache.kafka.connect.transforms.Cast") rather than the
> > concrete
> > > > > > classes (e.g., "org.apache.kafka.connect.transforms.Cast$Value" and
> > > > > > "org.apache.kafka.connect.transforms.Cast$Key"), while the `GET
> > > > > > /connector-plugins/<plugin>/config` will require the concrete
> > class.
> > > > > > 4. The "Public Interfaces" section's description of the `GET
> > > > > > /connector-plugins/<plugin>/config` method should probably specify
> > the
> > > > > > expected behavior for `Converter` implementations that don't
> > override
> > > > > > the new `config()` method.
> > > > > > 5. The "Compatibility, Deprecation, and Migration Plan" section
> > should
> > > > > > describe whether older `Converter` implementations (compiled with
> > > > > > older versions of the Connect API without Converter extending
> > > > > > Configurable) will be able to be installed into newer Connect
> > > > > > runtimes, and what the behavior will be for the `GET
> > > > > > /connector-plugins/<plugin>/config` method. (Although my suggestion
> > > > > > for #5 will partially address the latter, we still need to talk
> > about
> > > > > > it in terms of compatibility.)
> > > > > > 6. Can we add a small section addressing the security implications
> > of
> > > > > > these new APIs? KIP-507 [1] applied to APIs that existed at the
> > time,
> > > > > > and this KIP should at least mention how it aligns with that
> > > > > > mechanism.
> > > > > > 7. Do we really think adding `GET /worker-plugins` is necessary?
> > While
> > > > > > I understand the reasoning, I'm less convinced that it's worth
> > adding
> > > > > > to the public API. First, an administrator still has to modify the
> > > > > > worker config for all workers to take advantage of that. Second,
> > > > > > adding this method increases the surface area and therefore risk of
> > > > > > additional attack vectors, despite not really being able to use the
> > > > > > resulting information in any other part of the API.
> > > > > >
> > > > > > Best regards,
> > > > > >
> > > > > > Randall
> > > > > >
> > > > > > [1]
> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-507%3A+Securing+Internal+Connect+REST+Endpoints
> > > > > >
> > > > > >
> > > > > > On Wed, Dec 1, 2021 at 7:52 AM Mickael Maison <
> > mickael.mai...@gmail.com> wrote:
> > > > > > >
> > > > > > > Hi Chris,
> > > > > > >
> > > > > > > Thanks again for the feedback! I've updated the KIP based on our
> > last
> > > > > > > discussions. I've decided to include the new endpoint for worker
> > > > > > > plugins.
> > > > > > >
> > > > > > > 1. Yes I agree, it's best to gate the new behavior.
> > > > > > > 2. Yes, it was a remnant from the original proposal. I've now
> > removed
> > > > > > > the location field.
> > > > > > >
> > > > > > > Thanks,
> > > > > > > Mickael
> > > > > > >
> > > > > > > On Tue, Nov 30, 2021 at 3:22 AM Chris Egerton
> > > > > > > <chr...@confluent.io.invalid> wrote:
> > > > > > > >
> > > > > > > > Hi Mickael,
> > > > > > > >
> > > > > > > > I think that's a great idea! I especially like how we can
> > establish the
> > > > > > > > expectation that any plugin type that appears in the response
> > from the GET
> > > > > > > > /connector-plugins endpoint will have a corresponding GET
> > > > > > > > /connector-plugins/<type>/config endpoint, but (if we decide
> > to add them in
> > > > > > > > the future), worker plugins won't be expected to expose this
> > kind of
> > > > > > > > information and the different root path helps give a decent
> > hint about this.
> > > > > > > >
> > > > > > > > I also like the choice to return an empty ConfigDef from
> > Converter::config
> > > > > > > > instead of null.
> > > > > > > >
> > > > > > > > Two things come to mind:
> > > > > > > >
> > > > > > > > 1. We may want to gate this behind a URL query parameter
> > (maybe something
> > > > > > > > like "connectorsOnly") that defaults to the old behavior in
> > order to avoid
> > > > > > > > breaking existing tools such as programmatic UIs that use the
> > endpoint
> > > > > > > > today to discover the connectors that can be created by the
> > user. We can
> > > > > > > > even plan to change the default for that parameter to the
> > newly-proposed
> > > > > > > > behavior in the next major release, which should give people
> > enough time to
> > > > > > > > either adapt to the expanded response format or add the query
> > parameter to
> > > > > > > > their tooling.
> > > > > > > >
> > > > > > > > 2. The existing GET /connector-plugins endpoint doesn't
> > contain information
> > > > > > > > on the location of the plugin on the worker's file system. Do
> > you think we
> > > > > > > > should still include this info in the new response format?
> > Correct me if
> > > > > > > > I'm wrong but it seems it may have been proposed originally to
> > help prevent
> > > > > > > > already-addressed bugs in Connect classloading from striking;
> > all else
> > > > > > > > equal, I'd personally err on the side of leaving this info out
> > or at least
> > > > > > > > reducing permitted values for it to just "classpath" or
> > "plugin path" in
> > > > > > > > order to avoid leaking worker file paths into the REST API,
> > which might
> > > > > > > > bother super security-conscious users.
> > > > > > > >
> > > > > > > > Cheers,
> > > > > > > >
> > > > > > > > Chris
> > > > > > > >
> > > > > > > > On Mon, Nov 29, 2021 at 5:52 AM Mickael Maison <
> > mickael.mai...@gmail.com>
> > > > > > > > wrote:
> > > > > > > >
> > > > > > > > > Hi Chris,
> > > > > > > > >
> > > > > > > > > Yes to keep compatibility we want a default implementation
> > for
> > > > > > > > > Converter.configs(), I've updated the KIP.
> > > > > > > > >
> > > > > > > > > Regarding worker plugins, the use case you described seems
> > valuable.
> > > > > > > > > I'd prefer not mixing worker and connector plugins on the
> > same
> > > > > > > > > endpoint but I agree using /plugins and /worker-plugins
> > could be
> > > > > > > > > confusing.
> > > > > > > > >
> > > > > > > > > One alternative is to expose all connector-level plugins via
> > the
> > > > > > > > > existing /connector-plugins endpoint. In that case, we'd
> > need to keep
> > > > > > > > > the current JSON schema and not group plugins by type. As
> > the current
> > > > > > > > > schema already has a type field for each entry, we'll still
> > be able to
> > > > > > > > > tell them apart. Then we can have /worker-plugins and a
> > relatively
> > > > > > > > > clean API. What do you think?
> > > > > > > > >
> > > > > > > > > Thanks,
> > > > > > > > > Mickael
> > > > > > > > >
> > > > > > > > > On Sun, Nov 28, 2021 at 8:21 PM Chris Egerton
> > > > > > > > > <chr...@confluent.io.invalid> wrote:
> > > > > > > > > >
> > > > > > > > > > Hi Mickael,
> > > > > > > > > >
> > > > > > > > > > I think one potential use case for exposing worker-level
> > plugins is that
> > > > > > > > > it
> > > > > > > > > > may make it easier to determine whether a worker is set up
> > correctly (the
> > > > > > > > > > current alternative requires looking through log files and
> > can be a
> > > > > > > > > little
> > > > > > > > > > tedious), and might even make it possible to automatically
> > identify
> > > > > > > > > > discrepancies within a cluster by diffing the contents of
> > that endpoint
> > > > > > > > > > across each worker. But I don't think this has to be
> > addressed by the
> > > > > > > > > > current KIP; the only thing that bothers me a little is
> > that "plugins" is
> > > > > > > > > > generic and it may confuse people down the road if we add
> > an endpoint for
> > > > > > > > > > worker-level plugins ("why is one just called 'plugins'
> > and the other one
> > > > > > > > > > is 'worker-plugins'?"). Probably not worth blocking on,
> > though.
> > > > > > > > > >
> > > > > > > > > > Agreed that the suggestion for improved validation should
> > be made on the
> > > > > > > > > > KIP-802 thread.
> > > > > > > > > >
> > > > > > > > > > I also noticed that the newly-proposed config method for
> > the Converter
> > > > > > > > > > interface doesn't have a default implementation, making it
> > > > > > > > > > backwards-incompatible. Should we add a default
> > implementation that
> > > > > > > > > returns
> > > > > > > > > > either null or an empty ConfigDef?
> > > > > > > > > >
> > > > > > > > > > Cheers,
> > > > > > > > > >
> > > > > > > > > > Chris
> > > > > > > > > >
> > > > > > > > > > On Fri, Nov 26, 2021 at 8:35 AM Mickael Maison <
> > mickael.mai...@gmail.com
> > > > > > > > > >
> > > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Hi Chris,
> > > > > > > > > > >
> > > > > > > > > > > 1. If we want to expose worker plugins, I think we
> > should do it via a
> > > > > > > > > > > separate endpoint. But to be honest, I'm not even sure I
> > see strong
> > > > > > > > > > > use cases for exposing them as they are either enabled
> > or not and
> > > > > > > > > > > can't be changed at runtime. So I'd prefer to stick to
> > "connector
> > > > > > > > > > > level" plugins in this KIP. Let me now if you have use
> > cases, I'm open
> > > > > > > > > > > to reconsider this choice.
> > > > > > > > > > > I'll add that in the rejected alternatives section for
> > now
> > > > > > > > > > >
> > > > > > > > > > > 2. I remembered seeing issues in the past with multiple
> > plugin.path
> > > > > > > > > > > entries but I tried today and I was able to mix and
> > match plugins from
> > > > > > > > > > > different paths. So my bad for getting confused.
> > > > > > > > > > > Then I agree, it makes more sense to group them by
> > plugin type.
> > > > > > > > > > >
> > > > > > > > > > > 3. Yes this should be covered in KIP-802:
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-802%3A+Validation+Support+for+Kafka+Connect+SMT+Options
> > > > > > > > > > >
> > > > > > > > > > > 4. No particular reason. We can support both formats
> > like today. I've
> > > > > > > > > > > updated the KIP
> > > > > > > > > > >
> > > > > > > > > > > Thanks,
> > > > > > > > > > > Mickael
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On Tue, Nov 23, 2021 at 6:40 PM Chris Egerton
> > > > > > > > > > > <chr...@confluent.io.invalid> wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > Hi Mickael,
> > > > > > > > > > > >
> > > > > > > > > > > > I think the increase in scope here is great and the
> > added value
> > > > > > > > > certainly
> > > > > > > > > > > > justifies the proposed changes. I have some thoughts
> > but overall I
> > > > > > > > > like
> > > > > > > > > > > the
> > > > > > > > > > > > direction this is going in now.
> > > > > > > > > > > >
> > > > > > > > > > > > 1. The new /plugins endpoint is described as
> > containing "all plugins
> > > > > > > > > that
> > > > > > > > > > > > are Connectors, Transformations, Converters,
> > HeaderConverters and
> > > > > > > > > > > > Predicates". So essentially, it looks like we want to
> > expose all
> > > > > > > > > plugins
> > > > > > > > > > > > that are configured on a per-connector basis, but
> > exclude plugins
> > > > > > > > > that
> > > > > > > > > > > are
> > > > > > > > > > > > configured on a per-worker basis (such as config
> > providers and REST
> > > > > > > > > > > > extensions). Do you think it may be valuable to expose
> > information on
> > > > > > > > > > > > worker-level plugins as well?
> > > > > > > > > > > >
> > > > > > > > > > > > 2. The description for the new /plugins endpoint also
> > states that
> > > > > > > > > > > "Plugins
> > > > > > > > > > > > will be grouped by plugin.path. This will make it
> > clear to users
> > > > > > > > > what's
> > > > > > > > > > > > available to use as it's not possible to use a
> > Connector from one
> > > > > > > > > path
> > > > > > > > > > > with
> > > > > > > > > > > > Transformations from another.". Is this true? I
> > thought that
> > > > > > > > > Connect's
> > > > > > > > > > > > classloading made it possible to package
> > > > > > > > > > > > converters/transformations/predicates completely
> > independently from
> > > > > > > > > each
> > > > > > > > > > > > other, and to reference them from
> > also-independently-packaged
> > > > > > > > > connectors.
> > > > > > > > > > > > If it turns out that this is the case, could we
> > consider
> > > > > > > > > restructuring
> > > > > > > > > > > the
> > > > > > > > > > > > response to be grouped by plugin type instead of by
> > classloader?
> > > > > > > > > There's
> > > > > > > > > > > > also the ungrouped format proposed in KIP-494 (
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=120740150
> > > > > > > > > > > )
> > > > > > > > > > > > which we might consider as well.
> > > > > > > > > > > >
> > > > > > > > > > > > 3. I think this can be left for a follow-up KIP if
> > necessary, but I'm
> > > > > > > > > > > > curious about your thoughts on adding new validate
> > methods to all
> > > > > > > > > > > > connector-level plugins that can be used similarly to
> > how the
> > > > > > > > > existing
> > > > > > > > > > > > Connector::validate method (
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > https://github.com/apache/kafka/blob/1e0916580f16b99b911b0ed36e9740dcaeef520e/connect/api/src/main/java/org/apache/kafka/connect/connector/Connector.java#L131-L146
> > > > > > > > > > > )
> > > > > > > > > > > > is used. This would allow for plugins to perform
> > validation that's
> > > > > > > > > more
> > > > > > > > > > > > sophisticated than what the ConfigDef is capable of,
> > such as
> > > > > > > > > validating
> > > > > > > > > > > > combinations of properties like a hostname and
> > credentials for
> > > > > > > > > reaching
> > > > > > > > > > > it.
> > > > > > > > > > > > I know that at least Confluent's Avro, protobuf, and
> > JSON schema
> > > > > > > > > > > converters
> > > > > > > > > > > > would benefit from this kind of feature. It's a little
> > tangential to
> > > > > > > > > this
> > > > > > > > > > > > KIP (which at the moment is about discovering plugins
> > and their
> > > > > > > > > > > > configuration surfaces, as opposed to validating
> > them), but I
> > > > > > > > > figured I'd
> > > > > > > > > > > > ask since we're going to be expanding the Converter
> > interface and it
> > > > > > > > > may
> > > > > > > > > > > be
> > > > > > > > > > > > useful to tackle this while we're in the neighborhood.
> > > > > > > > > > > >
> > > > > > > > > > > > 4. The description for the new
> > /plugins/<type>/<name>/configdef
> > > > > > > > > endpoint
> > > > > > > > > > > > states that "Name must be the fully qualified class
> > name of the
> > > > > > > > > plugin".
> > > > > > > > > > > > Any reason not to also support aliases (e.g.,
> > > > > > > > > "FileStreamSinkConnector"
> > > > > > > > > > > or
> > > > > > > > > > > > "FileStreamSink" instead of
> > > > > > > > > > > >
> > "org.apache.kafka.connect.file.FileStreamSinkConnector")?
> > > > > > > > > > > >
> > > > > > > > > > > > Cheers,
> > > > > > > > > > > >
> > > > > > > > > > > > Chris
> > > > > > > > > > > >
> > > > > > > > > > > > On Tue, Nov 23, 2021 at 12:07 PM Mickael Maison <
> > > > > > > > > > > mickael.mai...@gmail.com>
> > > > > > > > > > > > wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > > Thanks all for the feedback!
> > > > > > > > > > > > >
> > > > > > > > > > > > > Chris,
> > > > > > > > > > > > > I agree that fixing the current endpoint helps a
> > lot. Thanks for
> > > > > > > > > > > > > raising these JIRAs and submitting a PR!
> > > > > > > > > > > > > However thinking about the issue further, I decided
> > to expand the
> > > > > > > > > > > > > scope of the KIP to cover all user-visible plugins.
> > > > > > > > > > > > > In practice, users want to know about all available
> > plugins not
> > > > > > > > > only
> > > > > > > > > > > > > connectors. This includes transformations,
> > converters,
> > > > > > > > > > > > > header_converters and predicates. As we also want to
> > retrieve
> > > > > > > > > > > > > configdef for these too, I think it makes sense to
> > introduce a new
> > > > > > > > > > > > > endpoint to do so. Alongside we obviously need a new
> > endpoint for
> > > > > > > > > > > > > listing all plugins.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Gunnar,
> > > > > > > > > > > > > I took a look at exposing valid values via the API.
> > I think the
> > > > > > > > > issue
> > > > > > > > > > > > > is that Validators don't expose a way to retrieve
> > valid values.
> > > > > > > > > > > > > Changing validators will have an impact on all
> > components so I'd
> > > > > > > > > > > > > prefer to address this requirement in a separate
> > KIP. I agree this
> > > > > > > > > > > > > would be an interesting improvement and I'd happy to
> > write a KIP
> > > > > > > > > for
> > > > > > > > > > > > > it too.
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > I have updated the KIP accordingly. Let me know if
> > you have further
> > > > > > > > > > > > > feedback.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > Mickael
> > > > > > > > > > > > >
> > > > > > > > > > > > > On Tue, Nov 16, 2021 at 9:31 PM Gunnar Morling
> > > > > > > > > > > > > <gunnar.morl...@googlemail.com.invalid> wrote:
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Hi,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > I'm +1 for adding a GET endpoint for obtaining
> > config
> > > > > > > > > definitions. It
> > > > > > > > > > > > > > always felt odd to me that one has to issue a PUT
> > for that
> > > > > > > > > purpose.
> > > > > > > > > > > If
> > > > > > > > > > > > > > nothing else, it'd be better in terms of
> > discoverability of the
> > > > > > > > > KC
> > > > > > > > > > > REST
> > > > > > > > > > > > > API.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > One additional feature request I'd have is to
> > expose the valid
> > > > > > > > > enum
> > > > > > > > > > > > > > constants for enum-typed options. That'll help to
> > display the
> > > > > > > > > values
> > > > > > > > > > > in a
> > > > > > > > > > > > > > drop-down or via radio buttons in a UI, give us
> > tab completion in
> > > > > > > > > > > kcctl,
> > > > > > > > > > > > > > etc.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Best,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > --Gunnar
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Am Di., 16. Nov. 2021 um 16:31 Uhr schrieb Chris
> > Egerton
> > > > > > > > > > > > > > <chr...@confluent.io.invalid>:
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Hi Viktor,
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > It sounds like there are three major points here
> > in favor of a
> > > > > > > > > new
> > > > > > > > > > > GET
> > > > > > > > > > > > > > > endpoint for connector config defs.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > 1. You cannot issue a blank ("dummy") request
> > for sink
> > > > > > > > > connectors
> > > > > > > > > > > > > because a
> > > > > > > > > > > > > > > topic list/topic regex has to be supplied
> > (otherwise the PUT
> > > > > > > > > > > endpoint
> > > > > > > > > > > > > > > returns a 500 response)
> > > > > > > > > > > > > > > 2. A dummy request still triggers custom
> > validations by the
> > > > > > > > > > > connector,
> > > > > > > > > > > > > > > which may be best to avoid if we know for sure
> > that the config
> > > > > > > > > > > isn't
> > > > > > > > > > > > > worth
> > > > > > > > > > > > > > > validating yet
> > > > > > > > > > > > > > > 3. It's more ergonomic and intuitive to be able
> > to issue a GET
> > > > > > > > > > > request
> > > > > > > > > > > > > > > without having to give a dummy connector config
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > With regards to 1, this is actually a bug in
> > Connect (
> > > > > > > > > > > > > > >
> > https://issues.apache.org/jira/browse/KAFKA-13327) with a fix
> > > > > > > > > > > already
> > > > > > > > > > > > > > > implemented and awaiting committer review (
> > > > > > > > > > > > > > > https://github.com/apache/kafka/pull/11369). I
> > think it'd be
> > > > > > > > > > > better to
> > > > > > > > > > > > > > > focus on fixing this bug in general instead of
> > implementing a
> > > > > > > > > new
> > > > > > > > > > > REST
> > > > > > > > > > > > > > > endpoint in order to allow people to work around
> > it.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > With regards to 2, this is technically possible
> > but I'm unsure
> > > > > > > > > > > it'd be
> > > > > > > > > > > > > too
> > > > > > > > > > > > > > > common out in the wild given that most
> > validations that could
> > > > > > > > > be
> > > > > > > > > > > > > expensive
> > > > > > > > > > > > > > > would involve things like connecting to a
> > database, checking
> > > > > > > > > if a
> > > > > > > > > > > cloud
> > > > > > > > > > > > > > > storage bucket exists, etc., none of which are
> > possible without
> > > > > > > > > > > some
> > > > > > > > > > > > > > > configuration properties from the user (db
> > hostname, bucket
> > > > > > > > > name,
> > > > > > > > > > > > > etc.).
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > With regards to 3, I do agree that it'd be
> > easier for people
> > > > > > > > > > > designing
> > > > > > > > > > > > > UIs
> > > > > > > > > > > > > > > to have a GET API to work against. I'm just not
> > sure it's
> > > > > > > > > worth the
> > > > > > > > > > > > > > > additional implementation, testing, and
> > maintenance burden. If
> > > > > > > > > it
> > > > > > > > > > > were
> > > > > > > > > > > > > > > possible to issue a PUT request without
> > unexpected 500s for
> > > > > > > > > invalid
> > > > > > > > > > > > > > > configs, would that suffice? AFAICT it'd
> > basically be as
> > > > > > > > > simple as
> > > > > > > > > > > > > issuing
> > > > > > > > > > > > > > > a PUT request with a dummy body consisting of
> > nothing except
> > > > > > > > > the
> > > > > > > > > > > > > connector
> > > > > > > > > > > > > > > class (which at this point we might even make
> > unnecessary and
> > > > > > > > > just
> > > > > > > > > > > > > > > automatically replace with the connector class
> > from the URL)
> > > > > > > > > and
> > > > > > > > > > > then
> > > > > > > > > > > > > > > filtering the response to just grab the
> > "definition" field of
> > > > > > > > > each
> > > > > > > > > > > > > element
> > > > > > > > > > > > > > > in the "configs" array in the response.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Cheers,
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Chris
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > On Tue, Nov 16, 2021 at 9:52 AM Viktor
> > Somogyi-Vass <
> > > > > > > > > > > > > > > viktorsomo...@gmail.com>
> > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Hi Folks,
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > I too think this would be a very useful
> > feature. Some of our
> > > > > > > > > > > > > management
> > > > > > > > > > > > > > > > applications would provide a wizard for
> > creating connectors.
> > > > > > > > > In
> > > > > > > > > > > this
> > > > > > > > > > > > > > > > scenario the user basically would fill out a
> > sample
> > > > > > > > > configuration
> > > > > > > > > > > > > > > generated
> > > > > > > > > > > > > > > > by the UI which would send it back to Connect
> > for validation
> > > > > > > > > and
> > > > > > > > > > > > > > > eventually
> > > > > > > > > > > > > > > > create a new connector. The first part of this
> > workflow can
> > > > > > > > > be
> > > > > > > > > > > > > enhanced
> > > > > > > > > > > > > > > if
> > > > > > > > > > > > > > > > we had an API that can return the
> > configuration definition
> > > > > > > > > of the
> > > > > > > > > > > > > given
> > > > > > > > > > > > > > > > type of connector as the UI application would
> > be able to
> > > > > > > > > > > generate a
> > > > > > > > > > > > > > > sample
> > > > > > > > > > > > > > > > for the user based on that (nicely drawn
> > diagram:
> > > > > > > > > > > > > > > > https://imgur.com/a/7S1Xwm5).
> > > > > > > > > > > > > > > > The
> > connector-plugins/{connectorType}/config/validate API
> > > > > > > > > > > essentially
> > > > > > > > > > > > > > > works
> > > > > > > > > > > > > > > > and returns the data that we need, however it
> > is a HTTP PUT
> > > > > > > > > API
> > > > > > > > > > > that
> > > > > > > > > > > > > is a
> > > > > > > > > > > > > > > > bit unintuitive for a fetch-like functionality
> > and also
> > > > > > > > > > > functionally
> > > > > > > > > > > > > > > > different as it validates the given (dummy)
> > request. In case
> > > > > > > > > of
> > > > > > > > > > > sink
> > > > > > > > > > > > > > > > connectors one would need to also provide a
> > topic name.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > A suggestion for the KIP: I think it can be
> > useful to return
> > > > > > > > > the
> > > > > > > > > > > > > config
> > > > > > > > > > > > > > > > groups and the connector class' name similarly
> > to the
> > > > > > > > > validate
> > > > > > > > > > > API
> > > > > > > > > > > > > just
> > > > > > > > > > > > > > > in
> > > > > > > > > > > > > > > > case any frontend needs them (and also the
> > response would be
> > > > > > > > > more
> > > > > > > > > > > > > like
> > > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > validate API but simpler).
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Viktor
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > On Fri, Aug 20, 2021 at 4:51 PM Ryanne Dolan <
> > > > > > > > > > > ryannedo...@gmail.com>
> > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > I think it'd be worth adding a GET version,
> > fwiw. Could be
> > > > > > > > > the
> > > > > > > > > > > same
> > > > > > > > > > > > > > > > handler
> > > > > > > > > > > > > > > > > with just a different spelling maybe.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > On Fri, Aug 20, 2021, 7:44 AM Mickael Maison
> > <
> > > > > > > > > > > > > mickael.mai...@gmail.com
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > Hi Chris,
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > You're right, you can achieve the same
> > functionality
> > > > > > > > > using
> > > > > > > > > > > the
> > > > > > > > > > > > > > > > > > existing validate endpoint.
> > > > > > > > > > > > > > > > > > In my mind it was only for validation once
> > you have
> > > > > > > > > build a
> > > > > > > > > > > > > > > > > > configuration but when used with an empty
> > configuration,
> > > > > > > > > it
> > > > > > > > > > > > > basically
> > > > > > > > > > > > > > > > > > serves the same purpose as the proposed
> > new endpoint.
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > I think it's a bit easier to use a GET
> > endpoint but I
> > > > > > > > > don't
> > > > > > > > > > > > > think it
> > > > > > > > > > > > > > > > > > really warrants a different endpoint.
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > Thanks
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > On Thu, Aug 19, 2021 at 2:56 PM Chris
> > Egerton
> > > > > > > > > > > > > > > > > > <chr...@confluent.io.invalid> wrote:
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Hi Mickael,
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > I'm wondering about the use case here.
> > The motivation
> > > > > > > > > > > section
> > > > > > > > > > > > > > > states
> > > > > > > > > > > > > > > > > that
> > > > > > > > > > > > > > > > > > > "Connect does not provide a way to see
> > what
> > > > > > > > > configurations
> > > > > > > > > > > a
> > > > > > > > > > > > > > > > connector
> > > > > > > > > > > > > > > > > > > requires. Instead users have to go look
> > at the
> > > > > > > > > connector
> > > > > > > > > > > > > > > > documentation
> > > > > > > > > > > > > > > > > or
> > > > > > > > > > > > > > > > > > > in the worst case, look directly at the
> > connector
> > > > > > > > > source
> > > > > > > > > > > > > code.",
> > > > > > > > > > > > > > > and
> > > > > > > > > > > > > > > > > that
> > > > > > > > > > > > > > > > > > > with this KIP, "users will be able to
> > discover the
> > > > > > > > > required
> > > > > > > > > > > > > > > > > > configurations
> > > > > > > > > > > > > > > > > > > for connectors installed in a Connect
> > cluster" and
> > > > > > > > > "tools
> > > > > > > > > > > will
> > > > > > > > > > > > > be
> > > > > > > > > > > > > > > > able
> > > > > > > > > > > > > > > > > to
> > > > > > > > > > > > > > > > > > > generate wizards for configuring and
> > starting
> > > > > > > > > connectors".
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Does the existing "PUT
> > > > > > > > > > > > > > > > > >
> > /connector-plugins/{connector-type}/config/validate"
> > > > > > > > > > > > > > > > > > > endpoint not address these points? What
> > will the
> > > > > > > > > > > newly-proposed
> > > > > > > > > > > > > > > > > endpoint
> > > > > > > > > > > > > > > > > > > allow users to do that they will not
> > already be able
> > > > > > > > > to do
> > > > > > > > > > > > > with the
> > > > > > > > > > > > > > > > > > > existing endpoint?
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Cheers,
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > Chris
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > On Thu, Aug 19, 2021 at 9:20 AM Mickael
> > Maison <
> > > > > > > > > > > > > > > > > mickael.mai...@gmail.com
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Hi,
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > I've created KIP-769 to expose
> > connector
> > > > > > > > > configuration
> > > > > > > > > > > > > > > definitions
> > > > > > > > > > > > > > > > in
> > > > > > > > > > > > > > > > > > > > the Connect API
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-769%3A+Connect+API+to+retrieve+connector+configuration+definitions
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Please take a look and let me know if
> > you have any
> > > > > > > > > > > feedback.
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > Thanks
> > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > >
> >

Reply via email to