[ 
https://issues.apache.org/jira/browse/KAFKA-3690?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15279257#comment-15279257
 ] 

Ewen Cheslack-Postava commented on KAFKA-3690:
----------------------------------------------

Patch available here https://github.com/apache/kafka/pull/1360 thanks to 
[~liquanpei]. I want to discuss whether this is actually a blocker. The patch 
reveals that the issue is a bug in SchemaBuilder combined with a misuse of 
SchemaBuilder without having called build() to get the final immutable Schema 
out of it. However, as far as I can tell we will only currently hit this case 
if both a) SchemaBuilder is left "uncompiled" incorrectly and b) a Converter 
triggers the issue by calling Schema.parameters(). Right now we're seeing that 
triggered because KafkaConfigBackingStore (in previous release and current RC) 
are not compiling the schema, but only seeing it for this user because they are 
using JsonConverter with schemas *enabled*, which is *not* how we provide 
example configs although is (perhaps unfortunately) the default for 
JsonConverter. Someone using AvroConverter as the internal converter would hit 
the same issue as it *always* has to convert schemas and will always call that 
method.

I'm unsure of the exact impact here. The details of the internal schema 
management aren't *really* of concern to the user. Is advising users to use 
JsonConverter with flags to turn off the schema envelope a good enough 
solution? Most users wouldn't even think about swapping out the internal 
converters anyway, I suspect someone happened upon this issue just by paring 
down existing configs or trying to write a worker config entirely from scratch. 
Certainly for this user, who is on a previous version (not 0.10 RC), that will 
be the only solution unless they upgrade.

> Avoid passing null to UnmodifiableMap
> -------------------------------------
>
>                 Key: KAFKA-3690
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3690
>             Project: Kafka
>          Issue Type: Bug
>          Components: KafkaConnect
>    Affects Versions: 0.10.0.0
>            Reporter: Liquan Pei
>            Assignee: Liquan Pei
>             Fix For: 0.10.0.0
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> For some version of JDK, if we pass null to UnModifiableMap's constructor, an 
> NullPointerException will be thrown. 
> This is produced by 
> curl -X POST -H "Content-Type: application/json" --data '{"name": 
> "local-conscq!-source", "config": 
> {"connector.class":"org.apache.kafka.connect.file.FileStreamSourceConnector", 
> "tasks.max":"1", "topic":"connect-test" }}' http://localhost:8083/connectors
> 2016-05-09 12:36:03,974] INFO Starting connectors and tasks using config 
> offset -1 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:639)
> [2016-05-09 12:36:03,974] INFO Finished starting connectors and tasks 
> (org.apache.kafka.connect.runtime.distributed.DistributedHerder:659)
> [2016-05-09 12:36:42,691] WARN  (org.eclipse.jetty.servlet.ServletHandler:620)
> javax.servlet.ServletException: java.lang.NullPointerException
>       at 
> org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:487)
>       at 
> org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425)
>       at 
> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383)
>       at 
> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336)
>       at 
> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223)
>       at 
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)
>       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:310)
>       at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
>       at 
> org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
>       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)
> Caused by: java.lang.NullPointerException
>       at java.util.Collections$UnmodifiableMap.<init>(Collections.java:1446)
>       at java.util.Collections.unmodifiableMap(Collections.java:1433)
>       at 
> org.apache.kafka.connect.data.SchemaBuilder.parameters(SchemaBuilder.java:184)
>       at 
> org.apache.kafka.connect.json.JsonConverter.asJsonSchema(JsonConverter.java:415)
>       at 
> org.apache.kafka.connect.json.JsonConverter.asJsonSchema(JsonConverter.java:398)
>       at 
> org.apache.kafka.connect.json.JsonConverter.convertToJsonWithEnvelope(JsonConverter.java:551)
>       at 
> org.apache.kafka.connect.json.JsonConverter.fromConnectData(JsonConverter.java:305)
>       at 
> org.apache.kafka.connect.storage.KafkaConfigStorage.putConnectorConfig(KafkaConfigStorage.java:282)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder$4.call(DistributedHerder.java:428)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder$4.call(DistributedHerder.java:407)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:210)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:159)
>       ... 1 more
> [2016-05-09 12:36:42,694] INFO 127.0.0.1 - - [09/May/2016:19:36:42 +0000] 
> "POST /connectors HTTP/1.1" 500 294  133 
> (org.apache.kafka.connect.runtime.rest.RestServer:60)
> [2016-05-09 12:36:42,694] WARN /connectors 
> (org.eclipse.jetty.server.HttpChannel:395)
> javax.servlet.ServletException: javax.servlet.ServletException: 
> java.lang.NullPointerException
>       at 
> org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:130)
>       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:310)
>       at 
> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
>       at 
> org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
>       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)
> Caused by: javax.servlet.ServletException: java.lang.NullPointerException
>       at 
> org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:487)
>       at 
> org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425)
>       at 
> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383)
>       at 
> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336)
>       at 
> org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223)
>       at 
> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)
>       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)
>       ... 10 more
> Caused by: java.lang.NullPointerException
>       at java.util.Collections$UnmodifiableMap.<init>(Collections.java:1446)
>       at java.util.Collections.unmodifiableMap(Collections.java:1433)
>       at 
> org.apache.kafka.connect.data.SchemaBuilder.parameters(SchemaBuilder.java:184)
>       at 
> org.apache.kafka.connect.json.JsonConverter.asJsonSchema(JsonConverter.java:415)
>       at 
> org.apache.kafka.connect.json.JsonConverter.asJsonSchema(JsonConverter.java:398)
>       at 
> org.apache.kafka.connect.json.JsonConverter.convertToJsonWithEnvelope(JsonConverter.java:551)
>       at 
> org.apache.kafka.connect.json.JsonConverter.fromConnectData(JsonConverter.java:305)
>       at 
> org.apache.kafka.connect.storage.KafkaConfigStorage.putConnectorConfig(KafkaConfigStorage.java:282)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder$4.call(DistributedHerder.java:428)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder$4.call(DistributedHerder.java:407)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:210)
>       at 
> org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:159)
>       ... 1 more
> [2016-05-09 12:36:42,696] WARN Could not send response error 500: 
> javax.servlet.ServletException: javax.servlet.ServletException: 
> java.lang.NullPointerException (org.eclipse.jetty.server.HttpChannel:481) 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to