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)