tell_result_t{-EINVAL, "invalid command json", std::move(out)});
}
DEBUG("validated {} {}", cmd, os.str());
- return parsed->hook.call(parsed->params, parsed->format, std::move(buf));
+ auto owned = std::move(*parsed);
+ return seastar::do_with(std::move(owned), std::move(buf),
+ [](const parsed_command_t& parsed,
+ ceph::bufferlist& buf) mutable {
+ return parsed.hook.call(parsed.params, parsed.format, std::move(buf));
+ });
} else {
DEBUG("failed to parse");
auto& result = std::get<tell_result_t>(maybe_parsed);
}
// am i the primary for this pg?
const auto osdmap = osd.get_shard_services().get_map();
+ if (!osdmap || osdmap->get_epoch() == 0) {
+ return seastar::make_ready_future<tell_result_t>(tell_result_t{
+ -EAGAIN, "osdmap is not ready"});
+ }
spg_t spg_id;
if (!osdmap->get_primary_shard(pgid, &spg_id)) {
return seastar::make_ready_future<tell_result_t>(tell_result_t{