From: Radoslaw Zarzynski Date: Wed, 1 Mar 2023 16:10:38 +0000 (+0000) Subject: msg: always generate random nonce; don't try to reuse PID X-Git-Tag: v18.2.5~435^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=05904d7116ce455428619840cdc80b5808194591;p=ceph.git msg: always generate random nonce; don't try to reuse PID Too much of pain with containerized world. The autodection, based on `getpid() == 1`, turned out to be problematic. This patch removes it and switches the behavior to always use a random-generated nonce. Fixes: https://tracker.ceph.com/issues/57977 Signed-off-by: Radoslaw Zarzynski (cherry picked from commit e27f6c6a856d6ba7cad08bb933ec84e226aae6ad) --- diff --git a/src/ceph_mon.cc b/src/ceph_mon.cc index ebd110b4254..c1b30b70bb9 100644 --- a/src/ceph_mon.cc +++ b/src/ceph_mon.cc @@ -851,7 +851,7 @@ int main(int argc, const char **argv) Messenger *mgr_msgr = Messenger::create(g_ceph_context, public_msgr_type, entity_name_t::MON(rank), "mon-mgrc", - Messenger::get_pid_nonce()); + Messenger::get_random_nonce()); if (!mgr_msgr) { derr << "unable to create mgr_msgr" << dendl; prefork.exit(1); diff --git a/src/ceph_osd.cc b/src/ceph_osd.cc index 6428a0ed522..9e85923ab6b 100644 --- a/src/ceph_osd.cc +++ b/src/ceph_osd.cc @@ -544,7 +544,7 @@ flushjournal_out: public_msg_type = public_msg_type.empty() ? msg_type : public_msg_type; cluster_msg_type = cluster_msg_type.empty() ? msg_type : cluster_msg_type; - uint64_t nonce = Messenger::get_pid_nonce(); + uint64_t nonce = Messenger::get_random_nonce(); Messenger *ms_public = Messenger::create(g_ceph_context, public_msg_type, entity_name_t::OSD(whoami), "client", nonce); Messenger *ms_cluster = Messenger::create(g_ceph_context, cluster_msg_type, diff --git a/src/mgr/DaemonServer.cc b/src/mgr/DaemonServer.cc index 46c47539464..83253d25bd0 100644 --- a/src/mgr/DaemonServer.cc +++ b/src/mgr/DaemonServer.cc @@ -121,7 +121,7 @@ int DaemonServer::init(uint64_t gid, entity_addrvec_t client_addrs) msgr = Messenger::create(g_ceph_context, public_msgr_type, entity_name_t::MGR(gid), "mgr", - Messenger::get_pid_nonce()); + Messenger::get_random_nonce()); msgr->set_default_policy(Messenger::Policy::stateless_server(0)); msgr->set_auth_client(monc); diff --git a/src/mgr/MgrStandby.cc b/src/mgr/MgrStandby.cc index 7649298432f..545624eb79b 100644 --- a/src/mgr/MgrStandby.cc +++ b/src/mgr/MgrStandby.cc @@ -50,7 +50,7 @@ MgrStandby::MgrStandby(int argc, const char **argv) : cct->_conf.get_val("ms_type") : cct->_conf.get_val("ms_public_type"), entity_name_t::MGR(), "mgr", - Messenger::get_pid_nonce())), + Messenger::get_random_nonce())), objecter{g_ceph_context, client_messenger.get(), &monc, poolctx}, client{client_messenger.get(), &monc, &objecter}, mgrc(g_ceph_context, client_messenger.get(), &monc.monmap), diff --git a/src/msg/Messenger.cc b/src/msg/Messenger.cc index 5bcfb56e104..4db3bc7472e 100644 --- a/src/msg/Messenger.cc +++ b/src/msg/Messenger.cc @@ -18,18 +18,13 @@ Messenger *Messenger::create_client_messenger(CephContext *cct, std::string lnam std::move(lname), nonce); } -uint64_t Messenger::get_pid_nonce() -{ - uint64_t nonce = getpid(); - if (nonce == 1 || getenv("CEPH_USE_RANDOM_NONCE")) { - // we're running in a container; use a random number instead! - nonce = ceph::util::generate_random_number(); - } - return nonce; -} - uint64_t Messenger::get_random_nonce() { + // in the past the logic here was more complex -- we were trying + // to use the PID but, in the containerized world, it turned out + // unreliable. To deal with this, we started guessing whether we + // run in a container or not, and of course, got manual lever to + // intervene if guessed wrong (CEPH_USE_RANDOM_NONCE). return ceph::util::generate_random_number(); } diff --git a/src/msg/Messenger.h b/src/msg/Messenger.h index 71b7d2549c5..fe8d7a72b38 100644 --- a/src/msg/Messenger.h +++ b/src/msg/Messenger.h @@ -168,7 +168,6 @@ public: uint64_t nonce); static uint64_t get_random_nonce(); - static uint64_t get_pid_nonce(); /** * create a new messenger