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

Grant Henke commented on KAFKA-3088:
------------------------------------

I have written a basic unit test that sends a produce request with an null 
client-id in order to start fixing this issue, but I have found that the 
behavior is different between 0.8.2, 0.9.0, and trunk. The error messages and 
explanations are below:

*0.8.2:* No issue.
*0.9.0:* Parses the message fine, but the resulting null causes issues:
{code}
[2016-02-02 22:46:25,230] ERROR [KafkaApi-1] error when handling request Name: 
ProducerRequest; Version: 1; CorrelationId: -1; ClientId: null; RequiredAcks: 
-1; AckTimeoutMs: 10000 ms; TopicAndPartition:  (kafka.server.KafkaApis:103)
java.lang.NullPointerException
        at 
org.apache.kafka.common.metrics.JmxReporter.getMBeanName(JmxReporter.java:127)
        at 
org.apache.kafka.common.metrics.JmxReporter.addAttribute(JmxReporter.java:106)
        at 
org.apache.kafka.common.metrics.JmxReporter.metricChange(JmxReporter.java:76)
        at 
org.apache.kafka.common.metrics.Metrics.registerMetric(Metrics.java:288)
        at org.apache.kafka.common.metrics.Sensor.add(Sensor.java:177)
        at org.apache.kafka.common.metrics.Sensor.add(Sensor.java:162)
        at 
kafka.server.ClientQuotaManager.getOrCreateQuotaSensors(ClientQuotaManager.scala:209)
        at 
kafka.server.ClientQuotaManager.recordAndMaybeThrottle(ClientQuotaManager.scala:111)
        at 
kafka.server.KafkaApis.kafka$server$KafkaApis$$sendResponseCallback$2(KafkaApis.scala:354)
        at kafka.server.KafkaApis.handleProducerRequest(KafkaApis.scala:360)
        at kafka.server.KafkaApis.handle(KafkaApis.scala:68)
        at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
        at java.lang.Thread.run(Thread.java:745)
{code}
*trunk:* Uses the new o.a.k requests since KAFKA-2071. Null is not allowed in 
client_id, therefore does not parse:
{code}
[2016-02-02 22:53:25,745] ERROR Closing socket for 
127.0.0.1:57399-127.0.0.1:57400 because of error (kafka.network.Processor:103)
org.apache.kafka.common.protocol.types.SchemaException: Error reading field 
'client_id': java.lang.NegativeArraySizeException
        at org.apache.kafka.common.protocol.types.Schema.read(Schema.java:73)
        at 
org.apache.kafka.common.requests.RequestHeader.parse(RequestHeader.java:80)
        at kafka.network.RequestChannel$Request.<init>(RequestChannel.scala:82)
        at kafka.network.Processor$$anonfun$run$11.apply(SocketServer.scala:426)
        at kafka.network.Processor$$anonfun$run$11.apply(SocketServer.scala:421)
        at scala.collection.Iterator$class.foreach(Iterator.scala:727)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
        at kafka.network.Processor.run(SocketServer.scala:421)
        at java.lang.Thread.run(Thread.java:745)
{code}

Based on those findings I want to open the question: 
*In trunk do we want to change the o.a.k protocol to support a nullable string 
and allow client_id to be nullable?* It looks like there was clear intention to 
have it required based on how the protocol is defined. This is simple to do and 
it was recently done for byte arrays in KAFKA-2695. The answer for how to 
handle trunk should help drive the solution for 0.9.0.

*Note:* I will also ad tests for other "malformed' requests as part of this 
fix/patch.

> 0.9.0.0 broker crash on receipt of produce request with empty client ID
> -----------------------------------------------------------------------
>
>                 Key: KAFKA-3088
>                 URL: https://issues.apache.org/jira/browse/KAFKA-3088
>             Project: Kafka
>          Issue Type: Bug
>          Components: producer 
>    Affects Versions: 0.9.0.0
>            Reporter: Dave Peterson
>            Assignee: Grant Henke
>
> Sending a produce request with an empty client ID to a 0.9.0.0 broker causes 
> the broker to crash as shown below.  More details can be found in the 
> following email thread:
> http://mail-archives.apache.org/mod_mbox/kafka-users/201601.mbox/%3c5693ecd9.4050...@dspeterson.com%3e
>    [2016-01-10 23:03:44,957] ERROR [KafkaApi-3] error when handling request 
> Name: ProducerRequest; Version: 0; CorrelationId: 1; ClientId: null; 
> RequiredAcks: 1; AckTimeoutMs: 10000 ms; TopicAndPartition: [topic_1,3] -> 37 
> (kafka.server.KafkaApis)
>    java.lang.NullPointerException
>           at 
> org.apache.kafka.common.metrics.JmxReporter.getMBeanName(JmxReporter.java:127)
>           at 
> org.apache.kafka.common.metrics.JmxReporter.addAttribute(JmxReporter.java:106)
>           at 
> org.apache.kafka.common.metrics.JmxReporter.metricChange(JmxReporter.java:76)
>           at 
> org.apache.kafka.common.metrics.Metrics.registerMetric(Metrics.java:288)
>           at org.apache.kafka.common.metrics.Sensor.add(Sensor.java:177)
>           at org.apache.kafka.common.metrics.Sensor.add(Sensor.java:162)
>           at 
> kafka.server.ClientQuotaManager.getOrCreateQuotaSensors(ClientQuotaManager.scala:209)
>           at 
> kafka.server.ClientQuotaManager.recordAndMaybeThrottle(ClientQuotaManager.scala:111)
>           at 
> kafka.server.KafkaApis.kafka$server$KafkaApis$$sendResponseCallback$2(KafkaApis.scala:353)
>           at 
> kafka.server.KafkaApis$$anonfun$handleProducerRequest$1.apply(KafkaApis.scala:371)
>           at 
> kafka.server.KafkaApis$$anonfun$handleProducerRequest$1.apply(KafkaApis.scala:371)
>           at 
> kafka.server.ReplicaManager.appendMessages(ReplicaManager.scala:348)
>           at kafka.server.KafkaApis.handleProducerRequest(KafkaApis.scala:366)
>           at kafka.server.KafkaApis.handle(KafkaApis.scala:68)
>           at 
> kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:60)
>           at java.lang.Thread.run(Thread.java:745)



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

Reply via email to