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

Joshua McKenzie commented on CASSANDRA-12198:
---------------------------------------------

CI looks good - failures aren't related to this change. Committed to 3.8 
branch, also to 3.9 then merged to trunk.

> 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