diff options
author | Joao Eduardo Luis <joao.luis@inktank.com> | 2013-10-15 17:49:40 +0100 |
---|---|---|
committer | Joao Eduardo Luis <joao.luis@inktank.com> | 2013-10-16 01:42:46 +0100 |
commit | 1068831e3491c6353cd0202130546236d01d796f (patch) | |
tree | 84bcfa8249cf2b2fefcfdcc4363a91a23d3f3471 | |
parent | b97dc9c72890fc1277320d886cd165248ed3b7d3 (diff) | |
download | ceph-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.h | 5 | ||||
-rw-r--r-- | src/librados/RadosClient.cc | 12 | ||||
-rw-r--r-- | src/librados/RadosClient.h | 1 | ||||
-rw-r--r-- | src/librados/librados.cc | 12 |
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; |