{
const int from = m->get_source().num();
logger().debug("handle_peering_op on {} from {}", m->get_spg(), from);
+ m->set_features(conn->get_features());
std::unique_ptr<PGPeeringEvent> evt(m->get_event());
(void) pg_shard_manager.start_pg_operation<RemotePeeringEvent>(
conn,
uint64_t get_features() const {
if (features)
return features;
+#ifdef WITH_SEASTAR
+ // In crimson, conn is independently maintained outside Message.
+ ceph_abort();
+#endif
return get_connection()->get_features();
}
spgid,
pg_shard_t(get_source().num(), notify.from),
notify,
- get_connection()->get_features()),
+#ifdef WITH_SEASTAR
+ features
+#else
+ get_connection()->get_features()
+#endif
+ ),
true,
new PGCreateInfo(
spgid,
virtual epoch_t get_min_epoch() const = 0;
virtual PGPeeringEvent *get_event() = 0;
virtual void inner_print(std::ostream& out) const = 0;
+
+#ifdef WITH_SEASTAR
+ // In crimson, conn is independently maintained outside Message.
+ // Instead of get features from the connection later, set features at
+ // the start of the operation.
+ void set_features(uint64_t _features) {
+ features = _features;
+ }
+
+protected:
+ uint64_t features;
+#endif
};