Benedict Elliott Smith created CASSANDRA-15368:
--------------------------------------------------

             Summary: Failing to flush Memtable without terminating process 
results in permanent data loss
                 Key: CASSANDRA-15368
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15368
             Project: Cassandra
          Issue Type: Bug
          Components: Local/Commit Log, Local/Memtable
            Reporter: Benedict Elliott Smith


{{Memtable}} do not contain records that cover a precise contiguous range of 
{{ReplayPosition}}, since there are only weak ordering constraints when rolling 
over to a new {{Memtable}} - the last operations for the old {{Memtable}} may 
obtain their {{ReplayPosition}} after the first operations for the new 
{{Memtable}}.

Unfortunately, we treat the {{Memtable}} range as contiguous, and invalidate 
the entire range on flush.  Ordinarily we only invalidate records when all 
prior {{Memtable}} have also successfully flushed.  However, in the event of a 
flush that does not terminate the process (either because of disk failure 
policy, or because it is a software error), the later flush is able to 
invalidate the region of the commit log that includes records that should have 
been flushed in the prior {{Memtable}}

More problematically, this can also occur on restart without any associated 
flush failure, as we use commit log boundaries written to our flushed sstables 
to filter {{ReplayPosition}} on recovery, which is meant to replicate our 
{{Memtable}} flush behaviour above.  However, we do not know that earlier 
flushes have completed, and they may complete successfully out-of-order.  So 
any flush that completes before the process terminates, but began after another 
flush that _doesn’t_ complete before the process terminates, has the potential 
to cause permanent data loss.




--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to