char *client_address,
uint32_t expire_seconds);
+/**
+ * Gets addresses of the RADOS session, suitable for blacklisting.
+ *
+ * @param cluster cluster handle
+ * @param addrs the output string.
+ * @returns 0 on success, negative error code on failure
+ */
+CEPH_RADOS_API int rados_getaddrs(rados_t cluster, char** addrs);
+
CEPH_RADOS_API void rados_set_osdmap_full_try(rados_ioctx_t io);
CEPH_RADOS_API void rados_unset_osdmap_full_try(rados_ioctx_t io);
objecter->blacklist_self(set);
}
+std::string librados::RadosClient::get_addrs() const {
+ CachedStackStringStream cos;
+ *cos << messenger->get_myaddrs();
+ return std::string(cos->strv());
+}
+
int librados::RadosClient::blacklist_add(const string& client_address,
uint32_t expire_seconds)
{
bool put();
void blacklist_self(bool set);
+ std::string get_addrs() const;
+
int service_daemon_register(
const std::string& service, ///< service name (e.g., 'rgw')
const std::string& name, ///< daemon name (e.g., 'gwfoo')
}
LIBRADOS_C_API_BASE_DEFAULT(rados_blacklist_add);
+extern "C" int _rados_getaddrs(rados_t cluster, char** addrs)
+{
+ librados::RadosClient *radosp = (librados::RadosClient *)cluster;
+ auto s = radosp->get_addrs();
+ *addrs = strdup(s.c_str());
+ return 0;
+}
+LIBRADOS_C_API_BASE_DEFAULT(rados_getaddrs);
+
extern "C" void _rados_set_osdmap_full_try(rados_ioctx_t io)
{
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
int rados_cluster_stat(rados_t cluster, rados_cluster_stat_t *result)
int rados_cluster_fsid(rados_t cluster, char *buf, size_t len)
int rados_blacklist_add(rados_t cluster, char *client_address, uint32_t expire_seconds)
+ int rados_getaddrs(rados_t cluster, char** addrs)
int rados_application_enable(rados_ioctx_t io, const char *app_name,
int force)
void rados_set_osdmap_full_try(rados_ioctx_t io)
for key, value in conf.items():
self.conf_set(key, value)
+ def get_addrs(self):
+ """
+ Get associated client addresses with this RADOS session.
+ """
+ self.require_state("configuring", "connected")
+
+ cdef:
+ char* addrs = NULL
+
+ try:
+
+ with nogil:
+ ret = rados_getaddrs(self.cluster, &addrs)
+ if ret:
+ raise make_ex(ret, "error calling getaddrs")
+
+ return decode_cstr(addrs)
+ finally:
+ free(addrs)
+
def require_state(self, *args):
"""
Checks if the Rados object is in a special state