ceph::mutex mylock = ceph::make_mutex("admin_socket::do_accept::mylock");
ceph::condition_variable mycond;
C_SafeCond fin(mylock, mycond, &done, &rval);
+ bufferlist empty;
execute_command(
cmdvec,
+ empty /* inbl */,
[&rs, &out, &fin](int r, const std::string& err, bufferlist& outbl) {
rs = err;
out.claim(outbl);
bufferlist outbl;
execute_command(
m->cmd,
+ m->get_data(),
[m](int r, const std::string& err, bufferlist& outbl) {
auto reply = new MCommandReply(r, err);
reply->set_tid(m->get_tid());
void AdminSocket::execute_command(
const std::vector<std::string>& cmdvec,
+ const bufferlist& inbl,
std::function<void(int,const std::string&,bufferlist&)> on_finish)
{
cmdmap_t cmdmap;
if (!validate(prefix, cmdmap, empty)) {
on_finish(-EINVAL, "invalid command json", empty);
} else {
- hook->call_async(prefix, cmdmap, format, on_finish);
+ hook->call_async(prefix, cmdmap, format, inbl, on_finish);
}
l.lock();
in_hook = false;
class AdminSocketHook {
public:
+ // NOTE: the sync handler doesn't take an input buffer currently because
+ // no users need it yet.
virtual int call(std::string_view command, const cmdmap_t& cmdmap,
std::string_view format, ceph::buffer::list& out) = 0;
virtual void call_async(
std::string_view command,
const cmdmap_t& cmdmap,
std::string_view format,
+ const bufferlist& inbl,
std::function<void(int,const std::string&,bufferlist&)> on_finish) {
// by default, call the synchronous handler and then finish
bufferlist out;
void chmod(mode_t mode);
void execute_command(
const std::vector<std::string>& cmd,
+ const bufferlist& inbl,
std::function<void(int,const std::string&,bufferlist&)> on_fin);
void queue_tell_command(ref_t<MCommand> m);
std::string_view prefix,
const cmdmap_t& cmdmap,
std::string_view format,
+ const bufferlist& inbl,
std::function<void(int,const std::string&,bufferlist&)> on_finish) override {
stringstream ss;
try {
- osd->asok_command(prefix, cmdmap, format, on_finish);
+ osd->asok_command(prefix, cmdmap, format, inbl, on_finish);
} catch (const bad_cmd_get& e) {
bufferlist empty;
on_finish(-EINVAL, e.what(), empty);
void OSD::asok_command(
std::string_view prefix, const cmdmap_t& cmdmap,
std::string_view format,
+ const bufferlist& inbl,
std::function<void(int,const std::string&,bufferlist&)> on_finish)
{
int ret = 0;
std::string_view prefix,
const cmdmap_t& cmdmap,
std::string_view format,
+ const bufferlist& inbl,
std::function<void(int,const std::string&,bufferlist&)> on_finish);
public: