diff --git a/db/view/view.cc b/db/view/view.cc index 9110714b82..49d6fd0dee 100644 --- a/db/view/view.cc +++ b/db/view/view.cc @@ -3154,16 +3154,16 @@ future<> view_builder::register_staging_sstable(sstables::shared_sstable sst, lw return _vug.register_staging_sstable(std::move(sst), std::move(table)); } -future check_needs_view_update_path(view_builder& vb, const locator::token_metadata& tm, const replica::table& t, streaming::stream_reason reason) { +future check_needs_view_update_path(view_builder& vb, locator::token_metadata_ptr tmptr, const replica::table& t, streaming::stream_reason reason) { if (is_internal_keyspace(t.schema()->ks_name())) { return make_ready_future(false); } if (reason == streaming::stream_reason::repair && !t.views().empty()) { return make_ready_future(true); } - return do_with(t.views(), [&vb, &tm] (auto& views) { + return do_with(std::move(tmptr), t.views(), [&vb] (locator::token_metadata_ptr& tmptr, auto& views) { return map_reduce(views, - [&vb, &tm] (const view_ptr& view) { return vb.check_view_build_ongoing(tm, view->ks_name(), view->cf_name()); }, + [&] (const view_ptr& view) { return vb.check_view_build_ongoing(*tmptr, view->ks_name(), view->cf_name()); }, false, std::logical_or()); }); diff --git a/db/view/view_update_checks.hh b/db/view/view_update_checks.hh index c15fbba2ed..8b58f57988 100644 --- a/db/view/view_update_checks.hh +++ b/db/view/view_update_checks.hh @@ -10,20 +10,17 @@ #include #include "streaming/stream_reason.hh" +#include "locator/token_metadata_fwd.hh" #include "seastarx.hh" namespace replica { class table; } -namespace locator { -class token_metadata; -} - namespace db::view { class view_builder; -future check_needs_view_update_path(view_builder& vb, const locator::token_metadata& tm, const replica::table& t, +future check_needs_view_update_path(view_builder& vb, locator::token_metadata_ptr tmptr, const replica::table& t, streaming::stream_reason reason); } diff --git a/replica/database.hh b/replica/database.hh index 38f8084fe2..c848d74382 100644 --- a/replica/database.hh +++ b/replica/database.hh @@ -1628,6 +1628,7 @@ public: } const locator::shared_token_metadata& get_shared_token_metadata() const { return _shared_token_metadata; } + locator::token_metadata_ptr get_token_metadata_ptr() const { return _shared_token_metadata.get(); } const locator::token_metadata& get_token_metadata() const { return *_shared_token_metadata.get(); } lang::manager& lang() noexcept { return _lang_manager; } diff --git a/replica/distributed_loader.cc b/replica/distributed_loader.cc index c12e9928d3..9ce70e2cf4 100644 --- a/replica/distributed_loader.cc +++ b/replica/distributed_loader.cc @@ -214,7 +214,7 @@ distributed_loader::process_upload_dir(distributed& db, shard [] (const sstables::shared_sstable&) { return true; }).get(); // Move to staging directory to avoid clashes with future uploads. Unique generation number ensures no collisions. - const bool use_view_update_path = db::view::check_needs_view_update_path(vb.local(), db.local().get_token_metadata(), *global_table, streaming::stream_reason::repair).get(); + const bool use_view_update_path = db::view::check_needs_view_update_path(vb.local(), erm->get_token_metadata_ptr(), *global_table, streaming::stream_reason::repair).get(); size_t loaded = directory.map_reduce0([&db, ks, cf, use_view_update_path, &vb] (sstables::sstable_directory& dir) { return make_sstables_available(dir, db, vb, use_view_update_path, ks, cf); diff --git a/streaming/consumer.cc b/streaming/consumer.cc index fda6ee66de..15e90e2bed 100644 --- a/streaming/consumer.cc +++ b/streaming/consumer.cc @@ -35,7 +35,7 @@ std::function (mutation_reader)> make_streaming_consumer(sstring origin auto cf = db.local().find_column_family(reader.schema()).shared_from_this(); auto guard = service::topology_guard(frozen_guard); - auto use_view_update_path = co_await db::view::check_needs_view_update_path(vb.local(), db.local().get_token_metadata(), *cf, reason); + auto use_view_update_path = co_await db::view::check_needs_view_update_path(vb.local(), db.local().get_token_metadata_ptr(), *cf, reason); //FIXME: for better estimations this should be transmitted from remote auto metadata = mutation_source_metadata{}; auto& cs = cf->get_compaction_strategy();