cl->do_log(prio, message);
}
-void ActivePyModules::register_client(std::string_view name, std::string addrs)
+void ActivePyModules::register_client(std::string_view name, std::string addrs, bool replace)
{
entity_addrvec_t addrv;
addrv.parse(addrs.data());
- dout(7) << "registering msgr client handle " << addrv << dendl;
- py_module_registry.register_client(name, std::move(addrv));
+ dout(7) << "registering msgr client handle " << addrv << " (replace=" << replace << ")" << dendl;
+ py_module_registry.register_client(name, std::move(addrv), replace);
}
void ActivePyModules::unregister_client(std::string_view name, std::string addrs)
void clear_all_progress_events();
void get_progress_events(std::map<std::string,ProgressEvent>* events);
- void register_client(std::string_view name, std::string addrs);
+ void register_client(std::string_view name, std::string addrs, bool replace);
void unregister_client(std::string_view name, std::string addrs);
void config_notify();
static PyObject*
ceph_register_client(BaseMgrModule *self, PyObject *args)
{
- char *addrs = nullptr;
- if (!PyArg_ParseTuple(args, "s:ceph_register_client", &addrs)) {
+ const char* _name = nullptr;
+ char* addrs = nullptr;
+ int replace = 0;
+ if (!PyArg_ParseTuple(args, "zsp:ceph_register_client", &_name, &addrs, &replace)) {
return nullptr;
}
+ auto name = _name ? std::string(_name) : std::string(self->this_module->get_name());
without_gil([&] {
- self->py_modules->register_client(self->this_module->get_name(), addrs);
+ self->py_modules->register_client(name, addrs, replace);
});
Py_RETURN_NONE;
}
static PyObject*
ceph_unregister_client(BaseMgrModule *self, PyObject *args)
{
- char *addrs = nullptr;
- if (!PyArg_ParseTuple(args, "s:ceph_unregister_client", &addrs)) {
+ const char* _name = nullptr;
+ char* addrs = nullptr;
+ if (!PyArg_ParseTuple(args, "zs:ceph_unregister_client", &_name, &addrs)) {
return nullptr;
}
+ auto name = _name ? std::string(_name) : std::string(self->this_module->get_name());
without_gil([&] {
- self->py_modules->unregister_client(self->this_module->get_name(), addrs);
+ self->py_modules->unregister_client(name, addrs);
});
Py_RETURN_NONE;
}
entity_addrvec_t addrv;
addrv.parse(ident);
ident = (char*)realloc(ident, 0);
- py_module_registry->register_client("libcephsqlite", addrv);
+ py_module_registry->register_client("libcephsqlite", addrv, true);
}
#endif
return active_modules->get_services();
}
- void register_client(std::string_view name, entity_addrvec_t addrs)
+ void register_client(std::string_view name, entity_addrvec_t addrs, bool replace)
{
std::lock_guard l(lock);
- clients.emplace(std::string(name), std::move(addrs));
+ auto n = std::string(name);
+ if (replace) {
+ clients.erase(n);
+ }
+ clients.emplace(n, std::move(addrs));
}
void unregister_client(std::string_view name, const entity_addrvec_t& addrs)
{
def _ceph_remove_mds_perf_query(self, query_id: int) -> None: ...
def _ceph_reregister_mds_perf_queries(self) -> None: ...
def _ceph_get_mds_perf_counters(self, query_id: int) -> Optional[Dict[str, List[PerfCounterT]]]: ...
- def _ceph_unregister_client(self, addrs: str) -> None: ...
- def _ceph_register_client(self, addrs: str) -> None: ...
+ def _ceph_unregister_client(self, name: Optional[str], addrs: str) -> None: ...
+ def _ceph_register_client(self, name: Optional[str], addrs: str, replace: Optional[bool]) -> None: ...
def _ceph_is_authorized(self, arguments: Dict[str, str]) -> bool: ...
def _ceph_get_daemon_health_metrics(self) -> Dict[str, List[Dict[str, Any]]]: ...
if self._rados:
addrs = self._rados.get_addrs()
self._rados.shutdown()
- self._ceph_unregister_client(addrs)
+ self._ceph_unregister_client(None, addrs)
self._rados = None
@API.expose
ctx_capsule = self.get_context()
self._rados = rados.Rados(context=ctx_capsule)
self._rados.connect()
- self._ceph_register_client(self._rados.get_addrs())
+ self._ceph_register_client(None, self._rados.get_addrs(), False)
return self._rados
@staticmethod
logger.debug("CephFS mounting...")
self.fs.mount(filesystem_name=self.fs_name.encode('utf-8'))
logger.debug("Connection to cephfs '{0}' complete".format(self.fs_name))
- self.mgr._ceph_register_client(self.fs.get_addrs())
+ self.mgr._ceph_register_client(None, self.fs.get_addrs(), False)
def disconnect(self) -> None:
try:
logger.info("disconnecting from cephfs '{0}'".format(self.fs_name))
addrs = self.fs.get_addrs()
self.fs.shutdown()
- self.mgr._ceph_unregister_client(addrs)
+ self.mgr._ceph_unregister_client(None, addrs)
self.fs = None
except Exception as e:
logger.debug("disconnect: ({0})".format(e))