[ https://issues.apache.org/jira/browse/CASSANDRA-10089?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15002948#comment-15002948 ]
Joel Knighton commented on CASSANDRA-10089: ------------------------------------------- Sorry for missing this in review - it looks like the applied patch could result in a NPE (found by Coverity). On this line in [getStateForVersionBiggerThan|https://github.com/apache/cassandra/blob/7d6dbf897cd14e6c5811a0588f25e5c11385a9fd/src/java/org/apache/cassandra/gms/Gossiper.java], we try to put a list of new states in reqdEndpointState. In the event that we're getting state for an endpoint that has a lower local heartbeat version and no states for the endpoint/lower application states values for all values in the EndpointState's ApplicationState map, reqdEndpointState will be null. That said, in practice, {{getStateForVersionBiggerThan}} is only called in {{GossipDigestAckVerbHandler}} for endpoints corresponding to a {{GossipDigest}} in the {{GossipDigestAck}} message, and digests are only included in the {{GossipDigestAck}} message if either the remote heartbeat version or some application state has a higher value than the provided version. Because of this, under no situation should reqdEndpointState be null at the time of adding application states. I'm still in favor of guarding this with a null check, but a patch is not of critical importance. What do you think [~Stefania]? > NullPointerException in Gossip handleStateNormal > ------------------------------------------------ > > Key: CASSANDRA-10089 > URL: https://issues.apache.org/jira/browse/CASSANDRA-10089 > Project: Cassandra > Issue Type: Bug > Reporter: Stefania > Assignee: Stefania > Fix For: 2.1.12, 2.2.4, 3.0.1, 3.1 > > Attachments: node1_debug.log, node2_debug.log, node3_debug.log > > > Whilst comparing dtests for CASSANDRA-9970 I found [this failing > dtest|http://cassci.datastax.com/view/Dev/view/blerer/job/blerer-9970-dtest/lastCompletedBuild/testReport/consistency_test/TestConsistency/short_read_test/] > in 2.2: > {code} > Unexpected error in node1 node log: ['ERROR [GossipStage:1] 2015-08-14 > 15:39:57,873 CassandraDaemon.java:183 - Exception in thread > Thread[GossipStage:1,5,main] java.lang.NullPointerException: null \tat > org.apache.cassandra.service.StorageService.getApplicationStateValue(StorageService.java:1731) > ~[main/:na] \tat > org.apache.cassandra.service.StorageService.getTokensFor(StorageService.java:1804) > ~[main/:na] \tat > org.apache.cassandra.service.StorageService.handleStateNormal(StorageService.java:1857) > ~[main/:na] \tat > org.apache.cassandra.service.StorageService.onChange(StorageService.java:1629) > ~[main/:na] \tat > org.apache.cassandra.service.StorageService.onJoin(StorageService.java:2312) > ~[main/:na] \tat > org.apache.cassandra.gms.Gossiper.handleMajorStateChange(Gossiper.java:1025) > ~[main/:na] \tat > org.apache.cassandra.gms.Gossiper.applyStateLocally(Gossiper.java:1106) > ~[main/:na] \tat > org.apache.cassandra.gms.GossipDigestAck2VerbHandler.doVerb(GossipDigestAck2VerbHandler.java:49) > ~[main/:na] \tat > org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:66) > ~[main/:na] \tat > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > ~[na:1.7.0_80] \tat > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > ~[na:1.7.0_80] \tat java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_80]'] > {code} > I wasn't able to find it on unpatched branches but it is clearly not related > to CASSANDRA-9970, if anything it could have been a side effect of > CASSANDRA-9871. -- This message was sent by Atlassian JIRA (v6.3.4#6332)