[ https://issues.apache.org/jira/browse/CASSANDRA-12198?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15376818#comment-15376818 ]
Joshua McKenzie commented on CASSANDRA-12198: --------------------------------------------- [~carlyeks] to review since Branimir is out. > 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)