summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoao Eduardo Luis <joao.luis@inktank.com>2013-10-15 17:49:40 +0100
committerJoao Eduardo Luis <joao.luis@inktank.com>2013-10-16 01:42:46 +0100
commit1068831e3491c6353cd0202130546236d01d796f (patch)
tree84bcfa8249cf2b2fefcfdcc4363a91a23d3f3471
parentb97dc9c72890fc1277320d886cd165248ed3b7d3 (diff)
downloadceph-1068831e3491c6353cd0202130546236d01d796f.tar.gz
librados: support pinging a monitor without auth via RadosClient
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
-rw-r--r--src/include/rados/librados.h5
-rw-r--r--src/librados/RadosClient.cc12
-rw-r--r--src/librados/RadosClient.h1
-rw-r--r--src/librados/librados.cc12
4 files changed, 30 insertions, 0 deletions
diff --git a/src/include/rados/librados.h b/src/include/rados/librados.h
index 515663c2335..af4ee386343 100644
--- a/src/include/rados/librados.h
+++ b/src/include/rados/librados.h
@@ -224,6 +224,11 @@ int rados_create2(rados_t *pcluster, const char *const clustername,
int rados_create_with_context(rados_t *cluster, rados_config_t cct);
/**
+ *
+ */
+int rados_ping_monitor(rados_t cluster, char *buf, size_t len);
+
+/**
* Connect to the cluster.
*
* @note BUG: Before calling this, calling a function that communicates with the
diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc
index 1be3ebd10f9..dbe3eff6dce 100644
--- a/src/librados/RadosClient.cc
+++ b/src/librados/RadosClient.cc
@@ -131,6 +131,18 @@ int librados::RadosClient::get_fsid(std::string *s)
return 0;
}
+int librados::RadosClient::ping_monitor(string *result)
+{
+ MonClient ping_monc(cct);
+ int err = ping_monc.build_initial_monmap();
+ if (err < 0) {
+ return err;
+ }
+
+ err = ping_monc.ping_monitor(result);
+ return err;
+}
+
int librados::RadosClient::connect()
{
common_init_finish(cct);
diff --git a/src/librados/RadosClient.h b/src/librados/RadosClient.h
index 2244788d876..5c19882e14e 100644
--- a/src/librados/RadosClient.h
+++ b/src/librados/RadosClient.h
@@ -77,6 +77,7 @@ public:
RadosClient(CephContext *cct_);
~RadosClient();
+ int ping_monitor(string *result);
int connect();
void shutdown();
diff --git a/src/librados/librados.cc b/src/librados/librados.cc
index 217a0a7bfb2..8a3b686b896 100644
--- a/src/librados/librados.cc
+++ b/src/librados/librados.cc
@@ -30,6 +30,7 @@
#include <cls/lock/cls_lock_client.h>
#include <string>
+#include <cstring>
#include <map>
#include <set>
#include <vector>
@@ -1677,6 +1678,17 @@ extern "C" rados_config_t rados_cct(rados_t cluster)
return (rados_config_t)client->cct;
}
+extern "C" int rados_ping_monitor(rados_t cluster, char *buf, size_t len)
+{
+ librados::RadosClient *client = (librados::RadosClient *)cluster;
+ string str;
+ int ret = client->ping_monitor(&str);
+ if (ret == 0 && !str.empty() && buf && len > 0) {
+ std::strncpy(buf, str.c_str(), len);
+ }
+ return ret;
+}
+
extern "C" int rados_connect(rados_t cluster)
{
librados::RadosClient *client = (librados::RadosClient *)cluster;