From: Patrick Donnelly Date: Thu, 30 Jan 2025 22:08:07 +0000 (-0500) Subject: mgr: excise CephFS client from mgr C++ base X-Git-Tag: v19.2.3~288^2~26 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=801676931591d87773880af4281afe4add4277f9;p=ceph.git mgr: excise CephFS client from mgr C++ base Linking to the client causes two copies of the Client library to be linked in the ceph-mgr when modules also dynamically link to libcephfs via the "cephfs" python library. This creates problems with duplicate boost::locale. Instead, modules should just use the "cephfs" library to send commands to the MDS. Signed-off-by: Patrick Donnelly (cherry picked from commit f20df2eb8545f2a4fc16acdde5edcb611868522e) --- diff --git a/src/mgr/ActivePyModules.cc b/src/mgr/ActivePyModules.cc index c7a8e8054834b..1f5e3f8fde254 100644 --- a/src/mgr/ActivePyModules.cc +++ b/src/mgr/ActivePyModules.cc @@ -53,11 +53,11 @@ ActivePyModules::ActivePyModules( DaemonStateIndex &ds, ClusterState &cs, MonClient &mc, LogChannelRef clog_, LogChannelRef audit_clog_, Objecter &objecter_, - Client &client_, Finisher &f, DaemonServer &server, + Finisher &f, DaemonServer &server, PyModuleRegistry &pmr) : module_config(module_config_), daemon_state(ds), cluster_state(cs), monc(mc), clog(clog_), audit_clog(audit_clog_), objecter(objecter_), - client(client_), finisher(f), + finisher(f), cmd_finisher(g_ceph_context, "cmd_finisher", "cmdfin"), server(server), py_module_registry(pmr) { diff --git a/src/mgr/ActivePyModules.h b/src/mgr/ActivePyModules.h index c48a06ce95e4d..a415405037564 100644 --- a/src/mgr/ActivePyModules.h +++ b/src/mgr/ActivePyModules.h @@ -21,7 +21,6 @@ #include "PyFormatter.h" #include "osdc/Objecter.h" -#include "client/Client.h" #include "common/LogClient.h" #include "mon/MgrMap.h" #include "mon/MonCommand.h" @@ -58,7 +57,6 @@ class ActivePyModules MonClient &monc; LogChannelRef clog, audit_clog; Objecter &objecter; - Client &client; Finisher &finisher; TTLCache ttl_cache; public: @@ -77,7 +75,7 @@ public: std::map store_data, bool mon_provides_kv_sub, DaemonStateIndex &ds, ClusterState &cs, MonClient &mc, - LogChannelRef clog_, LogChannelRef audit_clog_, Objecter &objecter_, Client &client_, + LogChannelRef clog_, LogChannelRef audit_clog_, Objecter &objecter_, Finisher &f, DaemonServer &server, PyModuleRegistry &pmr); ~ActivePyModules(); @@ -85,7 +83,6 @@ public: // FIXME: wrap for send_command? MonClient &get_monc() {return monc;} Objecter &get_objecter() {return objecter;} - Client &get_client() {return client;} PyObject *cacheable_get_python(const std::string &what); PyObject *get_python(const std::string &what); PyObject *get_server_python(const std::string &hostname); diff --git a/src/mgr/BaseMgrModule.cc b/src/mgr/BaseMgrModule.cc index 67d9986ef8e99..bae5d54d74790 100644 --- a/src/mgr/BaseMgrModule.cc +++ b/src/mgr/BaseMgrModule.cc @@ -207,21 +207,11 @@ ceph_send_command(BaseMgrModule *self, PyObject *args, PyObject *kwargs) f->queue(command_c); }); } else if (std::string(type) == "mds") { - int r = self->py_modules->get_client().mds_command( - name, - {cmd_json}, - inbuf, - &command_c->outbl, - &command_c->outs, - new C_OnFinisher(command_c, &self->py_modules->cmd_finisher), - one_shot); - if (r != 0) { - string msg("failed to send command to mds: "); - msg.append(cpp_strerror(r)); - PyEval_RestoreThread(tstate); - PyErr_SetString(PyExc_RuntimeError, msg.c_str()); - return nullptr; - } + string msg("cannot send command to mds via this interface: "); + msg.append(cpp_strerror(-ENOSYS)); + PyEval_RestoreThread(tstate); + PyErr_SetString(PyExc_RuntimeError, msg.c_str()); + return nullptr; } else if (std::string(type) == "pg") { pg_t pgid; if (!pgid.parse(name)) { diff --git a/src/mgr/CMakeLists.txt b/src/mgr/CMakeLists.txt index 4f831e152ff81..ec7f01b3bb4af 100644 --- a/src/mgr/CMakeLists.txt +++ b/src/mgr/CMakeLists.txt @@ -43,7 +43,7 @@ if(WITH_MGR) target_include_directories(ceph-mgr PRIVATE $) target_link_libraries(ceph-mgr - osdc client heap_profiler + osdc heap_profiler global-static ceph-common Boost::python${MGR_PYTHON_VERSION_MAJOR}${MGR_PYTHON_VERSION_MINOR} Python3::Python diff --git a/src/mgr/Mgr.cc b/src/mgr/Mgr.cc index 0154a04e0ef5d..654729c12fce0 100644 --- a/src/mgr/Mgr.cc +++ b/src/mgr/Mgr.cc @@ -14,7 +14,6 @@ #include #include "osdc/Objecter.h" -#include "client/Client.h" #include "common/errno.h" #include "mon/MonClient.h" #include "include/stringify.h" @@ -52,10 +51,9 @@ using std::string; Mgr::Mgr(MonClient *monc_, const MgrMap& mgrmap, PyModuleRegistry *py_module_registry_, Messenger *clientm_, Objecter *objecter_, - Client* client_, LogChannelRef clog_, LogChannelRef audit_clog_) : + LogChannelRef clog_, LogChannelRef audit_clog_) : monc(monc_), objecter(objecter_), - client(client_), client_messenger(clientm_), finisher(g_ceph_context, "Mgr", "mgr-fin"), digest_received(false), @@ -349,7 +347,7 @@ void Mgr::init() py_module_registry->active_start( daemon_state, cluster_state, pre_init_store, mon_allows_kv_sub, - *monc, clog, audit_clog, *objecter, *client, + *monc, clog, audit_clog, *objecter, finisher, server); cluster_state.final_init(); diff --git a/src/mgr/Mgr.h b/src/mgr/Mgr.h index 65931c331f363..b00590881d476 100644 --- a/src/mgr/Mgr.h +++ b/src/mgr/Mgr.h @@ -35,13 +35,11 @@ class MMgrDigest; class MLog; class MServiceMap; class Objecter; -class Client; class Mgr : public AdminSocketHook { protected: MonClient *monc; Objecter *objecter; - Client *client; Messenger *client_messenger; mutable ceph::mutex lock = ceph::make_mutex("Mgr::lock"); @@ -74,7 +72,7 @@ public: Mgr(MonClient *monc_, const MgrMap& mgrmap, PyModuleRegistry *py_module_registry_, Messenger *clientm_, Objecter *objecter_, - Client *client_, LogChannelRef clog_, LogChannelRef audit_clog_); + LogChannelRef clog_, LogChannelRef audit_clog_); ~Mgr(); bool is_initialized() const {return initialized;} diff --git a/src/mgr/MgrStandby.cc b/src/mgr/MgrStandby.cc index 052e68681772b..3fc14d9eb29d7 100644 --- a/src/mgr/MgrStandby.cc +++ b/src/mgr/MgrStandby.cc @@ -52,7 +52,6 @@ MgrStandby::MgrStandby(int argc, const char **argv) : "mgr", Messenger::get_random_nonce())), objecter{g_ceph_context, client_messenger.get(), &monc, poolctx}, - client{client_messenger.get(), &monc, &objecter}, mgrc(g_ceph_context, client_messenger.get(), &monc.monmap), log_client(g_ceph_context, client_messenger.get(), &monc.monmap, LogClient::NO_FLAGS), clog(log_client.create_channel(CLOG_CHANNEL_CLUSTER)), @@ -131,7 +130,6 @@ int MgrStandby::init() // Initialize Messenger client_messenger->add_dispatcher_tail(this); client_messenger->add_dispatcher_head(&objecter); - client_messenger->add_dispatcher_tail(&client); client_messenger->start(); poolctx.start(2); @@ -198,7 +196,6 @@ int MgrStandby::init() objecter.set_client_incarnation(0); objecter.init(); objecter.start(); - client.init(); timer.init(); py_module_registry.init(); @@ -369,7 +366,7 @@ void MgrStandby::handle_mgr_map(ref_t mmap) dout(1) << "Activating!" << dendl; active_mgr.reset(new Mgr(&monc, map, &py_module_registry, client_messenger.get(), &objecter, - &client, clog, audit_clog)); + clog, audit_clog)); active_mgr->background_init(new LambdaContext( [this](int r){ // Advertise our active-ness ASAP instead of waiting for diff --git a/src/mgr/MgrStandby.h b/src/mgr/MgrStandby.h index 5d238c8557796..35ce43c0c8085 100644 --- a/src/mgr/MgrStandby.h +++ b/src/mgr/MgrStandby.h @@ -21,7 +21,6 @@ #include "common/Timer.h" #include "common/LogClient.h" -#include "client/Client.h" #include "mon/MonClient.h" #include "osdc/Objecter.h" #include "PyModuleRegistry.h" @@ -44,7 +43,6 @@ protected: MonClient monc; std::unique_ptr client_messenger; Objecter objecter; - Client client; MgrClient mgrc; diff --git a/src/mgr/PyModuleRegistry.cc b/src/mgr/PyModuleRegistry.cc index eb2d2babe75fa..3c76f66a24ce1 100644 --- a/src/mgr/PyModuleRegistry.cc +++ b/src/mgr/PyModuleRegistry.cc @@ -179,7 +179,7 @@ void PyModuleRegistry::active_start( const std::map &kv_store, bool mon_provides_kv_sub, MonClient &mc, LogChannelRef clog_, LogChannelRef audit_clog_, - Objecter &objecter_, Client &client_, Finisher &f, + Objecter &objecter_, Finisher &f, DaemonServer &server) { std::lock_guard locker(lock); @@ -202,7 +202,7 @@ void PyModuleRegistry::active_start( module_config, kv_store, mon_provides_kv_sub, ds, cs, mc, - clog_, audit_clog_, objecter_, client_, f, server, + clog_, audit_clog_, objecter_, f, server, *this)); for (const auto &i : modules) { diff --git a/src/mgr/PyModuleRegistry.h b/src/mgr/PyModuleRegistry.h index 294fc7a8277f0..b5549e67995b8 100644 --- a/src/mgr/PyModuleRegistry.h +++ b/src/mgr/PyModuleRegistry.h @@ -114,7 +114,7 @@ public: const std::map &kv_store, bool mon_provides_kv_sub, MonClient &mc, LogChannelRef clog_, LogChannelRef audit_clog_, - Objecter &objecter_, Client &client_, Finisher &f, + Objecter &objecter_, Finisher &f, DaemonServer &server); void standby_start(MonClient &mc, Finisher &f);