From 9bca90be0d3ced7c5a1d79178c0e36dbcd16b5ea Mon Sep 17 00:00:00 2001 From: Asias He Date: Mon, 1 Sep 2025 21:16:18 +0800 Subject: [PATCH] repair: Fix repair_row_level_stop verb idl The version keyword is missed for the optional mark_as_repaired parameter. This causes the new node to expect more data to come: INFO 2025-09-01 19:23:05,332 [shard 0:strm] rpc - client 127.0.7.6:50116 msg_id 8: caught exception while processing a message: std::out_of_range (deserialization buffer underflow) When the sender is an old node in a mixed cluster, the data will never come. To fix, add the missing version keyword. Our idl-compiler.py should have caught the typo since the keyword was missing in the [[]] tag. Fixes #25666 Closes scylladb/scylladb#25782 --- idl/repair.idl.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/idl/repair.idl.hh b/idl/repair.idl.hh index 92da537a0c..03abdfc463 100644 --- a/idl/repair.idl.hh +++ b/idl/repair.idl.hh @@ -113,7 +113,7 @@ verb [[with_client_info]] repair_get_sync_boundary (uint32_t repair_meta_id, std verb [[with_client_info]] repair_get_row_diff (uint32_t repair_meta_id, repair_hash_set set_diff, bool needs_all_rows, shard_id dst_shard_id [[version 5.2]]) -> repair_rows_on_wire; verb [[with_client_info]] repair_put_row_diff (uint32_t repair_meta_id, repair_rows_on_wire row_diff, shard_id dst_shard_id [[version 5.2]]); verb [[with_client_info]] repair_row_level_start (uint32_t repair_meta_id, sstring keyspace_name, sstring cf_name, dht::token_range range, row_level_diff_detect_algorithm algo, uint64_t max_row_buf_size, uint64_t seed, unsigned remote_shard, unsigned remote_shard_count, unsigned remote_ignore_msb, sstring remote_partitioner_name, table_schema_version schema_version, streaming::stream_reason reason [[version 4.1.0]], gc_clock::time_point compaction_time [[version 5.2]], shard_id dst_shard_id [[version 5.2]], service::frozen_topology_guard topo_guard [[version 2025.1]], std::optional repaired_at [[version 2025.4]], locator::tablet_repair_incremental_mode incremental_mode [[version 2025.4]]) -> repair_row_level_start_response [[version 4.2.0]]; -verb [[with_client_info]] repair_row_level_stop (uint32_t repair_meta_id, sstring keyspace_name, sstring cf_name, dht::token_range range, shard_id dst_shard_id [[version 5.2]], bool mark_as_repaired [[2025.4]]); +verb [[with_client_info]] repair_row_level_stop (uint32_t repair_meta_id, sstring keyspace_name, sstring cf_name, dht::token_range range, shard_id dst_shard_id [[version 5.2]], bool mark_as_repaired [[version 2025.4]]); verb [[with_client_info]] repair_get_estimated_partitions (uint32_t repair_meta_id, shard_id dst_shard_id [[version 5.2]]) -> uint64_t; verb [[with_client_info]] repair_set_estimated_partitions (uint32_t repair_meta_id, uint64_t estimated_partitions, shard_id dst_shard_id [[version 5.2]]); verb [[with_client_info]] repair_get_diff_algorithms () -> std::vector;