view: Add view_update_generator -> sharded<storage_proxy> dependency
The generator will be responsible for spreading view updates with the help of mutate_MV helper. The latter needs storage proxy to operate, so the generator gets this dependency in advance. There's no need to change start/stop order at the moment, generator already starts after and stops before proxy. Also, services that have generator as dependency are not required by proxy (even indirectly) so no circular dependency is produced at this point. Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
This commit is contained in:
@@ -90,9 +90,13 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
view_update_generator::view_update_generator(replica::database& db) : _db(db), _progress_tracker(std::make_unique<progress_tracker>()) {
|
||||
view_update_generator::view_update_generator(replica::database& db, sharded<service::storage_proxy>& proxy)
|
||||
: _db(db)
|
||||
, _proxy(proxy)
|
||||
, _progress_tracker(std::make_unique<progress_tracker>()) {
|
||||
setup_metrics();
|
||||
discover_staging_sstables();
|
||||
(void)_proxy;
|
||||
}
|
||||
|
||||
view_update_generator::~view_update_generator() {}
|
||||
|
||||
@@ -22,6 +22,10 @@ class database;
|
||||
class table;
|
||||
}
|
||||
|
||||
namespace service {
|
||||
class storage_proxy;
|
||||
}
|
||||
|
||||
namespace db::view {
|
||||
|
||||
class view_update_generator {
|
||||
@@ -30,6 +34,7 @@ public:
|
||||
|
||||
private:
|
||||
replica::database& _db;
|
||||
sharded<service::storage_proxy>& _proxy;
|
||||
seastar::abort_source _as;
|
||||
future<> _started = make_ready_future<>();
|
||||
seastar::condition_variable _pending_sstables;
|
||||
@@ -40,7 +45,7 @@ private:
|
||||
class progress_tracker;
|
||||
std::unique_ptr<progress_tracker> _progress_tracker;
|
||||
public:
|
||||
view_update_generator(replica::database& db);
|
||||
view_update_generator(replica::database& db, sharded<service::storage_proxy>& proxy);
|
||||
~view_update_generator();
|
||||
|
||||
future<> start();
|
||||
|
||||
2
main.cc
2
main.cc
@@ -1269,7 +1269,7 @@ To start the scylla server proper, simply invoke as: scylla server (or just scyl
|
||||
replica::distributed_loader::init_non_system_keyspaces(db, proxy, sys_ks).get();
|
||||
|
||||
supervisor::notify("starting view update generator");
|
||||
view_update_generator.start(std::ref(db)).get();
|
||||
view_update_generator.start(std::ref(db), std::ref(proxy)).get();
|
||||
|
||||
supervisor::notify("starting commit log");
|
||||
auto cl = db.local().commitlog();
|
||||
|
||||
@@ -839,7 +839,7 @@ public:
|
||||
raft_gr.invoke_on_all(&service::raft_group_registry::drain_on_shutdown).get();
|
||||
});
|
||||
|
||||
view_update_generator.start(std::ref(db)).get();
|
||||
view_update_generator.start(std::ref(db), std::ref(proxy)).get();
|
||||
view_update_generator.invoke_on_all(&db::view::view_update_generator::start).get();
|
||||
auto stop_view_update_generator = defer([&view_update_generator] {
|
||||
view_update_generator.stop().get();
|
||||
|
||||
Reference in New Issue
Block a user