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

Jonathan Ellis commented on CASSANDRA-6106:
-------------------------------------------

Unfortunately it's not that easy to get a high-resolution timestamp in Java.  
Here's what nanotime javadoc says:

{quote}
This method can only be used to measure elapsed time and is not related to any 
other notion of system or wall-clock time. The value returned represents 
nanoseconds since some fixed but arbitrary origin time (perhaps in the future, 
so values may be negative). The same origin is used by all invocations of this 
method in an instance of a Java virtual machine; other virtual machine 
instances are likely to use a different origin...

The values returned by this method become meaningful only when the difference 
between two such values, obtained within the same instance of a Java virtual 
machine, is computed.
{quote}

It is NOT time since any particular epoch and you WILL have problems if you 
treat it like that.  (We've actually had a bug where that slipped past code 
review: CASSANDRA-4432.)

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#nanoTime()
                
> 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
>
> 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