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 >> > > >> >> > > > >> > > >> >> > > >> > > >> >> > >> > > >> >> >> > > >> > >> > > >> > >> > > >> >> > > > >> > > > >> > > >> > >> > >