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

Marcus Eriksson commented on CASSANDRA-7593:
--------------------------------------------

Think I'm getting to the bottom of this now

Seems it is a matter of how we store/deserialize RangeTombstones in 2.0 vs 2.1;

If I, in 2.0 store a RT like this, by itself in an sstable;
{code}
update p set tokens=null where peer = '127.0.0.4' ;
{code}
schema is:
{code}
CREATE TABLE aa.p (
    peer inet PRIMARY KEY,
    data_center text,
    host_id uuid,
    preferred_ip inet,
    rack text,
    release_version text,
    rpc_address inet,
    schema_version uuid,
    tokens set<text>
)
{code}
And then deserialize that, I get no EOC for RT.min, but i get EOC.end in RT.max

If i store the same tombstone in 2.1, i get EOC.start for RT.min and EOC.end 
for RT.max

This shows itself when we deserialize the 2.0-RT in 2.1 since we get a 
CompoundSparseCellName for RT.min and a BoundedComposite for RT.max and that 
breaks the collection of min/max column names since the CSCN is "empty" and no 
columns will be collected.

Could we assume EOC.START for RT.min in 2.1 when deserializing old sstables?

There is also a small bug when upgrading from 1.2 to 2.0, but it seems safe, in 
1.2 we store a row marker with the RT, in 2.0 we don't, so the row marker looks 
like a standard row which is included in the min/max collection (as a min 
column name). But this is afaict not dangerous since we will only include more 
sstable than we needed to

> Errors when upgrading through several versions to 2.1
> -----------------------------------------------------
>
>                 Key: CASSANDRA-7593
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7593
>             Project: Cassandra
>          Issue Type: Bug
>         Environment: java 1.7
>            Reporter: Russ Hatch
>            Assignee: Marcus Eriksson
>            Priority: Critical
>             Fix For: 2.1.0
>
>
> I'm seeing two different errors cropping up in the dtest which upgrades a 
> cluster through several versions.
> This is the more common error:
> {noformat}
> ERROR [GossipStage:10] 2014-07-22 13:14:30,028 CassandraDaemon.java:168 - 
> Exception in thread Thread[GossipStage:10,5,main]
> java.lang.AssertionError: null
>         at 
> org.apache.cassandra.db.filter.SliceQueryFilter.shouldInclude(SliceQueryFilter.java:347)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.filter.QueryFilter.shouldInclude(QueryFilter.java:249)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:249)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:60)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1873)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1681)
>  ~[main/:na]
>         at org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:345) 
> ~[main/:na]
>         at 
> org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:59)
>  ~[main/:na]
>         at 
> org.apache.cassandra.cql3.statements.SelectStatement.readLocally(SelectStatement.java:293)
>  ~[main/:na]
>         at 
> org.apache.cassandra.cql3.statements.SelectStatement.executeInternal(SelectStatement.java:302)
>  ~[main/:na]
>         at 
> org.apache.cassandra.cql3.statements.SelectStatement.executeInternal(SelectStatement.java:60)
>  ~[main/:na]
>         at 
> org.apache.cassandra.cql3.QueryProcessor.executeInternal(QueryProcessor.java:263)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.SystemKeyspace.getPreferredIP(SystemKeyspace.java:514)
>  ~[main/:na]
>         at 
> org.apache.cassandra.net.OutboundTcpConnectionPool.<init>(OutboundTcpConnectionPool.java:51)
>  ~[main/:na]
>         at 
> org.apache.cassandra.net.MessagingService.getConnectionPool(MessagingService.java:522)
>  ~[main/:na]
>         at 
> org.apache.cassandra.net.MessagingService.getConnection(MessagingService.java:536)
>  ~[main/:na]
>         at 
> org.apache.cassandra.net.MessagingService.sendOneWay(MessagingService.java:689)
>  ~[main/:na]
>         at 
> org.apache.cassandra.net.MessagingService.sendReply(MessagingService.java:663)
>  ~[main/:na]
>         at 
> org.apache.cassandra.service.EchoVerbHandler.doVerb(EchoVerbHandler.java:40) 
> ~[main/:na]
>         at 
> org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:62) 
> ~[main/:na]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  ~[na:1.7.0_60]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  ~[na:1.7.0_60]
>         at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_60]
> {noformat}
> The same test sometimes fails with this exception instead:
> {noformat}
> ERROR [CompactionExecutor:4] 2014-07-22 16:18:21,008 CassandraDaemon.java:168 
> - Exception in thread Thread[CompactionExecutor:4,1,RMI Runtime]
> java.util.concurrent.RejectedExecutionException: Task 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@7059d3e9 
> rejected from 
> org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor@108f1504[Terminated,
>  pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 95]
>         at 
> java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2048)
>  ~[na:1.7.0_60]
>         at 
> java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821) 
> ~[na:1.7.0_60]
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:325)
>  ~[na:1.7.0_60]
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:530)
>  ~[na:1.7.0_60]
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor.execute(ScheduledThreadPoolExecutor.java:619)
>  ~[na:1.7.0_60]
>         at 
> org.apache.cassandra.io.sstable.SSTableReader.scheduleTidy(SSTableReader.java:628)
>  ~[main/:na]
>         at 
> org.apache.cassandra.io.sstable.SSTableReader.tidy(SSTableReader.java:609) 
> ~[main/:na]
>         at 
> org.apache.cassandra.io.sstable.SSTableReader.releaseReference(SSTableReader.java:1596)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.DataTracker.replaceReaders(DataTracker.java:354) 
> ~[main/:na]
>         at 
> org.apache.cassandra.io.sstable.SSTableRewriter.abort(SSTableRewriter.java:200)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.compaction.CompactionTask.runWith(CompactionTask.java:192)
>  ~[main/:na]
>         at 
> org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48)
>  ~[main/:na]
>         at 
> org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) 
> ~[main/:na]
>         at 
> org.apache.cassandra.db.compaction.CompactionTask.executeInternal(CompactionTask.java:74)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.compaction.AbstractCompactionTask.execute(AbstractCompactionTask.java:59)
>  ~[main/:na]
>         at 
> org.apache.cassandra.db.compaction.CompactionManager$BackgroundCompactionTask.run(CompactionManager.java:236)
>  ~[main/:na]
>         at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
> ~[na:1.7.0_60]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
> ~[na:1.7.0_60]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  ~[na:1.7.0_60]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  [na:1.7.0_60]
>         at java.lang.Thread.run(Thread.java:745) [na:1.7.0_60]
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to