Joshua McKenzie created CASSANDRA-12198:
-------------------------------------------

             Summary: Deadlock in CDC during segment flush
                 Key: CASSANDRA-12198
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-12198
             Project: Cassandra
          Issue Type: Bug
            Reporter: Joshua McKenzie
            Assignee: Joshua McKenzie
            Priority: Blocker
             Fix For: 3.8


In the patch for CASSANDRA-8844, we added a {{synchronized(this)}} block inside 
CommitLogSegment.setCDCState. This introduces the possibility of deadlock in 
the following scenario:
# A {{CommitLogSegment.sync()}} call is made (synchronized method)
# A {{CommitLogSegment.allocate}} call from a cdc-enabled write is in flight 
and acquires a reference to the Group on appendOrder (the OpOrder in the 
Segment)
# {{CommmitLogSegment.sync}} hits {{waitForModifications}} which calls 
{{appendOrder.awaitNewBarrier}}
# The in-flight write, if changing the state of the segment from 
CDCState.PERMITTED to CDCState.CONTAINS, enters {{setCDCState}} and blocks on 
synchronized(this)

And neither of them ever come back. This came up while doing some further work 
on CASSANDRA-12148.




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

Reply via email to