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

Phil Hargett commented on KAFKA-686:
------------------------------------

While, yes, the original issue is unaddressed, there is a lurking bug in 
ZkUtils: a null pointer is getting wrapped in Some when it shouldn't--it's 
misleading.  The callers of this ZkUtils method even expect that None could be 
returned, so there is no need to mishandle null.  To be fair, the method could 
probably be named readDataMaybeNone, but who am I to quibble. :)

It would seem like a higher-order check for 0.8 vs. 0.7 Zookeeper data is in 
order.  That is, perhaps on startup Kafka should check the state of Zookeeper 
data, and report an error/warning at that time.  Low-level APIs like this 
shouldn't necessarily have to worry about version mismatch; it could be 
expensive if they did. Relying upon a misleading exception 
(NullPointerException) rather than something that specifically diagnoses the 
issue would seem an incorrect choice.

That's my $.02 after having only spent ~2 days in this code, but hope this 
helps. :)
                
> 0.8 Kafka broker should give a better error message when running against 0.7 
> zookeeper
> --------------------------------------------------------------------------------------
>
>                 Key: KAFKA-686
>                 URL: https://issues.apache.org/jira/browse/KAFKA-686
>             Project: Kafka
>          Issue Type: Bug
>    Affects Versions: 0.8
>            Reporter: Jay Kreps
>            Priority: Blocker
>              Labels: newbie, patch
>             Fix For: 0.8
>
>         Attachments: KAFAK-686-null-pointer-fix.patch
>
>
> People will not know that the zookeeper paths are not compatible. When you 
> try to start the 0.8 broker pointed at a 0.7 zookeeper you get a 
> NullPointerException. We should detect this and give a more sane error.
> Error:
> kafka.common.KafkaException: Can't parse json string: null
>         at kafka.utils.Json$.liftedTree1$1(Json.scala:20)
>         at kafka.utils.Json$.parseFull(Json.scala:16)
>         at 
> kafka.utils.ZkUtils$$anonfun$getReplicaAssignmentForTopics$2.apply(ZkUtils.scala:498)
>         at 
> kafka.utils.ZkUtils$$anonfun$getReplicaAssignmentForTopics$2.apply(ZkUtils.scala:494)
>         at 
> scala.collection.LinearSeqOptimized$class.foreach(LinearSeqOptimized.scala:61)
>         at scala.collection.immutable.List.foreach(List.scala:45)
>         at 
> kafka.utils.ZkUtils$.getReplicaAssignmentForTopics(ZkUtils.scala:494)
>         at 
> kafka.controller.KafkaController.initializeControllerContext(KafkaController.scala:446)
>         at 
> kafka.controller.KafkaController.onControllerFailover(KafkaController.scala:220)
>         at 
> kafka.controller.KafkaController$$anonfun$1.apply$mcV$sp(KafkaController.scala:85)
>         at 
> kafka.server.ZookeeperLeaderElector.elect(ZookeeperLeaderElector.scala:53)
>         at 
> kafka.server.ZookeeperLeaderElector.startup(ZookeeperLeaderElector.scala:43)
>         at kafka.controller.KafkaController.startup(KafkaController.scala:381)
>         at kafka.server.KafkaServer.startup(KafkaServer.scala:90)
>         at 
> kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:34)
>         at kafka.Kafka$.main(Kafka.scala:46)
>         at kafka.Kafka.main(Kafka.scala)
> Caused by: java.lang.NullPointerException
>         at 
> scala.util.parsing.combinator.lexical.Scanners$Scanner.<init>(Scanners.scala:52)
>         at scala.util.parsing.json.JSON$.parseRaw(JSON.scala:71)
>         at scala.util.parsing.json.JSON$.parseFull(JSON.scala:85)
>         at kafka.utils.Json$.liftedTree1$1(Json.scala:17)
>         ... 16 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to