From 1a3a14628c23f1e120c79149c81eb1fd7290b2c9 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Sun, 28 Apr 2019 22:44:40 +0800 Subject: [PATCH] crimson/osd: sync msgr's require_authorizer with osdmap Signed-off-by: Kefu Chai --- src/crimson/osd/heartbeat.cc | 8 ++++++++ src/crimson/osd/heartbeat.h | 2 ++ src/crimson/osd/osd.cc | 10 ++++++++++ src/crimson/osd/osd.h | 2 +- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/heartbeat.cc b/src/crimson/osd/heartbeat.cc index 94801b225f2..f6c4e859e34 100644 --- a/src/crimson/osd/heartbeat.cc +++ b/src/crimson/osd/heartbeat.cc @@ -75,6 +75,14 @@ const entity_addrvec_t& Heartbeat::get_back_addrs() const return back_msgr.get_myaddrs(); } +void Heartbeat::set_require_authorizer(bool require_authorizer) +{ + if (front_msgr.get_require_authorizer() != require_authorizer) { + front_msgr.set_require_authorizer(require_authorizer); + back_msgr.set_require_authorizer(require_authorizer); + } +} + seastar::future<> Heartbeat::add_peer(osd_id_t peer, epoch_t epoch) { auto found = peers.find(peer); diff --git a/src/crimson/osd/heartbeat.h b/src/crimson/osd/heartbeat.h index 4046b208a9e..923e2615709 100644 --- a/src/crimson/osd/heartbeat.h +++ b/src/crimson/osd/heartbeat.h @@ -41,6 +41,8 @@ public: const entity_addrvec_t& get_front_addrs() const; const entity_addrvec_t& get_back_addrs() const; + void set_require_authorizer(bool); + // Dispatcher methods seastar::future<> ms_dispatch(ceph::net::Connection* conn, MessageRef m) override; diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 124fed81d1e..cdc0c393505 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -620,6 +620,7 @@ seastar::future<> OSD::committed_osd_maps(version_t first, std::chrono::seconds(TICK_INTERVAL)); } } + check_osdmap_features(); // yay! return consume_map(osdmap->get_epoch()); }).then([m, this] { @@ -822,6 +823,15 @@ seastar::future<> OSD::handle_pg_log(ceph::net::ConnectionRef conn, return do_peering_event(m->get_spg(), std::move(evt)); } +void OSD::check_osdmap_features() +{ + if (osdmap->require_osd_release < CEPH_RELEASE_NAUTILUS) { + heartbeat->set_require_authorizer(false); + } else { + heartbeat->set_require_authorizer(true); + } +} + seastar::future<> OSD::consume_map(epoch_t epoch) { // todo: m-to-n: broadcast this news to all shards diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index baeff0cc0f2..4486157da43 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -153,7 +153,7 @@ private: seastar::future<> committed_osd_maps(version_t first, version_t last, Ref m); - + void check_osdmap_features(); // order the promises in descending order of the waited osdmap epoch, // so we can access all the waiters expecting a map whose epoch is less // than a given epoch -- 2.39.5