From db1d3cc342da2abc5da2a32eb6e4d2fba5052d50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Zakrzewski?= Date: Sun, 22 Sep 2024 12:53:33 +0200 Subject: [PATCH] auth: coroutinize the standard_role_manager start() function This change is a preparation for the next change. Moving to coroutines makes the code more readable and easier to process. (cherry picked from commit 04fc82620bca39ad7f14b966365e238f6be745bf) --- auth/standard_role_manager.cc | 50 ++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/auth/standard_role_manager.cc b/auth/standard_role_manager.cc index 1fe925385b..ef36de5fed 100644 --- a/auth/standard_role_manager.cc +++ b/auth/standard_role_manager.cc @@ -241,35 +241,37 @@ future<> standard_role_manager::migrate_legacy_metadata() { } future<> standard_role_manager::start() { - return once_among_shards([this] { - return futurize_invoke([this] () { - if (legacy_mode(_qp)) { - return create_legacy_metadata_tables_if_missing(); - } - return make_ready_future<>(); - }).then([this] { - _stopped = auth::do_after_system_ready(_as, [this] { - return seastar::async([this] { - if (legacy_mode(_qp)) { - _migration_manager.wait_for_schema_agreement(_qp.db().real_database(), db::timeout_clock::time_point::max(), &_as).get(); + return once_among_shards([this] () -> future<> { + if (legacy_mode(_qp)) { + co_await create_legacy_metadata_tables_if_missing(); + } - if (any_nondefault_role_row_satisfies(_qp, &has_can_login).get()) { - if (legacy_metadata_exists()) { - log.warn("Ignoring legacy user metadata since nondefault roles already exist."); - } - - return; - } + auto handler = [this] () -> future<> { + try { + if (legacy_mode(_qp)) { + co_await _migration_manager.wait_for_schema_agreement(_qp.db().real_database(), db::timeout_clock::time_point::max(), &_as); + if (co_await any_nondefault_role_row_satisfies(_qp, &has_can_login)) { if (legacy_metadata_exists()) { - migrate_legacy_metadata().get(); - return; + log.warn("Ignoring legacy user metadata since nondefault roles already exist."); } + co_return; } - create_default_role_if_missing().get(); - }); - }); - }); + + if (legacy_metadata_exists()) { + co_await migrate_legacy_metadata(); + co_return; + } + } + co_await create_default_role_if_missing(); + } catch (...) { + log.error("Failed to create default role: unknown error"); + throw; + } + }; + + _stopped = auth::do_after_system_ready(_as, handler); + co_return; }); }