Greetings.

Running (CQL 3) queries like:

   update users set admin = 1 where corporation_id = 
'7a55bc4c-84e7-479c-9ac6-43f7836705b5';

… I see in logs a row like:

StorageProxy.java (line 175) Mutations/ConsistencyLevel are 
[RowMutation(keyspace='goh_test', 
key='37613535626334632d383465372d343739632d396163362d343366373833363730356235', 
modifications=[ColumnFamily(users [admin:false:1@1342006844093000,])])]/ONE

If I understand it correctly, that 1342006844093000 is the timestamp in 
microseconds, getting rounded to milliseconds.

If I modify queries in this way:

   update users using timestamp 1342006844106123 set admin = 1 where 
corporation_id = '7a55bc4c-84e7-479c-9ac6-43f7836705b5';

… the log row becomes:

StorageProxy.java (line 175) Mutations/ConsistencyLevel are 
[RowMutation(keyspace='goh_test', 
key='37613535626334632d383465372d343739632d396163362d343366373833363730356235', 
modifications=[ColumnFamily(users [admin:false:1@1342006844106123,])])]/ONE

…and what I see is that the timestamp get through NOT rounded, with 
microseconds precision.


We see this behavior using cqlsh, C++ thrift bindings and phpcassa. I guess 
they all use thrift, and so the rounding happens there.

One of the "problems" is that sometimes it gets rounded up, so it's in the 
future. But that's just a side effect of rounding, and I can't understand why 
in the first place there is a rounding. I guess that the second case is just 
Cassandra "correcting" the timestamp with data found in the CQL, and maybe 
thrift is still sending a milliseconds-rounded timestamp, but I still can't see 
a reason for thrift doing this.

Could someone enlighten me a bit on this matter ?

--
Marco Matarazzo
== Hex Keep ==

"You can learn more about a man
  in one hour of play
  than in one year of conversation.” - Plato




Reply via email to