]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/monc: add subcription helpers
authorKefu Chai <kchai@redhat.com>
Fri, 4 Jan 2019 12:56:25 +0000 (20:56 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 18 Jan 2019 04:30:15 +0000 (12:30 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/mon/MonClient.cc
src/crimson/mon/MonClient.h

index 2d1dde9768fe4c9c58e909afcce313f1b5658259..ff32b97d5536ac7a298f9d56e38ad7e7859d4cc2 100644 (file)
@@ -10,6 +10,8 @@
 #include "auth/AuthMethodList.h"
 #include "auth/RotatingKeyRing.h"
 
+#include "common/hostname.h"
+
 #include "crimson/auth/KeyRing.h"
 #include "crimson/common/config_proxy.h"
 #include "crimson/common/log.h"
@@ -26,6 +28,7 @@
 #include "messages/MMonGetVersion.h"
 #include "messages/MMonGetVersionReply.h"
 #include "messages/MMonMap.h"
+#include "messages/MMonSubscribe.h"
 #include "messages/MMonSubscribeAck.h"
 
 namespace {
@@ -543,4 +546,47 @@ Client::run_command(const std::vector<std::string>& cmd,
   });
 }
 
+seastar::future<> Client::send_message(MessageRef m)
+{
+  return active_con->get_conn()->send(m);
+}
+
+bool Client::sub_want(const std::string& what, version_t start, unsigned flags)
+{
+  return sub.want(what, start, flags);
+}
+
+void Client::sub_got(const std::string& what, version_t have)
+{
+  sub.got(what, have);
+}
+
+void Client::sub_unwant(const std::string& what)
+{
+  sub.unwant(what);
+}
+
+bool Client::sub_want_increment(const std::string& what,
+                                version_t start,
+                                unsigned flags)
+{
+  return sub.inc_want(what, start, flags);
+}
+
+seastar::future<> Client::renew_subs()
+{
+  if (!sub.have_new()) {
+    logger().warn("{} - empty", __func__);
+    return seastar::now();
+  }
+  logger().trace("{}", __func__);
+
+  auto m = make_message<MMonSubscribe>();
+  m->what = sub.get_subs();
+  m->hostname = ceph_get_short_hostname();
+  return active_con->get_conn()->send(m).then([this] {
+    sub.renewed();
+  });
+}
+
 } // namespace ceph::mon
index c47f9e4ded99a95496d29be9cc5f9bee17a868d9..fe15b341614406afdfab48def6c50bb7dfe388b7 100644 (file)
@@ -74,6 +74,12 @@ public:
   get_version_t get_version(const std::string& map);
   command_result_t run_command(const std::vector<std::string>& cmd,
                               const bufferlist& bl);
+  seastar::future<> send_message(MessageRef);
+  bool sub_want(const std::string& what, version_t start, unsigned flags);
+  void sub_got(const std::string& what, version_t have);
+  void sub_unwant(const std::string& what);
+  bool sub_want_increment(const std::string& what, version_t start, unsigned flags);
+  seastar::future<> renew_subs();
 
 private:
   void tick();