Thanks Sylvain. I'll try option 3 when the current repair ends so I can
fix the remaining CFs.

I'm also finding a few of this while opening sstables that have been
build with repair (SSTable build compactions)

ERROR [CompactionExecutor:2] 2011-07-06 10:09:16,054
AbstractCassandraDaemon.java (line 113) Fatal exception in thread
Thread[CompactionExecutor:2,1,main]
java.lang.NullPointerException
        at org.apache.cassandra.io.sstable.SSTableWriter
$RowIndexer.close(SSTableWriter.java:382)
        at org.apache.cassandra.io.sstable.SSTableWriter
$RowIndexer.index(SSTableWriter.java:370)
        at org.apache.cassandra.io.sstable.SSTableWriter
$Builder.build(SSTableWriter.java:315)
        at org.apache.cassandra.db.compaction.CompactionManager
$9.call(CompactionManager.java:1103)
        at org.apache.cassandra.db.compaction.CompactionManager
$9.call(CompactionManager.java:1094)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        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)



El mié, 06-07-2011 a las 11:22 +0200, Sylvain Lebresne escribió:
> 2011/7/6 Héctor Izquierdo Seliva <izquie...@strands.com>:
> > Hi, i've been struggling to repair my failed node for the past few days,
> > and I've seen this erros a few times.
> >
> > java.lang.RuntimeException: Cannot recover SSTable with version f
> > (current version g).
> >
> > If it can read the sstables, why can't they be used to repair?
> 
> After a sstable is streamed (by repair in particular), we first have to 
> recreate
> a number of data structures. To do that, a specific part of the code is used
> that do not know how to cope with older sstable version (hence the message).
> This does not mean that this won't even get fixed, it will, but it is a 
> current
> limitation.
> 
> > Is there anything I can do besides running scrub or compact on all the 
> > cluster?
> 
> Not really no. You can wait enough time so that all old sstables have been
> compacted to newer version before running a repair, but since that could take
> a long time if you have lots of data, that may not always be an option.
> Now probably the most "efficient" way (the quote are because it's not the most
> efficient in time and investment it will require from you) is probably 
> something
> like that: For each of the nodes of the cluster:
>   1) look the sstables on the node (do a 'ls' on the data repository).
> The sstable
> will look something like Standard1-g-105-Data.db where the 'g' may be a 'f' 
> for
> some (all?) of the sstable. The 'f' means old sstable, the 'g' means new ones.
>   2) if all or almost all the big sstables are 'f', then run scrub on
> that node, that'll
> be simpler.
>   3) if only a handfull of sstable are on 'f' (typically, if the node
> has not just been updated),
> then what you can do is to force a compaction on those only by using
> JMX->CompactionManager->forceUserDefinedCompaction,
> giving it the keyspace name as first argument and the full path to the
> sstable as second
> argument.
> 
> 
> 
> >
> > Regards
> >
> > Hector Izquierdo
> >
> >
> >
> >


Reply via email to