cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joshua McKenzie (JIRA)" <>
Subject [jira] [Created] (CASSANDRA-12198) Deadlock in CDC during segment flush
Date Wed, 13 Jul 2016 22:03:20 GMT
Joshua McKenzie created CASSANDRA-12198:

             Summary: Deadlock in CDC during segment flush
                 Key: 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

View raw message