storage_service: Shuffle drain sequence

Right now the draining sequence is

 - stop transport (protocol servers, gossiper, streaming)
 - shutdown tracing
 - shutdown compaction manager
 - flush CFs
 - drain batchlog manager
 - stop migration manager
 - shutdown commitlog

This violates the layering -- both batchlog and migration managers
are higher-level services than the database, so they should be
shutdown/drained before it, i.e. -- before shutting down compaction
manager and flushing all CFs.

Signed-off-by: Pavel Emelyanov <xemul@scylladb.com>
This commit is contained in:
Pavel Emelyanov
2021-11-09 18:51:15 +03:00
parent 82509c9e74
commit 906cac0f86

View File

@@ -2631,6 +2631,13 @@ future<> storage_service::do_drain() {
tracing::tracing::tracing_instance().invoke_on_all(&tracing::tracing::shutdown).get();
db::get_batchlog_manager().invoke_on_all([] (auto& bm) {
return bm.drain();
}).get();
set_mode(mode::DRAINING, "shutting down migration manager", false);
_migration_manager.invoke_on_all(&service::migration_manager::stop).get();
// Interrupt on going compaction and shutdown to prevent further compaction
_db.invoke_on_all([] (auto& db) {
return db.get_compaction_manager().drain();
@@ -2639,13 +2646,6 @@ future<> storage_service::do_drain() {
set_mode(mode::DRAINING, "flushing column families", false);
flush_column_families();
db::get_batchlog_manager().invoke_on_all([] (auto& bm) {
return bm.drain();
}).get();
set_mode(mode::DRAINING, "shutting down migration manager", false);
_migration_manager.invoke_on_all(&service::migration_manager::stop).get();
_db.invoke_on_all([] (auto& db) {
return db.commitlog()->shutdown();
}).get();