On Thu, Apr 12, 2018 at 10:59 AM, Magesh Nandakumar <mage...@confluent.io>
wrote:

> Hi Randall,
>
> Thanks a lot for your feedback.
>
> I will update the KIP to reflect your comments in (1), (2), (7) and (8).
>

Looking forward to these.


>
> For comment # (3) , while it would be great to automatically configure the
> Rest Extensions, I would prefer that to be specified explicitly. Lets
> assume a connector archive includes a implementation for the RestExtension
> to do authentication using some header. We don't want this to be
> automatically included. Having said that I think that the config key name
> should probably be changed to something like "rest.extension" or
> "rest.extension.class".
>

That's a good point. I do like `rest.extension.class` (or `..classes`?)
much more than `rest.plugins`.


>
> For the comment regarding the resource loading into jersey, I have the
> following proposal
>
> Create an implementation of Configurable(
> https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Configurable.html)
> that delegates to ResourceConfig. In the ConnectRestExtension, we would
> expose only Configurable which is sufficient enough to register new
> resources. In the new implementation, we will check if the resource is
> already registered using ResourceConfig.isRegistered() method and log a
> warning if the resource is already registered. This will make it a
> deterministic behavior and avoid any potential re-registrations. Let me
> know your thoughts on these.
>

This sounds a good idea. Is it as flexible as the current proposal? If not,
then I'd love to see how this affects the public APIs.


>
> Thanks
> Magesh
>
>
> On Wed, Apr 11, 2018 at 10:06 AM, Randall Hauch <rha...@gmail.com> wrote:
>
> > Very nice proposal, Magesh. I like the approach and the new concepts and
> > interfaces, but I do have a few comments/suggestions about some specific
> > details:
> >
> >    1. In the "Motivation" section, perhaps it makes sense to briefly
> >    describe one or two somewhat concrete examples of how this is useful.
> >    2. Maybe in the "Public Interfaces" section you could briefly describe
> >    each of the interfaces, what they represent, and which are implemented
> > by
> >    the framework vs implemented by an extension. I think it'd help to
> > explain
> >    that only the `ConnectRestPlugin` needs to be implemented, and the
> rest
> >    will be provided by the framework. I know the next section goes into
> it
> > a
> >    bit, but it'd be useful in this section when first talking about the
> new
> >    interfaces.
> >    3. Also in the "Public Interfaces" section: I don't think we should
> >    introduce a "rest.plugins" configuration property. Instead, can we not
> > just
> >    instantiate and call all of the ConnectRestPlugins that we find on the
> >    plugin path? Besides, it seems too close to the `plugin.path`
> > configuration
> >    property.
> >    4. Why would the implementation register Connect resources *after* the
> >    plugins, if Jersey currently registers only the first one? The
> "Rejected
> >    Alternatives" mentions why, but this section should be explicit about
> > why.
> >    For example, "The plugin's would be registered in the
> >    RestServer.start(Herder herder) method before registering the default
> >    Connect resources, which ensures that plugins cannot remove Connect
> >    resources."
> >    5. "Hence, it is recommended that the plugins don't re-register the
> >    default Connect Resources. This could potentially lead to unexpected
> >    errors." First, we should not say "recommended" and should just say
> > plugins
> >    should not register any resources that conflict with the built-in
> > Connect
> >    resources. Second, if the worker does find conflicts, can we just
> remove
> >    them before adding the built-in Connect resources?
> >    6. Is it possible for implementations to check whether resources
> already
> >    exist before registering their own? If so, we should recommend that
> >    implementations do this and log any problems.
> >    7. We should be explicit that the "Service Provider" is Java's Service
> >    Provider API. We also need to be explicit that an implementation must
> >    provide a `META-INF/services/org.apache.kafka.connect.
> > ConnectRestPlugin`
> >    file (or whatever the package name of the `ConnectRestPlugin` will be)
> > with
> >    the fully-qualified name of the implementation class(es).
> >    8. The example should include the META-INF file required by the
> Service
> >    Provider API.
> >
> > Again, overall this is really great!
> >
> > Best regards,
> >
> > Randall
> >
> > On Wed, Apr 11, 2018 at 12:14 AM, Magesh Nandakumar <
> mage...@confluent.io>
> > wrote:
> >
> > > Hi,
> > >
> > > We have posted KIP-285: Connect Rest Extension Plugin to add the
> ability
> > to
> > > provide Rest Extensions to Connect Rest API.
> > >
> > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > > 285%3A+Connect+Rest+Extension+Plugin
> > >
> > > Please take a look. Your feedback is appreciated.
> > >
> > > Thanks,
> > >
> > > Magesh
> > >
> >
>

Reply via email to