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

David Capwell commented on CASSANDRA-21551:
-------------------------------------------

Making CASSANDRA-21502 as duplicating this one even though it's older; main 
reason was that one was in triage with a closed patch, so added Alan as a 
author to this work, got his approval, and using this one to merge

> Accord: DefaultLocalListeners.remove adds nulls which then leads to NPE when 
> .clear gets called
> -----------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-21551
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21551
>             Project: Apache Cassandra
>          Issue Type: Bug
>          Components: Accord
>            Reporter: David Capwell
>            Assignee: David Capwell
>            Priority: Normal
>             Fix For: NA
>
>          Time Spent: 1h
>  Remaining Estimate: 0h
>
> This was found by Cassandra test 
> org.apache.cassandra.service.accord.journal.AccordJournalBurnTest.testOne
> {code}
> Failed on seed 3395908238430601
> accord.burn.SimulationException: Failed on seed 3395908238430601
> Caused by: java.lang.NullPointerException
>       at 
> accord.impl.DefaultLocalListeners.lambda$clear$4(DefaultLocalListeners.java:562)
>       at 
> java.base/java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1603)
>       at 
> accord.impl.DefaultLocalListeners.clear(DefaultLocalListeners.java:556)
>       at 
> accord.local.CommandStore.unsafeClearForTesting(CommandStore.java:214)
>       at 
> accord.impl.InMemoryCommandStore.unsafeClearForTesting(InMemoryCommandStore.java:1227)
>       at accord.impl.basic.Cluster.lambda$run$27(Cluster.java:774)
>       at 
> accord.impl.basic.RecurringPendingRunnable.run(RecurringPendingRunnable.java:57)
>       at accord.impl.basic.Cluster.processNext(Cluster.java:339)
>       at accord.impl.basic.Cluster.processPending(Cluster.java:291)
>       at accord.impl.basic.Cluster.run(Cluster.java:836)
>       at accord.burn.BurnTestBase.burn(BurnTestBase.java:581)
>       at 
> org.apache.cassandra.service.accord.journal.AccordJournalBurnTest.testOne(AccordJournalBurnTest.java:191)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>       at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> {code}
> The root cause is that when the listeners are removed we add a null in its 
> place, but the clear method doesn’t handle that and NPE
> Code for remove:
> {code}
>            listeners[index] = null;
> {code}
> Code for clear:
> {code}
> listeners.listeners[i].index = -1;
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to