From: Alfonso Martínez Date: Tue, 2 Mar 2021 15:10:16 +0000 (+0100) Subject: mgr/BaseMgrModule: add optional inbuf param to ceph_send_command. X-Git-Tag: v15.2.10~9^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F39436%2Fhead;p=ceph.git mgr/BaseMgrModule: add optional inbuf param to ceph_send_command. BaseMgrModule.cc: ceph_send_command: add inbuf param for handling input file content. Fixes: https://tracker.ceph.com/issues/48355 Signed-off-by: Ernesto Puerta (cherry picked from commit dc37e0fdb1ea5187aea42303f0bfe27aadd8d64d) --- diff --git a/src/mgr/BaseMgrModule.cc b/src/mgr/BaseMgrModule.cc index 3ac66e9a9e77..54d555a41f91 100644 --- a/src/mgr/BaseMgrModule.cc +++ b/src/mgr/BaseMgrModule.cc @@ -125,12 +125,20 @@ ceph_send_command(BaseMgrModule *self, PyObject *args) char *cmd_json = nullptr; char *tag = nullptr; + char *inbuf_ptr = nullptr; + Py_ssize_t inbuf_len = 0; + bufferlist inbuf = {}; + PyObject *completion = nullptr; - if (!PyArg_ParseTuple(args, "Ossss:ceph_send_command", - &completion, &type, &name, &cmd_json, &tag)) { + if (!PyArg_ParseTuple(args, "Ossssz#:ceph_send_command", + &completion, &type, &name, &cmd_json, &tag, &inbuf_ptr, &inbuf_len)) { return nullptr; } + if (inbuf_ptr) { + inbuf.append(inbuf_ptr, (unsigned)inbuf_len); + } + auto set_fn = PyObject_GetAttrString(completion, "complete"); if (set_fn == nullptr) { ceph_abort(); // TODO raise python exception instead @@ -164,7 +172,7 @@ ceph_send_command(BaseMgrModule *self, PyObject *args) self->py_modules->get_monc().start_mon_command( name, {cmd_json}, - {}, + inbuf, &command_c->outbl, &command_c->outs, new C_OnFinisher(c, &self->py_modules->cmd_finisher)); @@ -184,7 +192,7 @@ ceph_send_command(BaseMgrModule *self, PyObject *args) self->py_modules->get_objecter().osd_command( osd_id, {cmd_json}, - {}, + inbuf, &tid, &command_c->outbl, &command_c->outs, @@ -193,7 +201,7 @@ ceph_send_command(BaseMgrModule *self, PyObject *args) 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)); @@ -219,7 +227,7 @@ ceph_send_command(BaseMgrModule *self, PyObject *args) self->py_modules->get_objecter().pg_command( pgid, {cmd_json}, - {}, + inbuf, &tid, &command_c->outbl, &command_c->outs, @@ -349,7 +357,7 @@ ceph_set_health_checks(BaseMgrModule *self, PyObject *args) self->py_modules->set_health_checks(self->this_module->get_name(), std::move(out_checks)); PyEval_RestoreThread(tstate); - + Py_RETURN_NONE; } diff --git a/src/pybind/mgr/ceph_module.pyi b/src/pybind/mgr/ceph_module.pyi index d71259c0dade..009c1f2eafd1 100644 --- a/src/pybind/mgr/ceph_module.pyi +++ b/src/pybind/mgr/ceph_module.pyi @@ -49,7 +49,7 @@ class BaseMgrModule(object): def _ceph_get_latest_counter(self, svc_type, svc_name, path):... def _ceph_get_metadata(self, svc_type, svc_id):... def _ceph_get_daemon_status(self, svc_type, svc_id):... - def _ceph_send_command(self, *args, **kwargs):... + def _ceph_send_command(self, result, svc_type, svc_id, command, tag, inbuf):... def _ceph_set_health_checks(self, checks):... def _ceph_get_mgr_id(self):... def _ceph_get_option(self, key):...