Merge 'Replace get_injection_parameters() with inject_parameter() where appropriate' from Pavel Emelyanov

Several error injection sites use the low-level get_injection_parameters() API to fetch the entire parameters map and then manually look up a single key. The inject_parameter() API is better suited for these cases — it combines the enabled check and typed single-parameter extraction in one call, returning std::optional.

Cleaning error injection usage, not backporting

Closes scylladb/scylladb#29970

* github.com:scylladb/scylladb:
  test: Use inject_parameter() in row_cache_test
  sstables: Use inject_parameter() for mx reader fill buffer timeout
  streaming: Use inject_parameter() for order_sstables_for_streaming
This commit is contained in:
Botond Dénes
2026-05-26 10:32:44 +03:00
3 changed files with 11 additions and 15 deletions

View File

@@ -1732,11 +1732,10 @@ public:
});
}
return do_until([this] { return is_end_of_stream() || is_buffer_full(); }, [this] {
if (utils::get_local_injector().enter("sstables_mx_reader_fill_buffer_timeout")) {
const sstring table_name = utils::get_local_injector().get_injection_parameters("sstables_mx_reader_fill_buffer_timeout")["table"];
const sstring this_table_name = format("{}.{}", _schema->ks_name(), _schema->cf_name());
if (auto table_name = utils::get_local_injector().inject_parameter("sstables_mx_reader_fill_buffer_timeout", "table"); table_name) {
const auto this_table_name = format("{}.{}", _schema->ks_name(), _schema->cf_name());
// Repeat the sleep until the permit is aborted due to timeout.
if (table_name == this_table_name && !get_abort_exception()) {
if (*table_name == this_table_name && !get_abort_exception()) {
return seastar::sleep(std::chrono::milliseconds(10));
}
}

View File

@@ -762,18 +762,15 @@ future<stream_files_response> tablet_stream_files_handler(replica::database& db,
} else {
auto sstables = co_await table.take_storage_snapshot(req.range);
co_await utils::get_local_injector().inject("wait_before_tablet_stream_files_after_snapshot", utils::wait_for_message(std::chrono::seconds(60)));
co_await utils::get_local_injector().inject("order_sstables_for_streaming", [&sstables] (auto& handler) -> future<> {
if (sstables.size() == 3) {
// make sure the sstables are ordered so that the sstable containing shadowed data is streamed last
const std::string_view shadowed_file = handler.template get<std::string_view>("shadowed_file").value();
for (int index: {0, 1}) {
if (sstables[index].sst->component_basename(component_type::Data) == shadowed_file) {
std::swap(sstables[index], sstables[2]);
}
if (auto shadowed_file = utils::get_local_injector().inject_parameter<std::string_view>("order_sstables_for_streaming", "shadowed_file");
shadowed_file && sstables.size() == 3) {
// make sure the sstables are ordered so that the sstable containing shadowed data is streamed last
for (int index: {0, 1}) {
if (sstables[index].sst->component_basename(component_type::Data) == *shadowed_file) {
std::swap(sstables[index], sstables[2]);
}
}
return make_ready_future<>();
});
}
auto& sst_gen = table.get_sstable_generation_generator();

View File

@@ -5355,7 +5355,7 @@ future<> test_cache_tombstone_gc_overlap_checks(apply_delete_fn apply_delete) {
_fut = db.flush(sstring(keyspace_name), sstring(table_name));
while (!err_inj.get_injection_parameters(injection_point_name).contains("suspended")) {
while (!err_inj.inject_parameter<std::string_view>(injection_point_name, "suspended")) {
sleep(1s).get();
}
}