retry_sys_call(::close, connection_fd);
return false;
}
- cmd_getval(m_cct, cmdmap, "format", format);
+ try {
+ cmd_getval(m_cct, cmdmap, "format", format);
+ cmd_getval(m_cct, cmdmap, "prefix", c);
+ } catch (const bad_cmd_get& e) {
+ retry_sys_call(::close, connection_fd);
+ return false;
+ }
if (format != "json" && format != "json-pretty" &&
format != "xml" && format != "xml-pretty")
format = "json-pretty";
- cmd_getval(m_cct, cmdmap, "prefix", c);
std::unique_lock l(lock);
decltype(hooks)::iterator p;
bool call(std::string_view command, const cmdmap_t& cmdmap,
std::string_view format, bufferlist& out) override {
- m_cct->do_command(command, cmdmap, format, &out);
+ try {
+ m_cct->do_command(command, cmdmap, format, &out);
+ } catch (const bad_cmd_get& e) {
+ return false;
+ }
return true;
}
};
std::ostream& os)
{
Value v;
- if (!cmd_getval(cct, cmdmap, string(name), v)) {
- if constexpr (is_vector) {
- // an empty list is acceptable.
- return true;
- } else {
- if (auto req = desc.find("req");
- req != end(desc) && req->second == "false") {
- return true;
- } else {
- os << "missing required parameter: '" << name << "'";
- return false;
+ try {
+ if (!cmd_getval(cct, cmdmap, string(name), v)) {
+ if constexpr (is_vector) {
+ // an empty list is acceptable.
+ return true;
+ } else {
+ if (auto req = desc.find("req");
+ req != end(desc) && req->second == "false") {
+ return true;
+ } else {
+ os << "missing required parameter: '" << name << "'";
+ return false;
+ }
}
}
+ } catch (const bad_cmd_get& e) {
+ return false;
}
auto validate = [&](const T& value) {
if constexpr (is_same_v<std::string, T>) {