The EC recovery backend needs `inc_osd_stat_repaired()`.
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
{}
seastar::future<tell_result_t> call(const cmdmap_t&,
std::string_view format,
- ceph::bufferlist&& input) const final
+ ceph::bufferlist&&) const final
{
LOG_PREFIX(AdminSocketHook::FlushPgStatsHook);
DEBUG("");
- uint64_t seq = osd.send_pg_stats();
- unique_ptr<Formatter> f{Formatter::create(format, "json-pretty", "json-pretty")};
- f->dump_unsigned("stat_seq", seq);
- co_return std::move(f);
+ return osd.send_pg_stats().then([format](uint64_t seq) {
+ unique_ptr<Formatter> f{Formatter::create(format, "json-pretty", "json-pretty")};
+ f->dump_unsigned("stat_seq", seq);
+ return seastar::make_ready_future<tell_result_t>(std::move(f));
+ });
}
private:
void OSD::update_stats()
{
- osd_stat_seq++;
- osd_stat.up_from = get_shard_services().get_up_epoch();
- osd_stat.hb_peers = heartbeat->get_peers();
- osd_stat.seq = (
- static_cast<uint64_t>(get_shard_services().get_up_epoch()) << 32
- ) | osd_stat_seq;
gate.dispatch_in_background("statfs", *this, [this] {
- (void) store.stat().then([this](store_statfs_t&& st) {
- osd_stat.statfs = st;
+ return store.stat().then([this](store_statfs_t&& st) {
+ return get_shard_services().update_osd_stat(
+ get_shard_services().get_up_epoch(),
+ heartbeat->get_peers(),
+ st);
});
});
+
}
seastar::future<MessageURef> OSD::get_stats()
{
// MPGStats::had_map_for is not used since PGMonitor was removed
auto m = crimson::make_message<MPGStats>(monc->get_fsid(), osdmap->get_epoch());
- m->osd_stat = osd_stat;
- return pg_shard_manager.get_pg_stats(
- ).then([this, m=std::move(m)](auto &&stats) mutable {
+ return get_shard_services().get_osd_stat().then([this, m=m.get()](auto&& osd_stat) {
+ m->osd_stat = std::move(osd_stat);
+ return pg_shard_manager.get_pg_stats();
+ }).then([this, m=std::move(m)](auto &&stats) mutable {
min_last_epoch_clean = osdmap->get_epoch();
min_last_epoch_clean_pgs.clear();
std::set<int64_t> pool_set;
});
}
-uint64_t OSD::send_pg_stats()
+seastar::future<uint64_t> OSD::send_pg_stats()
{
- // mgr client sends the report message in background
- mgrc->report();
- return osd_stat.seq;
+ return get_shard_services().get_osd_stat().then([this](auto&& osd_stat) {
+ // mgr client sends the report message in background
+ mgrc->report();
+ return osd_stat.seq;
+ });
}
seastar::future<> OSD::handle_osd_map(Ref<MOSDMap> m)
// mgr::WithStats methods
// pg statistics including osd ones
- osd_stat_t osd_stat;
- uint32_t osd_stat_seq = 0;
epoch_t min_last_epoch_clean = 0;
// which pgs were scanned for min_lec
std::vector<pg_t> min_last_epoch_clean_pgs;
void print(std::ostream&) const;
/// @return the seq id of the pg stats being sent
- uint64_t send_pg_stats();
+ seastar::future<uint64_t> send_pg_stats();
auto &get_shard_services() {
return shard_services.local();
FORWARD_TO_OSD_SINGLETON(store_maps)
FORWARD_TO_OSD_SINGLETON(trim_maps)
+ // osd stats
+ FORWARD_TO_OSD_SINGLETON(get_osd_stat)
+
seastar::future<> set_up_epoch(epoch_t e);
seastar::future<> set_superblock(OSDSuperblock superblock);
}
}
+void OSDSingletonState::update_osd_stat(
+ epoch_t up_epoch,
+ const Heartbeat::osds_t& peers,
+ const store_statfs_t& st)
+{
+ osd_stat_seq++;
+ osd_stat.up_from = up_epoch;
+ osd_stat.hb_peers = peers;
+ osd_stat.statfs = st;
+ osd_stat.seq = (static_cast<uint64_t>(up_epoch) << 32
+ ) | osd_stat_seq;
+}
+
};
#include "crimson/os/futurized_collection.h"
#include "osd/PeeringState.h"
#include "crimson/common/log.h"
+#include "crimson/osd/heartbeat.h"
#include "crimson/osd/osdmap_service.h"
#include "crimson/osd/osdmap_gate.h"
#include "crimson/osd/osd_meta.h"
crimson::mgr::Client &mgrc;
+ osd_stat_t osd_stat;
+ uint32_t osd_stat_seq = 0;
+ osd_stat_t get_osd_stat() {
+ return osd_stat;
+ }
+ void update_osd_stat(
+ epoch_t up_epoch,
+ const Heartbeat::osds_t& peers,
+ const store_statfs_t& st);
+ void inc_osd_stat_repaired() {
+ osd_stat.num_shards_repaired++;
+ }
+
std::unique_ptr<OSDMeta> meta_coll;
template <typename... Args>
void init_meta_coll(Args&&... args) {
QUEUE_FOR_OSD_SINGLETON(send_pg_created)
QUEUE_FOR_OSD_SINGLETON(send_alive)
QUEUE_FOR_OSD_SINGLETON(send_pg_temp)
+ FORWARD_TO_OSD_SINGLETON(get_osd_stat)
+ FORWARD_TO_OSD_SINGLETON(update_osd_stat)
+ FORWARD_TO_OSD_SINGLETON(inc_osd_stat_repaired)
FORWARD_TO_LOCAL_CONST(get_mnow)
FORWARD_TO_LOCAL(get_hb_stamps)
FORWARD_TO_LOCAL(update_shard_superblock)