using clock_t = seastar::lowres_system_clock;
clock_t::time_point auth_start;
crimson::auth::method_t auth_method = 0;
- seastar::promise<auth_result_t> auth_done;
+ std::optional<seastar::promise<auth_result_t>> auth_done;
// v1 and v2
const AuthRegistry& auth_registry;
crimson::net::ConnectionRef conn;
{
auth_start = seastar::lowres_system_clock::now();
return conn->send(make_message<MMonGetMap>()).then([this] {
- return auth_done.get_future();
+ auth_done.emplace();
+ return auth_done->get_future();
});
}
secret_t connection_secret;
int r = auth->handle_response(0, p, &session_key, &connection_secret);
conn->set_last_keepalive_ack(auth_start);
- auth_done.set_value(auth_result_t::success);
+ if (auth_done) {
+ auth_done->set_value(auth_result_t::success);
+ auth_done.reset();
+ }
return {session_key, connection_secret, r};
}
if (p == auth_supported.end()) {
logger().error("server allowed_methods {} but i only support {}",
allowed_methods, auth_supported);
- auth_done.set_exception(std::system_error(make_error_code(
+ assert(auth_done);
+ auth_done->set_exception(std::system_error(make_error_code(
crimson::net::error::negotiation_failure)));
return -EACCES;
}
{
reply.set_value(Ref<MAuthReply>(nullptr));
reply = {};
- auth_done.set_value(auth_result_t::canceled);
- auth_done = {};
+ if (auth_done) {
+ auth_done->set_value(auth_result_t::canceled);
+ auth_done.reset();
+ }
if (conn && !std::exchange(closed, true)) {
conn->mark_down();
}