namespace crimson::osd {
-seastar::future<> PGShardManager::start(
- const int whoami,
- crimson::net::Messenger &cluster_msgr,
- crimson::net::Messenger &public_msgr,
- crimson::mon::Client &monc,
- crimson::mgr::Client &mgrc,
- crimson::os::FuturizedStore &store)
-{
- ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
- return osd_singleton_state.start_single(
- whoami, std::ref(cluster_msgr), std::ref(public_msgr),
- std::ref(monc), std::ref(mgrc)
- ).then([this, whoami, &store] {
- ceph::mono_time startup_time = ceph::mono_clock::now();
- return shard_services.start(
- std::ref(osd_singleton_state),
- whoami,
- startup_time,
- osd_singleton_state.local().perf,
- osd_singleton_state.local().recoverystate_perf,
- std::ref(store));
- });
-}
-
-seastar::future<> PGShardManager::stop()
-{
- ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
- return shard_services.stop(
- ).then([this] {
- return osd_singleton_state.stop();
- });
-}
-
seastar::future<> PGShardManager::load_pgs(crimson::os::FuturizedStore& store)
{
ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
auto[coll, shard_core] = coll_core;
spg_t pgid;
if (coll.is_pg(&pgid)) {
- auto core = get_osd_singleton_state(
- ).pg_to_shard_mapping.maybe_create_pg(
- pgid, shard_core);
- return with_remote_shard_state(
- core,
- [pgid](
+ return get_pg_to_shard_mapping().maybe_create_pg(
+ pgid, shard_core
+ ).then([this, pgid] (auto core) {
+ return this->template with_remote_shard_state(
+ core,
+ [pgid](
PerShardState &per_shard_state,
ShardServices &shard_services) {
return shard_services.load_pg(
return seastar::now();
});
});
+ });
} else if (coll.is_temp(&pgid)) {
logger().warn(
"found temp collection on crimson osd, should be impossible: {}",
local_service, epoch
);
}).then([this, epoch] {
- get_osd_singleton_state().osdmap_gate.got_map(epoch);
- return seastar::now();
+ logger().debug("PGShardManager::broadcast_map_to_pgs "
+ "broadcasted up to {}",
+ epoch);
+ return shard_services.invoke_on_all([epoch](auto &local_service) {
+ local_service.local_state.osdmap_gate.got_map(epoch);
+ return seastar::now();
+ });
});
}