X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fcrimson%2Fosd%2Fshard_services.cc;h=a6431305d806fa18e00ac6c81c036fd726bbd6ad;hb=aee94f6923ba628a85d855d0c5316d0da78bfa2a;hp=647d8d6bee4a52b8ac60ca4931e6b6d57e07304b;hpb=27f45121cc74e31203777ad565f78d8aad9b92a2;p=ceph.git diff --git a/ceph/src/crimson/osd/shard_services.cc b/ceph/src/crimson/osd/shard_services.cc index 647d8d6be..a6431305d 100644 --- a/ceph/src/crimson/osd/shard_services.cc +++ b/ceph/src/crimson/osd/shard_services.cc @@ -38,9 +38,12 @@ PerShardState::PerShardState( ceph::mono_time startup_time, PerfCounters *perf, PerfCounters *recoverystate_perf, - crimson::os::FuturizedStore &store) + crimson::os::FuturizedStore &store, + OSDState &osd_state) : whoami(whoami), store(store.get_sharded_store()), + osd_state(osd_state), + osdmap_gate("PerShardState::osdmap_gate"), perf(perf), recoverystate_perf(recoverystate_perf), throttler(crimson::common::local_conf()), next_tid( @@ -121,7 +124,6 @@ OSDSingletonState::OSDSingletonState( crimson::mon::Client &monc, crimson::mgr::Client &mgrc) : whoami(whoami), - osdmap_gate("OSDSingletonState::osdmap_gate"), cluster_msgr(cluster_msgr), public_msgr(public_msgr), monc(monc), @@ -349,8 +351,10 @@ OSDSingletonState::get_local_map(epoch_t e) { // TODO: use LRU cache for managing osdmap, fallback to disk if we have to if (auto found = osdmaps.find(e); found) { + logger().debug("{} osdmap.{} found in cache", __func__, e); return seastar::make_ready_future(std::move(found)); } else { + logger().debug("{} loading osdmap.{} from disk", __func__, e); return load_map(e).then([e, this](std::unique_ptr osdmap) { return seastar::make_ready_future( osdmaps.insert(e, std::move(osdmap))); @@ -370,8 +374,10 @@ seastar::future OSDSingletonState::load_map_bl( epoch_t e) { if (std::optional found = map_bl_cache.find(e); found) { + logger().debug("{} osdmap.{} found in cache", __func__, e); return seastar::make_ready_future(*found); } else { + logger().debug("{} loading osdmap.{} from disk", __func__, e); return meta_coll->load_map(e); } } @@ -401,14 +407,14 @@ seastar::future> OSDSingletonState::load_map_bls( seastar::future> OSDSingletonState::load_map(epoch_t e) { auto o = std::make_unique(); - if (e > 0) { - return load_map_bl(e).then([o=std::move(o)](bufferlist bl) mutable { - o->decode(bl); - return seastar::make_ready_future>(std::move(o)); - }); - } else { + logger().info("{} osdmap.{}", __func__, e); + if (e == 0) { return seastar::make_ready_future>(std::move(o)); } + return load_map_bl(e).then([o=std::move(o)](bufferlist bl) mutable { + o->decode(bl); + return seastar::make_ready_future>(std::move(o)); + }); } seastar::future<> OSDSingletonState::store_maps(ceph::os::Transaction& t, @@ -421,12 +427,15 @@ seastar::future<> OSDSingletonState::store_maps(ceph::os::Transaction& t, if (auto p = m->maps.find(e); p != m->maps.end()) { auto o = std::make_unique(); o->decode(p->second); - logger().info("store_maps osdmap.{}", e); + logger().info("store_maps storing osdmap.{}", e); store_map_bl(t, e, std::move(std::move(p->second))); osdmaps.insert(e, std::move(o)); return seastar::now(); } else if (auto p = m->incremental_maps.find(e); p != m->incremental_maps.end()) { + logger().info("store_maps found osdmap.{} incremental map, " + "loading osdmap.{}", e, e - 1); + ceph_assert(std::cmp_greater(e, 0u)); return load_map(e - 1).then([e, bl=p->second, &t, this](auto o) { OSDMap::Incremental inc; auto i = bl.cbegin(); @@ -434,6 +443,7 @@ seastar::future<> OSDSingletonState::store_maps(ceph::os::Transaction& t, o->apply_incremental(inc); bufferlist fbl; o->encode(fbl, inc.encode_features | CEPH_FEATURE_RESERVED); + logger().info("store_maps storing osdmap.{}", o->get_epoch()); store_map_bl(t, e, std::move(fbl)); osdmaps.insert(e, std::move(o)); return seastar::now(); @@ -603,7 +613,6 @@ ShardServices::get_or_create_pg_ret ShardServices::get_or_create_pg( PGMap::PGCreationBlockingEvent::TriggerI&& trigger, spg_t pgid, - epoch_t epoch, std::unique_ptr info) { if (info) { @@ -700,6 +709,9 @@ seastar::future<> OSDSingletonState::send_incremental_map( crimson::net::Connection &conn, epoch_t first) { + logger().info("{}: first osdmap: {} " + "superblock's oldest map: {}", + __func__, first, superblock.oldest_map); if (first >= superblock.oldest_map) { return load_map_bls( first, superblock.newest_map