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

Viktor Taranenko commented on KAFKA-686:
----------------------------------------

[~nehanarkhede], It is not 'failAsValue' what solves the problem, but wrapping 
potential null value into scala Option instead if Some.

failAsValue only shortens code for catching ZkNoNodeException and returning 
None of it occurs

{noformat}
failAsValue(classOf[ZkNoNodeException])(None)(Option(client.readData(path, 
stat)))
{noformat}
- returns 'None' when client.readData throws ZkNoNodeException (doesn't catch 
any other kind of Exception from client.readData)
- returns 'None' when client.readData returns null
- returns 'Some(value)' when client.readData returns string value

The original code had `Some(client.readData)`, which returns Some(null), so 
that for example

`Some(null).map(_.length)` would throw NullPointerException


> 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.0
>            Reporter: Jay Kreps
>              Labels: newbie, patch
>             Fix For: 0.8.2
>
>         Attachments: KAFAK-686-null-pointer-fix.patch, 
> KAFKA-686-null-pointer-fix-2.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 was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to