auto [pg, startmap] = std::move(ret);
if (!pg)
return seastar::make_ready_future<Ref<PG>>(Ref<PG>());
- PeeringCtx rctx{ceph_release_t::octopus};
const pg_pool_t* pp = startmap->get_pg_pool(info->pgid.pool());
int up_primary, acting_primary;
int role = startmap->calc_pg_role(pg_shard_t(whoami, info->pgid.shard),
acting);
+ PeeringCtx rctx;
create_pg_collection(
rctx.transaction,
info->pgid,
return seastar::parallel_for_each(pgs.begin(), pgs.end(), [=](auto& pg) {
return shard_services.start_operation<PGAdvanceMap>(
*this, pg.second, pg.second->get_osdmap_epoch(), epoch,
- PeeringCtx{ceph_release_t::octopus}, false).second;
+ PeeringCtx{}, false).second;
}).then([epoch, this] {
osdmap_gate.got_map(epoch);
return seastar::make_ready_future();
seastar::promise<BufferedRecoveryMessages> promise;
// assuming crimson-osd won't need to be compatible with pre-octopus
// releases
- BufferedRecoveryMessages ctx{ceph_release_t::octopus};
+ BufferedRecoveryMessages ctx;
compound_state() = default;
~compound_state() {
promise.set_value(std::move(ctx));
ShardServices &shard_services, const pg_shard_t &from, const spg_t &pgid,
Args&&... args) :
shard_services(shard_services),
- ctx{ceph_release_t::octopus},
from(from),
pgid(pgid),
evt(std::forward<Args>(args)...)
ShardServices &shard_services, const pg_shard_t &from, const spg_t &pgid,
float delay, Args&&... args) :
shard_services(shard_services),
- ctx{ceph_release_t::octopus},
from(from),
pgid(pgid),
delay(delay),
#include "crimson/osd/osdmap_service.h"
#include "messages/MOSDPGTemp.h"
#include "messages/MOSDPGCreated.h"
-#include "messages/MOSDPGNotify.h"
#include "messages/MOSDPGInfo.h"
#include "messages/MOSDPGQuery.h"
ceph_assert(col || ctx.transaction.empty());
return seastar::when_all_succeed(
dispatch_context_messages(
- BufferedRecoveryMessages{ceph_release_t::octopus, ctx}),
+ BufferedRecoveryMessages{ctx}),
col ? dispatch_context_transaction(col, ctx) : seastar::now()
).then_unpack([] {
return seastar::now();
PeeringCtx OSD::create_context()
{
- return PeeringCtx(get_osdmap()->require_osd_release);
+ return PeeringCtx();
}
void OSD::dispatch_context(PeeringCtx &ctx, PG *pg, OSDMapRef curmap,
// init pool options
store->set_collection_opts(ch, pool.info.opts);
- PeeringCtx rctx(ceph_release_t::unknown);
+ PeeringCtx rctx;
handle_initialize(rctx);
// note: we don't activate here because we know the OSD will advance maps
// during boot.
#include "messages/MBackfillReserve.h"
#include "messages/MRecoveryReserve.h"
#include "messages/MOSDScrubReserve.h"
-#include "messages/MOSDPGInfo.h"
#include "messages/MOSDPGInfo2.h"
#include "messages/MOSDPGTrim.h"
#include "messages/MOSDPGLog.h"
-#include "messages/MOSDPGNotify.h"
#include "messages/MOSDPGNotify2.h"
-#include "messages/MOSDPGQuery.h"
#include "messages/MOSDPGQuery2.h"
#include "messages/MOSDPGLease.h"
#include "messages/MOSDPGLeaseAck.h"
using ceph::Formatter;
using ceph::make_message;
-BufferedRecoveryMessages::BufferedRecoveryMessages(
- ceph_release_t r,
- PeeringCtx &ctx)
- : require_osd_release(r) {
+BufferedRecoveryMessages::BufferedRecoveryMessages(PeeringCtx &ctx)
// steal messages from ctx
- message_map.swap(ctx.message_map);
-}
+ : message_map{std::move(ctx.message_map)}
+{}
void BufferedRecoveryMessages::send_notify(int to, const pg_notify_t &n)
{
- if (require_osd_release >= ceph_release_t::octopus) {
- spg_t pgid(n.info.pgid.pgid, n.to);
- send_osd_message(to, make_message<MOSDPGNotify2>(pgid, n));
- } else {
- send_osd_message(to, make_message<MOSDPGNotify>(n.epoch_sent, vector{n}));
- }
+ spg_t pgid(n.info.pgid.pgid, n.to);
+ send_osd_message(to, make_message<MOSDPGNotify2>(pgid, n));
}
void BufferedRecoveryMessages::send_query(
spg_t to_spgid,
const pg_query_t &q)
{
- if (require_osd_release >= ceph_release_t::octopus) {
- send_osd_message(to,
- make_message<MOSDPGQuery2>(to_spgid, q));
- } else {
- auto m = make_message<MOSDPGQuery>(
- q.epoch_sent,
- MOSDPGQuery::pg_list_t{{to_spgid, q}});
- send_osd_message(to, m);
- }
+ send_osd_message(to, make_message<MOSDPGQuery2>(to_spgid, q));
}
void BufferedRecoveryMessages::send_info(
std::optional<pg_lease_t> lease,
std::optional<pg_lease_ack_t> lease_ack)
{
- if (require_osd_release >= ceph_release_t::octopus) {
- send_osd_message(
- to,
- make_message<MOSDPGInfo2>(
- to_spgid,
- info,
- cur_epoch,
- min_epoch,
- lease,
- lease_ack)
- );
- } else {
- send_osd_message(
- to,
- make_message<MOSDPGInfo>(
- cur_epoch,
- vector{pg_notify_t{to_spgid.shard,
- info.pgid.shard,
- min_epoch, cur_epoch,
- info, PastIntervals{}}})
- );
- }
+ send_osd_message(
+ to,
+ make_message<MOSDPGInfo2>(
+ to_spgid,
+ info,
+ cur_epoch,
+ min_epoch,
+ lease,
+ lease_ack)
+ );
}
void PGPool::update(OSDMapRef map)
ceph_assert(!messages_pending_flush);
ceph_assert(orig_ctx);
ceph_assert(rctx);
- messages_pending_flush = BufferedRecoveryMessages(
- orig_ctx->require_osd_release);
+ messages_pending_flush.emplace();
rctx.emplace(*messages_pending_flush, *orig_ctx);
}
peer->second.last_interval_started = info.last_interval_started;
peer->second.history.merge(info.history);
}
- MessageRef m;
- if (last_require_osd_release >= ceph_release_t::octopus) {
- m = make_message<MOSDPGInfo2>(spg_t{info.pgid.pgid, pg_shard.shard},
+ MessageRef m = make_message<MOSDPGInfo2>(spg_t{info.pgid.pgid, pg_shard.shard},
info,
get_osdmap_epoch(),
get_osdmap_epoch(),
std::optional<pg_lease_t>{get_lease()},
std::nullopt);
- } else {
- m = make_message<MOSDPGInfo>(get_osdmap_epoch(),
- MOSDPGInfo::pg_list_t{
- pg_notify_t{pg_shard.shard,
- pg_whoami.shard,
- get_osdmap_epoch(),
- get_osdmap_epoch(),
- info,
- past_intervals}});
- }
pl->send_cluster_message(pg_shard.osd, m, get_osdmap_epoch());
}
}
// [primary only] content recovery state
struct BufferedRecoveryMessages {
- ceph_release_t require_osd_release;
std::map<int, std::vector<MessageRef>> message_map;
- BufferedRecoveryMessages(ceph_release_t r)
- : require_osd_release(r) {
- }
- BufferedRecoveryMessages(ceph_release_t r, PeeringCtx &ctx);
+ BufferedRecoveryMessages() = default;
+ BufferedRecoveryMessages(PeeringCtx &ctx);
void accept_buffered_messages(BufferedRecoveryMessages &m) {
for (auto &[target, ls] : m.message_map) {
ObjectStore::Transaction transaction;
HBHandle* handle = nullptr;
- PeeringCtx(ceph_release_t r)
- : BufferedRecoveryMessages(r) {}
+ PeeringCtx() = default;
PeeringCtx(const PeeringCtx &) = delete;
PeeringCtx &operator=(const PeeringCtx &) = delete;