// Commands shared between OSD's console and admin console:
namespace ceph::osd_cmds {
-int heap(CephContext& cct, const cmdmap_t& cmdmap, Formatter& f, std::ostream& os);
+int heap(CephContext& cct,
+ const cmdmap_t& cmdmap,
+ std::ostream& outos,
+ std::ostream& erros);
} // namespace ceph::osd_cmds
}
else if (prefix == "heap") {
- ret = ceph::osd_cmds::heap(*cct, cmdmap, *f, ss);
+ std::stringstream outss;
+ ret = ceph::osd_cmds::heap(*cct, cmdmap, outss, ss);
+ outbl.append(outss);
}
else if (prefix == "debug dump_missing") {
if (is_smallest_thread_index) {
sdata->shard_lock.unlock();
handle_oncommits(oncommits);
- return;
+ sdata->shard_lock.lock();
}
std::unique_lock wait_lock{sdata->sdata_wait_lock};
auto future_time = ceph::real_clock::from_double(*when_ready);
// Reapply default wq timeouts
osd->cct->get_heartbeat_map()->reset_timeout(hb,
timeout_interval, suicide_interval);
+ // Populate the oncommits list if there were any additions
+ // to the context_queue while we were waiting
+ if (is_smallest_thread_index) {
+ sdata->context_queue.move_to(oncommits);
+ }
}
} // while
namespace ceph::osd_cmds {
-int heap(CephContext& cct, const cmdmap_t& cmdmap, Formatter& f,
- std::ostream& os)
+int heap(CephContext& cct,
+ const cmdmap_t& cmdmap,
+ std::ostream& outos,
+ std::ostream& erros)
{
if (!ceph_using_tcmalloc()) {
- os << "could not issue heap profiler command -- not using tcmalloc!";
+ erros << "could not issue heap profiler command -- not using tcmalloc!";
return -EOPNOTSUPP;
}
string cmd;
if (!cmd_getval(cmdmap, "heapcmd", cmd)) {
- os << "unable to get value for command \"" << cmd << "\"";
+ erros << "unable to get value for command \"" << cmd << "\"";
return -EINVAL;
}
cmd_vec.push_back(val);
}
- ceph_heap_profiler_handle_command(cmd_vec, os);
+ ceph_heap_profiler_handle_command(cmd_vec, outos);
return 0;
}