cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Maki Watanabe <watanabe.m...@gmail.com>
Subject Re: cleanup crashing with "java.util.concurrent.ExecutionException: java.lang.ArrayIndexOutOfBoundsException: 8"
Date Thu, 15 Mar 2012 01:51:43 GMT
If you don't need LCS, it will be safer to move back to STCS.
If you need LCS, you can manually demote the sstables by editing the
manifest file.
I'm not a man in datastax, and it is  a workaround I've just found. Please
test it well before
applying it on your production service.

Background:
You have leveled manifest file for each column family, such like CF1.json
for
a column family "CF1" in data directory. The file maintains sstable
"Level"s.

Before 1.0.9, "cleanup" command has an issue to promote all sstables to
next level. So if you have 10 sstable in L1, those will be compacted and
prompted to L2 after cleanup.

You have finit depth of level(called "generations" in the manifest). If you
are
using default sstable_size_in_mb: 5, the depth will be 8, starting from 0.
( max level is 7 )

If you run "cleanup" repeatedly on a CF for a node, some of your sstables
will be
prompted to the highest level 7.

If you run "cleanup" when you have sstables in L7, cassandra try to promote
them
to L8 which is not exist, and
throw java.lang.ArrayIndexOutOfBoundsException.

Work around:
1. Stop cassandra
2. Remove the manifest files (CF1.json in the example),
3. Start cassandra
    Then cassandra add all sstables to L0 and recreate the manifest files.
4. 5 minutes after starting, background compaction will start automatically.
    It will compact & promote all sstables from L0.
    It will need long time to complete depends on data you have on the node.

hope this help.
maki



On 2012/03/15, at 1:51, Thomas van Neerijnen <tom@bossastudios.com> wrote:

Thanks, good to know there's a fix on the way.
In the mean time is there any way to work around this? Or perhaps should I
move back to SizeTiered until 1.0.9 is released?

On Wed, Mar 14, 2012 at 3:00 PM, Maki Watanabe <watanabe.maki@gmail.com>wrote:

> Fixed in 1.0.9, 1.1.0
> https://issues.apache.org/jira/browse/CASSANDRA-3989
>
> You should better to avoid to use cleanup/scrub/upgradesstable if you
> can on 1.0.7 though
> it will not corrupt sstables.
>
> 2012/3/14 Thomas van Neerijnen <tom@bossastudios.com>:
> > Hi all
> >
> > I am trying to run a cleanup on a column family and am getting the
> following
> > error returned after about 15 seconds. A cleanup on a slightly smaller
> > column family completes in about 21 minutes. This is on the Apache
> packaged
> > version of Cassandra on Ubuntu 11.10, version 1.0.7.
> >
> > ~# nodetool -h localhost cleanup Player PlayerDetail
> > Error occured during cleanup
> > java.util.concurrent.ExecutionException:
> > java.lang.ArrayIndexOutOfBoundsException: 8
> >         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.performCleanup(CompactionManager.java:237)
> >         at
> >
> org.apache.cassandra.db.ColumnFamilyStore.forceCleanup(ColumnFamilyStore.java:984)
> >         at
> >
> org.apache.cassandra.service.StorageService.forceTableCleanup(StorageService.java:1635)
> >         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.GeneratedMethodAccessor28.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.ArrayIndexOutOfBoundsException: 8
> >         at
> >
> org.apache.cassandra.db.compaction.LeveledManifest.add(LeveledManifest.java:298)
> >         at
> >
> org.apache.cassandra.db.compaction.LeveledManifest.promote(LeveledManifest.java:186)
> >         at
> >
> org.apache.cassandra.db.compaction.LeveledCompactionStrategy.handleNotification(LeveledCompactionStrategy.java:141)
> >         at
> >
> org.apache.cassandra.db.DataTracker.notifySSTablesChanged(DataTracker.java:494)
> >         at
> >
> org.apache.cassandra.db.DataTracker.replaceCompactedSSTables(DataTracker.java:234)
> >         at
> >
> org.apache.cassandra.db.ColumnFamilyStore.replaceCompactedSSTables(ColumnFamilyStore.java:1006)
> >         at
> >
> org.apache.cassandra.db.compaction.CompactionManager.doCleanupCompaction(CompactionManager.java:791)
> >         at
> >
> org.apache.cassandra.db.compaction.CompactionManager.access$300(CompactionManager.java:63)
> >         at
> >
> org.apache.cassandra.db.compaction.CompactionManager$5.perform(CompactionManager.java:241)
> >         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
> >
>

Mime
View raw message