Tomasz Grabiec
e8ee0a2f86
Merge 'group0_state_machine: use correct comparison for timeuuids in merger' from Kamil Braun
...
In d2a4079bbe , `merger` was modified so that when we merge a command, `last_group0_state_id` is taken to be the maximum of the merged command's state_id and the current `last_group0_state_id`. This is necessary for achieving the same behavior as if the commands were applied individually instead of being merged -- where we take the maximum state ID from `group0_history` table which was applied until now (because the table is sorted using the state IDs and we take the greatest row).
However, a subtle bug was introduced -- the `std::max` function uses the `utils::UUID` standard comparison operator which is unfortunately not the same as timeuuid comparison that Scylla performs when sorting the `group0_history` table. So in rare cases it could return the *smaller* of the two timeuuids w.r.t. the correct timeuuid ordering. This would then lead to commands being applied which should have been turned to no-ops due to the `prev_state_id` check -- and then, for example, permanent schema desync or worse.
Fix it by using the correct comparison method.
Fixes : #14600
Closes #14616
* github.com:scylladb/scylladb:
utils/UUID: reference `timeuuid_tri_compare` in `UUID::operator<=>` comment
group0_state_machine: use correct comparison for timeuuids in `merger`
utils/UUID: introduce `timeuuid_tri_compare` for `const UUID&`
utils/UUID: introduce `timeuuid_tri_compare` for `const int8_t*`
2023-07-12 14:48:18 +02:00
..
2022-11-27 12:25:20 +02:00
2022-11-17 11:09:59 +02:00
2023-04-28 15:59:08 +03:00
2023-07-11 09:30:46 +03:00
2022-02-24 19:44:50 +03:00
2022-08-05 20:34:07 +03:00
2023-04-27 10:24:46 +03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-04-17 11:14:45 +03:00
2023-04-17 11:16:45 +03:00
2023-01-16 14:36:23 +01:00
2022-01-18 12:15:18 +01:00
2023-05-07 19:01:29 +03:00
2023-04-15 12:52:30 +08:00
2022-08-08 08:02:27 +03:00
2023-03-24 15:41:45 +08:00
2023-03-24 15:41:45 +08:00
2022-05-13 07:11:58 +02:00
2022-05-13 07:11:58 +02:00
2022-01-18 12:15:18 +01:00
2023-04-27 10:24:46 +03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-05-07 17:17:34 +03:00
2022-06-02 11:21:05 +03:00
2023-06-06 13:29:16 +03:00
2023-05-02 10:48:46 +03:00
2022-01-18 12:15:18 +01:00
2022-11-12 17:04:05 +02:00
2023-07-11 09:16:33 +03:00
2022-10-02 13:41:40 +03:00
2022-01-18 12:15:18 +01:00
2023-04-27 10:24:46 +03:00
2023-04-06 09:51:28 -04:00
2023-05-07 19:01:29 +03:00
2023-03-29 19:22:21 +08:00
2022-01-18 12:15:18 +01:00
2022-02-24 19:44:29 +03:00
2022-09-16 08:21:02 +03:00
2022-01-18 12:15:18 +01:00
2023-02-15 22:56:49 +08:00
2023-02-17 07:19:52 +02:00
2023-02-17 07:19:52 +02:00
2023-06-07 20:25:49 +03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-04-27 10:24:46 +03:00
2022-07-27 13:32:36 +03:00
2022-07-27 13:32:36 +03:00
2022-03-25 16:19:26 +02:00
2022-07-11 09:17:30 +02:00
2022-01-18 12:15:18 +01:00
2023-07-06 12:32:07 +02:00
2023-07-08 15:10:41 +03:00
2022-02-22 16:08:52 +01:00
2022-07-05 16:41:09 +02:00
2022-10-03 18:50:06 +03:00
2022-01-18 12:15:18 +01:00
2022-07-27 13:17:27 +03:00
2022-05-13 07:11:58 +02:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-04-11 16:09:38 +03:00
2023-04-27 10:24:46 +03:00
2022-01-18 12:15:18 +01:00
2023-04-24 14:06:43 +03:00
2023-04-24 14:06:40 +03:00
2023-04-24 14:06:40 +03:00
2022-07-27 16:58:52 +03:00
2022-07-27 16:58:52 +03:00
2023-02-14 19:22:19 +08:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-05-13 07:11:58 +02:00
2022-03-25 16:19:26 +02:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-04-27 10:24:46 +03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-04-21 14:28:18 +03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-11-17 19:01:45 +03:00
2022-11-17 19:01:45 +03:00
2023-04-27 10:24:46 +03:00
2023-04-27 10:24:46 +03:00
2023-04-27 10:24:46 +03:00
2023-05-29 23:03:25 +03:00
2022-09-16 13:02:40 +03:00
2023-01-27 21:56:31 +01:00
2023-05-07 17:16:38 +03:00
2023-05-07 17:17:34 +03:00
2022-02-24 19:44:50 +03:00
2022-02-24 19:44:50 +03:00
2022-01-18 12:15:18 +01:00
2023-03-20 07:55:20 +02:00
2022-01-18 12:15:18 +01:00
2023-04-27 10:24:46 +03:00
2023-07-10 19:36:06 +02:00
2023-07-10 19:36:06 +02:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-11-28 21:58:30 +02:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-01-27 21:56:31 +01:00
2023-06-26 21:58:20 -03:00
2023-06-26 21:58:20 -03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-02-03 19:04:32 +01:00
2022-02-22 16:25:21 +01:00
2022-04-18 12:27:18 +03:00
2023-02-28 21:56:55 +08:00
2022-03-16 12:28:47 +03:00
2023-04-26 22:09:17 +02:00
2023-01-23 13:46:06 +01:00
2023-01-16 15:15:27 +01:00
2023-06-26 11:10:38 +03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-05-21 11:33:38 +04:00
2022-01-18 12:15:18 +01:00
2023-05-11 16:31:23 +03:00
2023-04-24 14:06:43 +03:00
2023-05-02 10:48:46 +03:00
2023-05-24 12:08:19 +04:00
2022-05-13 07:11:58 +02:00
2023-05-15 10:19:39 +03:00
2023-06-21 00:58:24 +02:00
2023-02-15 11:09:04 +02:00
2023-05-02 10:59:58 +03:00
2022-01-18 12:15:18 +01:00
2023-06-15 15:52:50 +04:00
2023-01-27 19:15:39 +01:00
2022-01-18 12:15:18 +01:00
2022-10-05 10:52:49 +03:00
2022-01-18 12:15:18 +01:00
2022-01-18 12:15:18 +01:00
2023-02-17 07:19:52 +02:00
2023-04-21 10:33:02 +02:00
2023-03-20 14:25:45 +08:00
2023-07-11 13:19:50 +02:00
2022-11-27 16:34:34 +02:00
2022-01-18 12:15:18 +01:00
2023-02-17 07:19:52 +02:00