Hi,

regarding "breaking existing functionality" .. yes...that was me getting
confused about intended and existing functionality :)
You are right, this won't break anything that is currently working.

I'll leave placement of "name" parameter as is and open a new issue to
clarify this later on.

Kind regards,
Sönke

On Wed, Jul 5, 2017 at 5:41 AM, Gwen Shapira <g...@confluent.io> wrote:

> Hey,
>
> Nice research and summary.
>
> Regarding the ability to have a "nameless" connector - I'm pretty sure we
> never intended to allow that.
> I'm confused about breaking something that currently works though - since
> we get NPE, how will giving more intentional exceptions break anything?
>
> Regarding the placing of the name - inside or outside the config. It looks
> messy and I'm as confused as you are. I think Konstantine had some ideas
> how this should be resolved. I hope he responds, but I think that for your
> PR, just accept current mess as given...
>
> Gwen
>
> On Tue, Jul 4, 2017 at 3:28 AM Sönke Liebau
> <soenke.lie...@opencore.com.invalid> wrote:
>
> > While working on KAFKA-4930 and KAFKA-4938 I came across some sort of
> > fundamental questions about the rest api for creating connectors in Kafka
> > Connect that I'd like to put up for discussion.
> >
> > Currently requests that do not contain a "name" element on the top level
> > are not accepted by the API, but that is due to a NullPointerException
> [1]
> > so not entirely intentional. Previous (and current if the lines causing
> the
> > Exception are removed) functionality was to create a connector named
> "null"
> > if that parameter was missing. I am not sure if this is a good thing, as
> > for example that connector will be overwritten every time a new request
> > without a name is sent, as opposed to the expected warning that a
> connector
> > of that name already exists.
> >
> > I would propose to reject api calls without a name provided on the top
> > level, but this might break requests that currently work, so should
> > probably be mentioned in the release notes.
> >
> > ----
> >
> > Additionally, the "name" parameter is also copied into the "config"
> > sub-element of the connector request - unless a name parameter was
> provided
> > there in the original request[2].
> >
> > So this:
> >
> > {
> >   "name": "connectorname",
> >   "config": {
> >     "connector.class":
> > "org.apache.kafka.connect.tools.MockSourceConnector",
> >     "tasks.max": "1",
> >     "topics": "test-topic"
> >   }
> > }
> >
> > would become this:
> > {
> >   "name": "connectorname",
> >   "config": {
> >     "name": "connectorname",
> >     "connector.class":
> > "org.apache.kafka.connect.tools.MockSourceConnector",
> >     "tasks.max": "1",
> >     "topics": "test-topic"
> >   }
> > }
> >
> > But a request that contains two different names like this:
> >
> >  {
> >   "name": "connectorname",
> >   "config": {
> >     "name": "differentconnectorname",
> >     "connector.class":
> > "org.apache.kafka.connect.tools.MockSourceConnector",
> >     "tasks.max": "1",
> >     "topics": "test-topic"
> >   }
> > }
> >
> > would be allowed as is.
> >
> > This might be intentional behavior in order to enable Connectors to have
> a
> > "name" parameter of their own - though I couldn't find any that do, but I
> > think this has the potential for misunderstandings, especially as there
> may
> > be code out there that references the connector name from the config
> object
> > and would thus grab the "wrong" one.
> >
> > Again, this may be intentional, so I am mostly looking for comments on
> how
> > to proceed here.
> >
> > My first instinct is to make the top-level "name" parameter mandatory as
> > suggested above and then add a check to reject requests that contain a
> > different "name" field in the config element.
> >
> > Any comments or thoughts welcome.
> >
> > TL/DR:
> > Two questions up for discussion:
> > 1. Should we reject api calls to create a connector that do not contain a
> > "name" element on the top level?
> > 2. Is there a use case where it makes sense to have different "name"
> > elements in the connector config and as the connector name?
> >
> > Kind regards,
> > Sönke
> >
> > [1] https://github.com/apache/kafka/blob/trunk/connect/
> > runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/
> > ConnectorsResource.java#L91
> >
> > [2] https://github.com/apache/kafka/blob/trunk/connect/
> > runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/
> > ConnectorsResource.java#L96
> >
>



-- 
Sönke Liebau
Partner
Tel. +49 179 7940878
OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - Germany

Reply via email to