if (!superblock.cluster_osdmap_trim_lower_bound) {
superblock.cluster_osdmap_trim_lower_bound = superblock.get_oldest_map();
}
- pg_shard_manager.set_superblock(superblock);
+ return pg_shard_manager.set_superblock(superblock);
+ }).then([this] {
return pg_shard_manager.get_local_map(superblock.current_epoch);
}).then([this](OSDMapService::local_cached_map_t&& map) {
osdmap = make_local_shared_foreign(OSDMapService::local_cached_map_t(map));
superblock.clean_thru = last;
}
pg_shard_manager.get_meta_coll().store_superblock(t, superblock);
- pg_shard_manager.set_superblock(superblock);
- logger().debug("OSD::handle_osd_map: do_transaction...");
- return store.get_sharded_store().do_transaction(
- pg_shard_manager.get_meta_coll().collection(),
- std::move(t));
+ return pg_shard_manager.set_superblock(superblock).then(
+ [this, &t] {
+ logger().debug("OSD::handle_osd_map: do_transaction...");
+ return store.get_sharded_store().do_transaction(
+ pg_shard_manager.get_meta_coll().collection(),
+ std::move(t));
+ });
});
}).then([=, this] {
// TODO: write to superblock and commit the transaction
});
}
+seastar::future<> PGShardManager::set_superblock(OSDSuperblock superblock) {
+ ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
+ get_osd_singleton_state().set_singleton_superblock(superblock);
+ return shard_services.invoke_on_all(
+ [superblock = std::move(superblock)](auto &local_service) {
+ return local_service.local_state.update_shard_superblock(superblock);
+ });
+}
+
}
FORWARD_TO_OSD_SINGLETON(init_meta_coll)
FORWARD_TO_OSD_SINGLETON(get_meta_coll)
- FORWARD_TO_OSD_SINGLETON(set_superblock)
-
// Core OSDMap methods
FORWARD_TO_OSD_SINGLETON(get_local_map)
FORWARD_TO_OSD_SINGLETON(load_map_bl)
seastar::future<> set_up_epoch(epoch_t e);
+ seastar::future<> set_superblock(OSDSuperblock superblock);
+
template <typename F>
auto with_remote_shard_state(core_id_t core, F &&f) {
return shard_services.invoke_on(
return stamps->second;
}
+seastar::future<> PerShardState::update_shard_superblock(OSDSuperblock superblock)
+{
+ assert_core();
+ per_shard_superblock = std::move(superblock);
+ return seastar::now();
+}
+
OSDSingletonState::OSDSingletonState(
int whoami,
crimson::net::Messenger &cluster_msgr,
HeartbeatStampsRef get_hb_stamps(int peer);
std::map<int, HeartbeatStampsRef> heartbeat_stamps;
+ seastar::future<> update_shard_superblock(OSDSuperblock superblock);
+
// Time state
const ceph::mono_time startup_time;
ceph::signedspan get_mnow() const {
return ceph::mono_clock::now() - startup_time;
}
+ OSDSuperblock per_shard_superblock;
+
public:
PerShardState(
int whoami,
}
OSDSuperblock superblock;
- void set_superblock(OSDSuperblock _superblock) {
+ void set_singleton_superblock(OSDSuperblock _superblock) {
superblock = std::move(_superblock);
}
FORWARD_TO_OSD_SINGLETON(send_pg_temp)
FORWARD_TO_LOCAL_CONST(get_mnow)
FORWARD_TO_LOCAL(get_hb_stamps)
+ FORWARD_TO_LOCAL(update_shard_superblock)
FORWARD(pg_created, pg_created, local_state.pg_map)