[
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