[
https://issues.apache.org/jira/browse/CASSANDRA-12198?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Carl Yeksigian updated CASSANDRA-12198:
---------------------------------------
Component/s: Local Write-Read Paths
> Deadlock in CDC during segment flush
> ------------------------------------
>
> Key: CASSANDRA-12198
> URL: https://issues.apache.org/jira/browse/CASSANDRA-12198
> Project: Cassandra
> Issue Type: Bug
> Components: Local Write-Read Paths
> 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)