]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind: rados: ping a monitor via librados
authorJoao Eduardo Luis <joao.luis@inktank.com>
Tue, 15 Oct 2013 16:49:57 +0000 (17:49 +0100)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Wed, 23 Oct 2013 01:54:40 +0000 (02:54 +0100)
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/pybind/rados.py

index 0977bd08bce8960b079a457e8e15ea4b314a8476..fecf4bb16d00fe2399113b259a12347b467e0066 100644 (file)
@@ -366,6 +366,37 @@ Rados object in state %s." % (self.state))
         if (ret != 0):
             raise make_ex(ret, "error calling conf_set")
 
+
+    def ping_monitor(self, mon_id):
+      """
+      Ping a monitor to assess liveness
+
+      May be used as a simply way to assess liveness, or to obtain
+      informations about the monitor in a simple way even in the
+      absence of quorum.
+
+      :param mon_id: the ID portion of the monitor's name (i.e., mon.<ID>)
+      :type mon_id: str
+      :returns: the string reply from the monitor
+      """
+
+      self.require_state("configuring", "connected")
+
+      outstrp = pointer(pointer(c_char()))
+      outstrlen = c_long()
+
+      ret = run_in_thread(self.librados.rados_ping_monitor,
+                          (self.cluster, c_char_p(mon_id),
+                           outstrp, byref(outstrlen)))
+
+      my_outstr = outstrp.contents[:(outstrlen.value)]
+      if outstrlen.value:
+        run_in_thread(self.librados.rados_buffer_free, (outstrp.contents,))
+
+      if ret != 0:
+        raise make_ex(ret, "error calling ping_monitor")
+      return my_outstr
+
     def connect(self, timeout=0):
         """
         Connect to the cluster.