From: Amnon Hanuhov Date: Tue, 8 Jun 2021 12:48:59 +0000 (+0300) Subject: osd: Overload send_osd_message() in PeeringState X-Git-Tag: v17.1.0~1598^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a6d7fefde33dfda88bbdaf4a386bf5ce4ac246fe;p=ceph.git osd: Overload send_osd_message() in PeeringState To allow passing MessageURef from crimson-osd and MessageRef from ceph-osd Signed-off-by: Amnon Hanuhov --- diff --git a/src/crimson/osd/osd_operations/peering_event.cc b/src/crimson/osd/osd_operations/peering_event.cc index 29b082687caa..02df7eff586a 100644 --- a/src/crimson/osd/osd_operations/peering_event.cc +++ b/src/crimson/osd/osd_operations/peering_event.cc @@ -124,7 +124,7 @@ void RemotePeeringEvent::on_pg_absent() const pg_info_t empty{spg_t{pgid.pgid, q.query.to}}; if (q.query.type == q.query.LOG || q.query.type == q.query.FULLLOG) { - auto m = ceph::make_message(q.query.from, q.query.to, + auto m = crimson::make_message(q.query.from, q.query.to, map_epoch, empty, q.query.epoch_sent); ctx.send_osd_message(q.from.osd, std::move(m)); diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 48e5fc332b9c..aaf06f8260c5 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -42,7 +42,7 @@ BufferedRecoveryMessages::BufferedRecoveryMessages(PeeringCtx &ctx) void BufferedRecoveryMessages::send_notify(int to, const pg_notify_t &n) { spg_t pgid(n.info.pgid.pgid, n.to); - send_osd_message(to, make_message(pgid, n)); + send_osd_message(to, TOPNSPC::make_message(pgid, n)); } void BufferedRecoveryMessages::send_query( @@ -50,7 +50,7 @@ void BufferedRecoveryMessages::send_query( spg_t to_spgid, const pg_query_t &q) { - send_osd_message(to, make_message(to_spgid, q)); + send_osd_message(to, TOPNSPC::make_message(to_spgid, q)); } void BufferedRecoveryMessages::send_info( @@ -64,7 +64,7 @@ void BufferedRecoveryMessages::send_info( { send_osd_message( to, - make_message( + TOPNSPC::make_message( to_spgid, info, cur_epoch, diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index cf49c9ba3c10..c49a46697d07 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -61,7 +61,11 @@ struct PeeringCtx; // [primary only] content recovery state struct BufferedRecoveryMessages { +#if defined(WITH_SEASTAR) + std::map> message_map; +#else std::map> message_map; +#endif BufferedRecoveryMessages() = default; BufferedRecoveryMessages(PeeringCtx &ctx); @@ -71,14 +75,15 @@ struct BufferedRecoveryMessages { auto &ovec = message_map[target]; // put buffered messages in front ls.reserve(ls.size() + ovec.size()); - ls.insert(ls.end(), ovec.begin(), ovec.end()); + ls.insert(ls.end(), std::make_move_iterator(ovec.begin()), std::make_move_iterator(ovec.end())); ovec.clear(); ovec.swap(ls); } } - void send_osd_message(int target, MessageRef m) { - message_map[target].push_back(std::move(m)); + template // MsgT = MessageRef for ceph-osd and MessageURef for crimson-osd + void send_osd_message(int target, MsgT&& m) { + message_map[target].emplace_back(std::forward(m)); } void send_notify(int to, const pg_notify_t &n); void send_query(int to, spg_t spgid, const pg_query_t &q); @@ -222,8 +227,9 @@ struct PeeringCtxWrapper { PeeringCtxWrapper(PeeringCtxWrapper &&ctx) = default; - void send_osd_message(int target, MessageRef m) { - msgs.send_osd_message(target, std::move(m)); + template // MsgT = MessageRef for ceph-osd and MessageURef for crimson-osd + void send_osd_message(int target, MsgT&& m) { + msgs.send_osd_message(target, std::forward(m)); } void send_notify(int to, const pg_notify_t &n) { msgs.send_notify(to, n);