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

Aleksey Yeschenko updated CASSANDRA-14910:
------------------------------------------
    Description: 
In 2.x, if a table has clustering columns in {{DESC}} order, any SSTable that 
doesn’t have any static rows in it will be skipped altogether when iterated in 
reverse.

This occurs due to the logic in {{ColumnSlice.compare()}} errorneusly sorting 
any empty {{ByteBuffer}} after non-empty values due to the way {{ReversedType}} 
operates. In case that empty {{ByteBuffer}} is coming from a static 
{{Composite}}, however, the logic breaks down. Static {{Composite}} components 
must *always* sort before any non-empty value, no matter the table’s comparator.

2.0, 2.1, and 2.2 are all affected. 3.0 isn’t, but only because we skip slice 
intersection logic entirely if static rows are present in the filter.

Introduced by CASSANDRA-8502.


  was:
In 2.x, if a table has clustering columns in {{DESC}} order, any SSTable that 
doesn’t have any static rows in it will be skipped altogether when iterated in 
reverse.

This occurs due to the logic in {{ColumnSlice.compare()}} errorneusly sorting 
any empty {{ByteBuffer}} after non-empty values due to the way {{ReversedType}} 
operates. In case that empty {{ByteBuffer}} is coming from a static 
{{Composite}}, however, the logic breaks down. Static {{Composite}} components 
must *always* sort before any non-empty value, no matter the table’s comparator.

2.0, 2.1, and 2.2 are all affected. 3.0 isn’t, but only because we skip slice 
intersection logic entirely if static rows are present in the filter.



> Don't skip entire sstables when reading backwards with mixed clustering 
> column order
> ------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-14910
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-14910
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Local Write-Read Paths
>            Reporter: Aleksey Yeschenko
>            Assignee: Aleksey Yeschenko
>            Priority: Major
>             Fix For: 2.2.x
>
>
> In 2.x, if a table has clustering columns in {{DESC}} order, any SSTable that 
> doesn’t have any static rows in it will be skipped altogether when iterated 
> in reverse.
> This occurs due to the logic in {{ColumnSlice.compare()}} errorneusly sorting 
> any empty {{ByteBuffer}} after non-empty values due to the way 
> {{ReversedType}} operates. In case that empty {{ByteBuffer}} is coming from a 
> static {{Composite}}, however, the logic breaks down. Static {{Composite}} 
> components must *always* sort before any non-empty value, no matter the 
> table’s comparator.
> 2.0, 2.1, and 2.2 are all affected. 3.0 isn’t, but only because we skip slice 
> intersection logic entirely if static rows are present in the filter.
> Introduced by CASSANDRA-8502.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to