repair: handle no_such_column_family from remote node gracefully

If no_such_column_family is thrown on remote node, then repair
operation fails as the type of exception cannot be determined.

Use repair::with_table_drop_silenced in repair to continue operation
if a table was dropped.

(cherry picked from commit cf36015591)
This commit is contained in:
Aleksandra Martyniuk
2024-02-08 13:45:48 +01:00
parent 5e665cd7fb
commit 2caef424fe

View File

@@ -16,6 +16,7 @@
#include "utils/fb_utilities.hh"
#include "gms/gossiper.hh"
#include "message/messaging_service.hh"
#include "repair/table_check.hh"
#include "sstables/sstables.hh"
#include "replica/database.hh"
#include "db/config.hh"
@@ -696,9 +697,12 @@ future<> repair::shard_repair_task_impl::repair_range(const dht::token_range& ra
co_return;
}
try {
co_await repair_cf_range_row_level(*this, cf, table.id, range, neighbors);
} catch (replica::no_such_column_family&) {
dropped_tables.insert(cf);
auto dropped = co_await with_table_drop_silenced(db.local(), mm, table.id, [&] (const table_id& uuid) {
return repair_cf_range_row_level(*this, cf, table.id, range, neighbors);
});
if (dropped) {
dropped_tables.insert(cf);
}
} catch (...) {
nr_failed_ranges++;
throw;