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

Stefan Podkowinski updated CASSANDRA-11886:
-------------------------------------------
    Description: 
Once validation compaction has been finished, all mismatching sstable sections 
for a token range will be used for streaming as return by 
{{StreamSession.getSSTableSectionsForRanges}}. Currently 2.1 will try to 
restrict the sstable candidates by checking if they can be found in 
{{CANONICAL_SSTABLES}} and will ignore them otherwise. At the same time 
{{IntervalTree}} in the {{DataTracker}} will be build based on replaced 
non-canonical sstables as well. In case of early opened sstables this becomes a 
problem, as the tree will be update with {{OpenReason.EARLY}} replacements that 
cannot be found in canonical. In this case {{getSSTableSectionsForRanges}} will 
get a early instance from the view, but fails to retrieve the corresponding 
canonical version from the map, as the different generation will cause a 
hashcode mismatch. Please find a test attached.

As a consequence not all sections for a range are streamed. In our case this 
has caused deleted data to reappear, as sections holding tombstones were left 
out due to this behavior.

  was:
Once validation compaction has been finished, all mismatching sstable sections 
for a token range will be used for streaming as return by 
{{StreamSession.getSSTableSectionsForRanges}}. Currently 2.1 will try to 
restrict the sstable candidates by checking if they can be found in 
{{CANONICAL_SSTABLES}} and will ignore them otherwise. At the same time 
{{IntervalTree}} in the {{DataTracker}} will be build based on replaced 
sstables as well, that are not necessarily in canonical. In case of early 
opened sstables this becomes a problem, as the tree will be update with 
{{OpenReason.EARLY}} replacements that cannot be found in canonical. In this 
case {{getSSTableSectionsForRanges}} will get a early instance from the view, 
but fails to retrieve the corresponding canonical version from the map, as the 
different generation will cause a hashcode mismatch. Please find a test 
attached.

As a consequence not all sections for a range are streamed. In our case this 
has caused deleted data to reappear, as sections holding tombstones were left 
out due to this behavior.


> Streaming will miss sections for early opened sstables during compaction
> ------------------------------------------------------------------------
>
>                 Key: CASSANDRA-11886
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11886
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Stefan Podkowinski
>            Priority: Critical
>              Labels: correctness, repair, streaming
>         Attachments: 9700-test-2_1.patch
>
>
> Once validation compaction has been finished, all mismatching sstable 
> sections for a token range will be used for streaming as return by 
> {{StreamSession.getSSTableSectionsForRanges}}. Currently 2.1 will try to 
> restrict the sstable candidates by checking if they can be found in 
> {{CANONICAL_SSTABLES}} and will ignore them otherwise. At the same time 
> {{IntervalTree}} in the {{DataTracker}} will be build based on replaced 
> non-canonical sstables as well. In case of early opened sstables this becomes 
> a problem, as the tree will be update with {{OpenReason.EARLY}} replacements 
> that cannot be found in canonical. In this case 
> {{getSSTableSectionsForRanges}} will get a early instance from the view, but 
> fails to retrieve the corresponding canonical version from the map, as the 
> different generation will cause a hashcode mismatch. Please find a test 
> attached.
> As a consequence not all sections for a range are streamed. In our case this 
> has caused deleted data to reappear, as sections holding tombstones were left 
> out due to this behavior.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to