msg/Messenger: use random nonce if CEPH_USE_RANDOM_NONCE or pid == 1

If we are in a container, then we do not have a unique pid, and need to
use a random nonce.  We normally detect this if our pid is 1, but that
doesn't work when we have a init process--we'll (probably?) have a small
pid (in my tests, the OSDs were getting pid 7).

To be safe, also check for an environment variable set by cephadm.

This avoids problems that arise when we don't have a unique address.

Fixes: https://tracker.ceph.com/issues/49534
Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
Sage Weil 2021-02-27 15:45:47 -05:00
parent a16e46ef05
commit d18f60854e

View File

@ -21,7 +21,7 @@ Messenger *Messenger::create_client_messenger(CephContext *cct, std::string lnam
uint64_t Messenger::get_pid_nonce()
{
uint64_t nonce = getpid();
if (nonce == 1) {
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>();
}