[ https://issues.apache.org/jira/browse/KAFKA-4017?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15407746#comment-15407746 ]
Dustin Cote commented on KAFKA-4017: ------------------------------------ [~ewencp] yeah that's right. Super easy to reproduce as well, just try to submit a connector with a bad config syntactically. The actual curl I presented was: {code} curl -X POST -H "Content-Type: application/json" --data '{"name": "local-console-source", "config": {"connector.class":"org.apache.kafka.connect.file.FileStreamSourceConnector", "tasks.max":"1", "topic"="connect-test" }}' http://localhost:8083/connectors {code} > Return more helpful responses when misconfigured connectors are submitted > ------------------------------------------------------------------------- > > Key: KAFKA-4017 > URL: https://issues.apache.org/jira/browse/KAFKA-4017 > Project: Kafka > Issue Type: Improvement > Components: KafkaConnect > Affects Versions: 0.10.0.0 > Reporter: Dustin Cote > Assignee: Ewen Cheslack-Postava > > Currently if a user submits a connector with a malformed configuration with > connect in distributed mode, the response is: > {code} > <html> > <head> > <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/> > <title>Error 500 </title> > </head> > <body> > <h2>HTTP ERROR: 500</h2> > <p>Problem accessing /connectors. Reason: > <pre> Request failed.</pre></p> > <hr /><i><small>Powered by Jetty://</small></i> > </body> > </html> > {code} > If the user decides to then go look at the connect server side logging, they > can maybe parse the stack traces to find out what happened, but are at first > greeted by: > {code} > [2016-08-03 16:14:07,797] WARN /connectors > (org.eclipse.jetty.server.HttpChannel:384) > java.lang.NoSuchMethodError: > javax.servlet.http.HttpServletRequest.isAsyncStarted()Z > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:684) > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) > at > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) > at > org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) > at org.eclipse.jetty.server.Server.handle(Server.java:499) > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) > at > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) > at > org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) > at > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) > at java.lang.Thread.run(Thread.java:745) > {code} > It would be better if Connect can handle this scenario more gracefully and > make it more clear what the problem is even directly to the client. In the > example above, you can eventually locate the problem in the server logs as: > {code} > [2016-08-03 16:14:07,795] WARN (org.eclipse.jetty.servlet.ServletHandler:620) > javax.servlet.ServletException: > org.glassfish.jersey.server.ContainerException: > com.fasterxml.jackson.databind.JsonMappingException: Unexpected character > ('=' (code 61)): was expecting a colon to separate field name and value > at [Source: > org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@20fb9cff; > line: 1, column: 147] (through reference chain: > org.apache.kafka.connect.runtime.rest.entities.CreateConnectorRequest["config"]) > at > org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489) > at > org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) > at > org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) > at > org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) > at > org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) > at > org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) > at > org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587) > at > org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) > at > org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) > at > org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) > at > org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) > at > org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) > at > org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) > at > org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) > at > org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) > at > org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) > at org.eclipse.jetty.server.Server.handle(Server.java:499) > at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) > at > org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) > at > org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) > at > org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) > at > org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) > at java.lang.Thread.run(Thread.java:745) > {code} > The {quote} Unexpected character ('=' (code 61)): was expecting a colon to > separate field name and value {quote} should be what the client responds with > and a better error code than 500 which implies an internal server error. A > 400 code would be more appropriate. -- This message was sent by Atlassian JIRA (v6.3.4#6332)