]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: always generate random nonce; don't try to reuse PID
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 1 Mar 2023 16:10:38 +0000 (16:10 +0000)
committeryite.gu <yitegu0@gmail.com>
Fri, 29 Sep 2023 23:59:07 +0000 (07:59 +0800)
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 <rzarzyns@redhat.com>
(cherry picked from commit e27f6c6a856d6ba7cad08bb933ec84e226aae6ad)

src/ceph_mon.cc
src/ceph_osd.cc
src/mgr/DaemonServer.cc
src/mgr/MgrStandby.cc
src/msg/Messenger.cc
src/msg/Messenger.h

index ebd110b4254b863c87ab99d8e5d2be34107cf909..c1b30b70bb9f230098141640cab0b1cb2045dfac 100644 (file)
@@ -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);
index 6428a0ed522e040e5f6eadc38585ee29c101b5ea..9e85923ab6bc9cf29d8a486d13ef849bc1d3aa0e 100644 (file)
@@ -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,
index 46c475394644fcb9051f1e2a557ef9e624620507..83253d25bd032dc2db9adf4bbe2c0baf0aeaa9c2 100644 (file)
@@ -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);
index 7649298432f187f08dd08cf69a35a2bf10145ef1..545624eb79b0522e178f5c6a97d1fb025e671d20 100644 (file)
@@ -50,7 +50,7 @@ MgrStandby::MgrStandby(int argc, const char **argv) :
                        cct->_conf.get_val<std::string>("ms_type") : cct->_conf.get_val<std::string>("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),
index 5bcfb56e1048e104affc51faa3d16751749f0df6..4db3bc7472ee7eac96906678ca1e03e5e429e53c 100644 (file)
@@ -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<uint64_t>();
-  }
-  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<uint64_t>();
 }
 
index 71b7d2549c51f12e9618356da53555968fbbdca3..fe8d7a72b381d30cbd916b25aceaf11eab01382e 100644 (file)
@@ -168,7 +168,6 @@ public:
                            uint64_t nonce);
 
   static uint64_t get_random_nonce();
-  static uint64_t get_pid_nonce();
 
   /**
    * create a new messenger