[ 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