[ 
https://issues.apache.org/jira/browse/CASSANDRA-6106?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13779602#comment-13779602
 ] 

Christopher Smith commented on CASSANDRA-6106:
----------------------------------------------

Regarding the "could be 100 micros in to the current ms, we could be 900, we 
have no way to tell".

That is correct. There is no way, with Java, to have a universal timestamp 
across nodes that is guaranteed to be ordered properly at a precision less than 
2 milliseconds.

However, given that the wobble in network latency is generally >= 1 millisecond 
*anyway*, that is FAR less of a concern. If a client wants to ensure which of 
two writes happens first, it probably can't use server side timestamps.

The big concern is the chance that two concurrent writes which have two or more 
overlapping cells be assigned the same timestamp. This is a *real risk* for any 
app with lots of concurrent writes to the same cells, regardless of its time 
sensitivity.
                
> QueryState.getTimestamp() & FBUtilities.timestampMicros() reads current 
> timestamp with System.currentTimeMillis() * 1000 instead of System.nanoTime() 
> / 1000
> ------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-6106
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6106
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>         Environment: DSE Cassandra 3.1, but also HEAD
>            Reporter: Christopher Smith
>            Priority: Minor
>              Labels: collision, conflict, timestamp
>         Attachments: microtimstamp.patch
>
>
> I noticed this blog post: http://aphyr.com/posts/294-call-me-maybe-cassandra 
> mentioned issues with millisecond rounding in timestamps and was able to 
> reproduce the issue. If I specify a timestamp in a mutating query, I get 
> microsecond precision, but if I don't, I get timestamps rounded to the 
> nearest millisecond, at least for my first query on a given connection, which 
> substantially increases the possibilities of collision.
> I believe I found the offending code, though I am by no means sure this is 
> comprehensive. I think we probably need a fairly comprehensive replacement of 
> all uses of System.currentTimeMillis() with System.nanoTime().

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to