[ 
https://issues.apache.org/jira/browse/CASSANDRA-3655?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jonathan Ellis updated CASSANDRA-3655:
--------------------------------------

    Attachment: 3655.txt

The stacktrace indicates that either the controller or the cf parameters have 
to be null.  (key being null would NOT cause this exception.)

Controller is always initialized to non-null except in one place in the 
Streaming code which should be irrelevant here.  And cf comes from merge(rows) 
which should also return non-null unless there's a deserialization exception.  
I bet that's what's happening -- there should be errors in the log about 
"Skipping row X" in that case.

Still, we shouldn't be ignoring those exceptions -- we should kill the 
compaction (or upgrade) and let the operator decide how to deal with them (e.g. 
with scrub).

Patch to fix that behavior, clean up the Streaming controller use, and add 
extra assertions.
                
> NPE when running upgradesstables
> --------------------------------
>
>                 Key: CASSANDRA-3655
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-3655
>             Project: Cassandra
>          Issue Type: Bug
>    Affects Versions: 1.0.5
>         Environment: 1.0.5 + patch for 
> https://issues.apache.org/jira/browse/CASSANDRA-3618
>            Reporter: Tupshin Harper
>            Assignee: Tupshin Harper
>             Fix For: 1.0.7
>
>         Attachments: 3655.txt
>
>
> Running a test upgrade from 0.7(version f sstables) to 1.0.
> upgradesstables runs for about 40 minutes and then NPE's when trying to 
> retrieve a key.
> No files have been succesfully upgraded. Likely related is that scrub 
> (without having run upgrade) consumes all RAM and OOMs.
> Possible theory is that a lot of paths call IPartitioner's decorateKey, and, 
> at least in the randompartitioner's implementation, if any of those callers 
> pass a null ByteBuffer, they key will be null in the stack trace below.
> java.util.concurrent.ExecutionException: java.lang.NullPointerException
>       at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
>       at java.util.concurrent.FutureTask.get(FutureTask.java:83)
>       at 
> org.apache.cassandra.db.compaction.CompactionManager.performAllSSTableOperation(CompactionManager.java:203)
>       at 
> org.apache.cassandra.db.compaction.CompactionManager.performSSTableRewrite(CompactionManager.java:219)
>       at 
> org.apache.cassandra.db.ColumnFamilyStore.sstablesRewrite(ColumnFamilyStore.java:970)
>       at 
> org.apache.cassandra.service.StorageService.upgradeSSTables(StorageService.java:1540)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at 
> com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:93)
>       at 
> com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:27)
>       at 
> com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
>       at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:120)
>       at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:262)
>       at 
> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
>       at 
> com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
>       at 
> javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1427)
>       at 
> javax.management.remote.rmi.RMIConnectionImpl.access$200(RMIConnectionImpl.java:72)
>       at 
> javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1265)
>       at 
> javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1360)
>       at 
> javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:788)
>       at sun.reflect.GeneratedMethodAccessor39.invoke(Unknown Source)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
>       at sun.rmi.transport.Transport$1.run(Transport.java:159)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
>       at 
> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
>       at 
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
>       at 
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>       at java.lang.Thread.run(Thread.java:662)
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.cassandra.db.compaction.PrecompactedRow.removeDeletedAndOldShards(PrecompactedRow.java:65)
>       at 
> org.apache.cassandra.db.compaction.PrecompactedRow.<init>(PrecompactedRow.java:92)
>       at 
> org.apache.cassandra.db.compaction.CompactionController.getCompactedRow(CompactionController.java:137)
>       at 
> org.apache.cassandra.db.compaction.CompactionIterable$Reducer.getReduced(CompactionIterable.java:102)
>       at 
> org.apache.cassandra.db.compaction.CompactionIterable$Reducer.getReduced(CompactionIterable.java:87)
>       at 
> org.apache.cassandra.utils.MergeIterator$OneToOne.computeNext(MergeIterator.java:200)
>       at 
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:140)
>       at 
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:135)
>       at com.google.common.collect.Iterators$7.computeNext(Iterators.java:614)
>       at 
> com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:140)
>       at 
> com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:135)
>       at 
> org.apache.cassandra.db.compaction.CompactionTask.execute(CompactionTask.java:172)
>       at 
> org.apache.cassandra.db.compaction.CompactionManager$4.perform(CompactionManager.java:229)
>       at 
> org.apache.cassandra.db.compaction.CompactionManager$2.call(CompactionManager.java:182)
>       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:138)
>       ... 3 more

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to