@@ -954,13 +954,36 @@ seastar::future<MessageURef> OSD::get_stats()
954954 ).then ([this , m=std::move (m)](auto &&stats) mutable {
955955 min_last_epoch_clean = osdmap->get_epoch ();
956956 min_last_epoch_clean_pgs.clear ();
957+ std::set<int64_t > pool_set;
957958 for (auto [pgid, stat] : stats) {
958959 min_last_epoch_clean = std::min (min_last_epoch_clean,
959960 stat.get_effective_last_epoch_clean ());
960961 min_last_epoch_clean_pgs.push_back (pgid);
962+ int64_t pool_id = pgid.pool ();
963+ pool_set.emplace (pool_id);
961964 }
962965 m->pg_stat = std::move (stats);
963- return seastar::make_ready_future<MessageURef>(std::move (m));
966+ return std::make_pair (pool_set, std::move (m));
967+ }).then ([this ] (auto message) mutable {
968+ std::map<int64_t , store_statfs_t > pool_stat;
969+ auto pool_set = message.first ;
970+ auto m = std::move (message.second );
971+ return seastar::do_with (std::move (m),
972+ pool_stat,
973+ pool_set, [this ] (auto &&msg,
974+ auto &pool_stat,
975+ auto &pool_set) {
976+ return seastar::do_for_each (pool_set, [this , &pool_stat]
977+ (auto & pool_id) {
978+ return store.pool_statfs (pool_id).then ([pool_id, &pool_stat](
979+ store_statfs_t st) mutable {
980+ pool_stat[pool_id] = st;
981+ });
982+ }).then ([&pool_stat, msg=std::move (msg)] () mutable {
983+ msg->pool_stat = std::move (pool_stat);
984+ return seastar::make_ready_future<MessageURef>(std::move (msg));
985+ });
986+ });
964987 });
965988}
966989
0 commit comments