]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: add simplified messenger constructor
authorJosh Durgin <jdurgin@redhat.com>
Mon, 21 Sep 2015 22:20:53 +0000 (15:20 -0700)
committerNathan Cutler <ncutler@suse.com>
Sat, 26 Sep 2015 14:04:42 +0000 (16:04 +0200)
Several callers create messengers using exactly the same parameters:

- reading the ms type from cct that is also passed in
- a default entity_name_t::CLIENT
- the default features

Additionally, the nonce should be randomized and not depend on
e.g. pid, as it does in several callers now. Clients running in
containers can easily have pid collisions, leading to hangs, so
randomize the nonce in this simplified constructor rather than
duplicating that logic in every caller.

Daemons have meaningful entity_name_ts, and monitors currently depend
on using 0 as a nonce, so make this simple constructer
client-specific.

Related: #13032
Signed-off-by: Josh Durgin <jdurgin@redhat.com>
(cherry picked from commit e3785b0b5fbff870adbd5f121021b671912386cf)

Conflicts:
src/msg/Messenger.cc
            - different #includes in firefly
            - different Messenger::create() arguments in firefly

src/msg/Messenger.cc
src/msg/Messenger.h

index b80782de518dbbb33991170cf5b4252ced5d4ef2..5dc69a68bfcf01b7f75b04d83e1b47e9dbf061b3 100644 (file)
@@ -4,6 +4,13 @@
 
 #include "SimpleMessenger.h"
 
+Messenger *Messenger::create_client_messenger(CephContext *cct, string lname)
+{
+  uint64_t nonce = 0;
+  get_random_bytes((char*)&nonce, sizeof(nonce));
+  return Messenger::create(cct, entity_name_t::CLIENT(), lname, nonce);
+}
+
 Messenger *Messenger::create(CephContext *cct,
                             entity_name_t name,
                             string lname,
index 42feaf227dfd84a69df793f88ebe43d55ce44aeb..82ac8e640261b07f829d5e141d53f74952d2caa3 100644 (file)
@@ -147,6 +147,21 @@ public:
                           string lname,
                            uint64_t nonce);
 
+  /**
+   * create a new messenger
+   *
+   * Create a new messenger instance.
+   * Same as the above, but a slightly simpler interface for clients:
+   * - Generate a random nonce
+   * - use the default feature bits
+   * - get the messenger type from cct
+   * - use the client entity_type
+   *
+   * @param cct context
+   * @param lname logical name of the messenger in this process (e.g., "client")
+   */
+  static Messenger *create_client_messenger(CephContext *cct, string lname);
+
   /**
    * @defgroup Accessors
    * @{