You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Andreas Mager (Jira)" <ji...@apache.org> on 2024/01/31 15:36:00 UTC
[jira] [Created] (CASSANDRA-19349) Timeuuid compare is broken
Andreas Mager created CASSANDRA-19349:
-----------------------------------------
Summary: Timeuuid compare is broken
Key: CASSANDRA-19349
URL: https://issues.apache.org/jira/browse/CASSANDRA-19349
Project: Cassandra
Issue Type: Bug
Reporter: Andreas Mager
I have stumbled over a wired problem on my pc.
{{When i turn on my wifi interface, then some of my integration test are failing.}}
{{The mac part(lsb) of the timeuuids become changed in our Uuid implementation.}}
{{ These uuids are used for the cassandra insertions and queries.}}
{{TestSetup with "broken" Uuids:}}
{code:java}
CREATE TABLE object_comment (
object timeuuid,
comment timeuuid,
value blob,
PRIMARY KEY (object, comment)
)
INSERT INTO object_comment (object, comment , value) VALUES (95278adc-c03f-11ee-ab43-bb35e932d536, cf9e6440-c01e-11ee-847b-34cff6b1be80, 0x01);
INSERT INTO object_comment (object, comment , value) VALUES (95278adc-c03f-11ee-ab43-bb35e932d536, cf9f75b0-c01e-11ee-847b-34cff6b1be80, 0x02);
// cf9f75b0-c01e-11ee-847b-34cff6b1be7f is lsb-1 and the same timestamp
SELECT * FROM object_comment where object = 95278adc-c03f-11ee-ab43-bb35e932d536 AND comment <= cf9f75b0-c01e-11ee-847b-34cff6b1be7f; object | comment | value
--------------------------------------+--------------------------------------+-------
95278adc-c03f-11ee-ab43-bb35e932d536 | cf9e6440-c01e-11ee-847b-34cff6b1be80 | 0x01
95278adc-c03f-11ee-ab43-bb35e932d536 | cf9f75b0-c01e-11ee-847b-34cff6b1be80 | 0x02(2 rows)
{code}
The second row must not be present. The Only row expected is :
{code:java}
95278adc-c03f-11ee-ab43-bb35e932d536 | cf9e6440-c01e-11ee-847b-34cff6b1be80 | 0x01{code}
I think i have found the cause of the issue.
The Methods `org.apache.cassandra.utils.TimeUUID#compareTo` and `org.apache.cassandra.db.marshal.TimeUUIDType#compareCustom` return different results.
Test pseudocode:
{code:java}
var id = UUID.fromString("cf9f75b0-c01e-11ee-847b-34cff6b1be80");
var idDecrementInLsb = UUID.fromString("cf9f75b0-c01e-11ee-847b-34cff6b1be7f");
// java.util.UUID#compareTo
assertThat(idDecrementInLsb.compareTo(id)).isEqualTo(-1);
var timeUuidDec = org.apache.cassandra.utils.TimeUUID.fromUuid(idDecrementInLsb);
var timeUuidId = org.apache.cassandra.utils.TimeUUID.fromUuid(id);
// org.apache.cassandra.utils.TimeUUID#compareTo
assertThat(timeUuidDec.compareTo(timeUuidId)).isEqualTo(-1);
// org.apache.cassandra.db.marshal.TimeUUIDType.compareCustom
assertThat(org.apache.cassandra.db.marshal.TimeUUIDType.compareCustom(idDecrementInLsb, id1)).isEqualTo(-1); // This fails
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org