This is all mechanical except the calculation of the nonce, which is
now always randomized for clients.
Fixes: #13032
Signed-off-by: Josh Durgin <jdurgin@redhat.com>
(cherry picked from commit
a3a8c85b79afef67681c32c57b591c0e0a87a349)
Conflicts:
src/ceph_fuse.cc
src/ceph_syn.cc
src/libcephfs.cc
src/librados/RadosClient.cc
src/mds/MDSUtility.cc
src/mon/MonClient.cc
src/test/mon/test_mon_workloadgen.cc
- different arguments to Messenger::create() in firefly
goto out_mc_start_failed;
// start up network
- messenger = Messenger::create(g_ceph_context,
- entity_name_t::CLIENT(), "client",
- getpid());
+ messenger = Messenger::create_client_messenger(g_ceph_context, "client");
messenger->set_default_policy(Messenger::Policy::lossy_client(0, 0));
messenger->set_policy(entity_name_t::TYPE_MDS,
Messenger::Policy::lossless_client(0, 0));
cout << "ceph-syn: starting " << g_conf->num_client << " syn client(s)" << std::endl;
for (int i=0; i<g_conf->num_client; i++) {
- messengers[i] = Messenger::create(g_ceph_context,
- entity_name_t(entity_name_t::TYPE_CLIENT,-1), "synclient",
- i * 1000000 + getpid());
+ messengers[i] = Messenger::create_client_messenger(g_ceph_context,
+ "synclient");
messengers[i]->bind(g_conf->public_addr);
mclients[i] = new MonClient(g_ceph_context);
mclients[i]->build_initial_monmap();
struct ceph_mount_info
{
public:
- ceph_mount_info(uint64_t msgr_nonce_, CephContext *cct_)
- : msgr_nonce(msgr_nonce_),
- mounted(false),
+ ceph_mount_info(CephContext *cct_)
+ : mounted(false),
inited(false),
client(NULL),
monclient(NULL),
goto fail;
//network connection
- messenger = Messenger::create(cct, entity_name_t::CLIENT(), "client", msgr_nonce);
+ messenger = Messenger::create_client_messenger(cct, "client");
//at last the client
ret = -1002;
}
private:
- uint64_t msgr_nonce;
bool mounted;
bool inited;
Client *client;
extern "C" int ceph_create_with_context(struct ceph_mount_info **cmount, CephContext *cct)
{
- uint64_t nonce = 0;
-
- // 6 bytes of random and 2 bytes of pid
- get_random_bytes((char*)&nonce, sizeof(nonce));
- nonce &= ~0xffff;
- nonce |= (uint64_t)getpid();
-
- *cmount = new struct ceph_mount_info(nonce, cct);
+ *cmount = new struct ceph_mount_info(cct);
return 0;
}
#undef dout_prefix
#define dout_prefix *_dout << "librados: "
-static atomic_t rados_instance;
-
bool librados::RadosClient::ms_get_authorizer(int dest_type,
AuthAuthorizer **authorizer,
bool force_new) {
common_init_finish(cct);
int err;
- uint64_t nonce;
// already connected?
if (state == CONNECTING)
goto out;
err = -ENOMEM;
- nonce = getpid() + (1000000 * (uint64_t)rados_instance.inc());
- messenger = Messenger::create(cct, entity_name_t::CLIENT(-1),
- "radosclient", nonce);
+ messenger = Messenger::create_client_messenger(cct, "radosclient");
if (!messenger)
goto out;
waiting_for_mds_map(NULL)
{
monc = new MonClient(g_ceph_context);
- messenger = Messenger::create(g_ceph_context, entity_name_t::CLIENT(), "mds", getpid());
+ messenger = Messenger::create_client_messenger(g_ceph_context, "mds");
mdsmap = new MDSMap();
osdmap = new OSDMap();
objecter = new Objecter(g_ceph_context, messenger, monc, osdmap, lock, timer, 0, 0);
bool temp_msgr = false;
Messenger* smessenger = NULL;
if (!messenger) {
- messenger = smessenger = Messenger::create(cct,
- entity_name_t::CLIENT(-1),
- "temp_mon_client", getpid());
+ messenger = smessenger = Messenger::create_client_messenger(cct, "temp_mon_client");
messenger->add_dispatcher_head(this);
smessenger->start();
temp_msgr = true;
MonClientPinger *pinger = new MonClientPinger(cct, result_reply);
- Messenger *smsgr = Messenger::create(cct,
- entity_name_t::CLIENT(-1),
- "temp_ping_client", getpid());
+ Messenger *smsgr = Messenger::create_client_messenger(cct, "temp_ping_client");
smsgr->add_dispatcher_head(pinger);
smsgr->start();
return err;
}
- messenger.reset(Messenger::create(cct, entity_name_t::CLIENT(-1),
- "stubclient", getpid()));
+ messenger.reset(Messenger::create_client_messenger(cct, "stubclient"));
assert(messenger.get() != NULL);
messenger->set_default_policy(