diff --git a/db/view/view_update_generator.cc b/db/view/view_update_generator.cc index 766aaff082..5629954277 100644 --- a/db/view/view_update_generator.cc +++ b/db/view/view_update_generator.cc @@ -97,6 +97,7 @@ view_update_generator::view_update_generator(replica::database& db, sharded view_update_generator::start() { } future<> view_update_generator::stop() { + _db.unplug_view_update_generator(); _as.request_abort(); _pending_sstables.signal(); return std::move(_started).then([this] { diff --git a/db/view/view_update_generator.hh b/db/view/view_update_generator.hh index 00a49276f4..2f84af9a68 100644 --- a/db/view/view_update_generator.hh +++ b/db/view/view_update_generator.hh @@ -28,7 +28,7 @@ class storage_proxy; namespace db::view { -class view_update_generator { +class view_update_generator : public async_sharded_service { public: static constexpr size_t registration_queue_size = 5; diff --git a/replica/database.cc b/replica/database.cc index 91561c8cfa..a47666e2a5 100644 --- a/replica/database.cc +++ b/replica/database.cc @@ -47,6 +47,7 @@ #include "timeout_config.hh" #include "service/storage_proxy.hh" #include "db/operation_type.hh" +#include "db/view/view_update_generator.hh" #include "utils/human_readable.hh" #include "utils/fb_utilities.hh" @@ -2719,6 +2720,14 @@ void database::unplug_system_keyspace() noexcept { _large_data_handler->unplug_system_keyspace(); } +void database::plug_view_update_generator(db::view::view_update_generator& generator) noexcept { + _view_update_generator = generator.shared_from_this(); +} + +void database::unplug_view_update_generator() noexcept { + _view_update_generator = nullptr; +} + } // namespace replica template diff --git a/replica/database.hh b/replica/database.hh index a9ea993e8a..ade747578e 100644 --- a/replica/database.hh +++ b/replica/database.hh @@ -123,6 +123,10 @@ class table_selector; future<> system_keyspace_make(db::system_keyspace& sys_ks, distributed& db, distributed& ss, sharded& g, sharded& raft_gr, db::config& cfg, system_table_load_phase phase); +namespace view { +class view_update_generator; +} + } class mutation_reordered_with_truncate_exception : public std::exception {}; @@ -1323,6 +1327,7 @@ private: db::timeout_semaphore _view_update_concurrency_sem{max_memory_pending_view_updates()}; cache_tracker _row_cache_tracker; + seastar::shared_ptr _view_update_generator; inheriting_concrete_execution_stage< future<>, @@ -1400,6 +1405,9 @@ public: void plug_system_keyspace(db::system_keyspace& sys_ks) noexcept; void unplug_system_keyspace() noexcept; + void plug_view_update_generator(db::view::view_update_generator& generator) noexcept; + void unplug_view_update_generator() noexcept; + private: future<> flush_non_system_column_families(); future<> flush_system_column_families();