cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joshua McKenzie (JIRA)" <>
Subject [jira] [Commented] (CASSANDRA-12198) Deadlock in CDC during segment flush
Date Thu, 14 Jul 2016 14:38:20 GMT


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:
>             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