[ 
https://issues.apache.org/jira/browse/CASSANDRA-13877?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jeff Jirsa updated CASSANDRA-13877:
-----------------------------------
    Description: 
We're backporting CDC feature and bug fixes to 3.0. There is potential 
visibility issue with two variables {{CDCSizeTracker.sizeInProgress}} and 
{{DirectorySizeCalculator.size}} . They're declared as volatile however there 
are cases that when assigning new values to them, the new values depend on the 
current value. For example:
https://github.com/apache/cassandra/blob/e9da85723a8dd40872c4bca087a03b655bd2cacb/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDC.java#L285
https://github.com/apache/cassandra/blob/e9da85723a8dd40872c4bca087a03b655bd2cacb/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDC.java#L297

In rare cases we'll not be able to calculate CDC data size correctly. We should 
change these two variables back to AtomicLong, as the simplest fix. Java 
Concurrency In Practice section 3.1.3 explains well why we shouldn't use 
volatile in these two cases. I'll provide patch shortly.

cc [~JoshuaMcKenzie] [~jay.zhuang]

  was:
We're backporting CDC feature and bug fixes to 3.0. There is potential 
visibility issue with two variables CDCSizeTracker.sizeInProgress and 
DirectorySizeCalculator.size. They're declared as volatile however there are 
cases that when assigning new values to them, the new values depend on the 
current value. For example:
https://github.com/apache/cassandra/blob/e9da85723a8dd40872c4bca087a03b655bd2cacb/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDC.java#L285
https://github.com/apache/cassandra/blob/e9da85723a8dd40872c4bca087a03b655bd2cacb/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDC.java#L297

In rare cases we'll not be able to calculate CDC data size correctly. We should 
change these two variables back to AtomicLong, as the simplest fix. Java 
Concurrency In Practice section 3.1.3 explains well why we shouldn't use 
volatile in these two cases. I'll provide patch shortly.

cc [~JoshuaMcKenzie] [~jay.zhuang]


> Potential concurrency issue with CDC size calculation
> -----------------------------------------------------
>
>                 Key: CASSANDRA-13877
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13877
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Simon Zhou
>            Assignee: Simon Zhou
>
> We're backporting CDC feature and bug fixes to 3.0. There is potential 
> visibility issue with two variables {{CDCSizeTracker.sizeInProgress}} and 
> {{DirectorySizeCalculator.size}} . They're declared as volatile however there 
> are cases that when assigning new values to them, the new values depend on 
> the current value. For example:
> https://github.com/apache/cassandra/blob/e9da85723a8dd40872c4bca087a03b655bd2cacb/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDC.java#L285
> https://github.com/apache/cassandra/blob/e9da85723a8dd40872c4bca087a03b655bd2cacb/src/java/org/apache/cassandra/db/commitlog/CommitLogSegmentManagerCDC.java#L297
> In rare cases we'll not be able to calculate CDC data size correctly. We 
> should change these two variables back to AtomicLong, as the simplest fix. 
> Java Concurrency In Practice section 3.1.3 explains well why we shouldn't use 
> volatile in these two cases. I'll provide patch shortly.
> cc [~JoshuaMcKenzie] [~jay.zhuang]



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to