Yup, thanks for the changes. The 'health' package in particular feels like a nice fit given the way we expect it to be used.
-Ewen On Wed, May 16, 2018 at 7:02 PM Randall Hauch <rha...@gmail.com> wrote: > Looks good to me. Thanks for quickly making the changes! Great work! > > Best regards, > > Randall > > > On May 16, 2018, at 8:07 PM, Magesh Nandakumar <mage...@confluent.io> > wrote: > > > > Randall, > > > > I have adjusted the package names per Ewen's suggestions and also made > some > > minor edits per your suggestions. Since there are no major outstanding > > issues, i'm moving this to vote. > > > > Thanks > > Magesh > > > >> On Wed, May 16, 2018 at 4:38 PM, Randall Hauch <rha...@gmail.com> > wrote: > >> > >> A few very minor suggestions: > >> > >> > >> 1. There are a few formatting issues with paragraphs that use a > >> monospace font. Minor, but it would be nice to fix. > >> 2. Would be nice to link to the PR > >> 3. Do we need the org.apache.kafka.connect.rest.extension.entities > >> package? Could we just move the two classes into the parent > >> org.apache.kafka.connect.rest.extension package? > >> 4. This sentence "The above approach helps alleviate any issues that > >> could arise if Extension accidentally reregister the" is cut off. > >> 5. The "ConnectRestExtensionContext.configure(...)" method's JavaDoc > >> should describe the behaviors that are mentioned in the "Rest > Extension > >> Integration with Connect" section; e.g., behavior when an extension > >> adds a > >> resource that is already registered, whether unregistering works, etc. > >> Also, ideally the "close()" method would have JavaDoc that explained > >> when > >> it is called (e.g., no other methods will be called on the extension > >> after > >> this, etc.). > >> 6. Packaging requirements are different for this component vs > >> connectors, transformations, and converters, since this now mandates > the > >> Service Loader manifest file. This should be called out more > explicitly. > >> 7. It'd be nice if the example included how extension-specific config > >> properties are to be defined in the worker configuration file. > >> > >> As I said, these are all minor suggestions that only affect the KIP > >> document. Once these are fixed, I think this is ready to move to voting. > >> > >> Best regards, > >> > >> Randall > >> > >> On Tue, May 15, 2018 at 11:30 AM, Magesh Nandakumar < > mage...@confluent.io> > >> wrote: > >> > >>> Randall- I think I have addressed all the comments. Let me know if we > can > >>> take this to Vote. > >>> > >>> Thanks > >>> Magesh > >>> > >>> On Tue, May 8, 2018 at 10:12 PM, Magesh Nandakumar < > mage...@confluent.io > >>> > >>> wrote: > >>> > >>>> Hi All, > >>>> > >>>> I have updated the KIP to reflect changes based on the PR > >>>> https://github.com/apache/kafka/pull/4931. Its mostly has minor > >> changes > >>>> to the interfaces and includes details on packages for the interfaces > >> and > >>>> the classes. Let me know your thoughts. > >>>> > >>>> Thanks > >>>> Magesh > >>>> > >>>> On Fri, Apr 27, 2018 at 12:03 PM, Randall Hauch <rha...@gmail.com> > >>> wrote: > >>>> > >>>>> Great work, Magesh. I like the overall approach a lot, so I left some > >>>>> pretty nuanced comments about specific details. > >>>>> > >>>>> Best regards, > >>>>> > >>>>> Randall > >>>>> > >>>>> On Wed, Apr 25, 2018 at 3:03 PM, Magesh Nandakumar < > >>> mage...@confluent.io> > >>>>> wrote: > >>>>> > >>>>>> Thanks Randall for your thoughts. I have created a replica of the > >>>>> required > >>>>>> entities in the draft implementation. If you can take a look at the > >> PR > >>>>> and > >>>>>> let me know your thoughts, I will update the KIP to reflect the same > >>>>>> > >>>>>> https://github.com/apache/kafka/pull/4931 > >>>>>> > >>>>>> On Tue, Apr 24, 2018 at 11:44 AM, Randall Hauch <rha...@gmail.com> > >>>>> wrote: > >>>>>> > >>>>>>> Magesh, I think our last emails cross in mid-stream. > >>>>>>> > >>>>>>> We definitely want to put the new public interfaces/classes in the > >>> API > >>>>>>> module, and implementation in the runtime module. Yes, this will > >>>>> affect > >>>>>> the > >>>>>>> design, since for example we don't want to expose runtime types to > >>> the > >>>>>> API, > >>>>>>> and we want to prevent breaking changes. We don't really want to > >>> move > >>>>> the > >>>>>>> REST entities if we don't have to, since that may break projects > >>> that > >>>>> are > >>>>>>> extending the runtime module -- even though the runtime module is > >>> not > >>>>> a > >>>>>>> public API we still want to _try_ to change things. > >>>>>>> > >>>>>>> Do you want to try to create a prototype to see what kind of > >> impact > >>>>> and > >>>>>>> choices we'll have to make? > >>>>>>> > >>>>>>> Best regards, > >>>>>>> > >>>>>>> Randall > >>>>>>> > >>>>>>> On Tue, Apr 24, 2018 at 12:48 PM, Randall Hauch <rha...@gmail.com > >>> > >>>>>> wrote: > >>>>>>> > >>>>>>>> Thanks for updating the KIP, Magesh. You've resolved all of my > >>>>>> concerns, > >>>>>>>> though I have one more: we should specify the package names for > >>> all > >>>>> new > >>>>>>>> interfaces/classes. > >>>>>>>> > >>>>>>>> I'm looking forward to more feedback from others. > >>>>>>>> > >>>>>>>> Best regards, > >>>>>>>> > >>>>>>>> Randall > >>>>>>>> > >>>>>>>> On Fri, Apr 20, 2018 at 12:17 AM, Magesh Nandakumar < > >>>>>>> mage...@confluent.io> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Hi All, > >>>>>>>>> > >>>>>>>>> I have updated the KIP with following changes > >>>>>>>>> > >>>>>>>>> 1. Expanded the Motivation section > >>>>>>>>> 2. Included details about the interface in the public > >>> interface > >>>>>>> section > >>>>>>>>> 3. Modified the config name to rest.extension.classes > >>>>>>>>> 4. Modified the ConnectRestExtension to include Configurable > >>>>>> instead > >>>>>>> of > >>>>>>>>> ResourceConfig > >>>>>>>>> 5. Modified the "Rest Extension Integration with Connect" in > >>>>>>> "Proposed > >>>>>>>>> Approach" to include a new Custom implementation for > >>>>> Configurable > >>>>>>>>> 6. Provided examples for the Java Service provider mechanism > >>>>>>>>> 7. Included a reference implementation in scope > >>>>>>>>> > >>>>>>>>> Kindly let me know your thoughts on the updates. > >>>>>>>>> > >>>>>>>>> Thanks > >>>>>>>>> Magesh > >>>>>>>>> > >>>>>>>>> On Thu, Apr 19, 2018 at 10:39 AM, Magesh Nandakumar < > >>>>>>> mage...@confluent.io > >>>>>>>>>> > >>>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>>> Hi Randall, > >>>>>>>>>> > >>>>>>>>>> Thanks for your feedback. I also would like to go with > >>>>>>>>>> rest.extension.classes`. > >>>>>>>>>> > >>>>>>>>>> For exposing Configurable, my original intention was just to > >>>>> expose > >>>>>>> that > >>>>>>>>>> to the extension because that's all one needs to register JAX > >>> RS > >>>>>>>>> resources. > >>>>>>>>>> The fact that we use Jersey shouldn't even be exposed in the > >>>>>>> interface. > >>>>>>>>>> Hence it doesn't affect the public API by any means. > >>>>>>>>>> > >>>>>>>>>> I will update the KIP and let everyone know. > >>>>>>>>>> > >>>>>>>>>> Thanks > >>>>>>>>>> Magesh > >>>>>>>>>> > >>>>>>>>>> On Thu, Apr 19, 2018 at 9:51 AM, Randall Hauch < > >>> rha...@gmail.com > >>>>>> > >>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>>> 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/ > >>> Config > >>>>>>>>> urable.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 > >>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >>>> > >>> > >> >