]> git.proxmox.com Git - ceph.git/blame - ceph/src/messages/MOSDPGInfo2.h
Import ceph 15.2.8
[ceph.git] / ceph / src / messages / MOSDPGInfo2.h
CommitLineData
9f95a23c
TL
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3
4#pragma once
5
6#include "messages/MOSDPeeringOp.h"
7#include "osd/PGPeeringEvent.h"
8
9class MOSDPGInfo2 : public MOSDPeeringOp {
10private:
11 static constexpr int HEAD_VERSION = 1;
12 static constexpr int COMPAT_VERSION = 1;
13
14public:
15 spg_t spgid;
16 epoch_t epoch_sent;
17 epoch_t min_epoch;
18 pg_info_t info;
19 std::optional<pg_lease_t> lease;
20 std::optional<pg_lease_ack_t> lease_ack;
21
22 spg_t get_spg() const override {
23 return spgid;
24 }
25 epoch_t get_map_epoch() const override {
26 return epoch_sent;
27 }
28 epoch_t get_min_epoch() const override {
29 return min_epoch;
30 }
31
32 PGPeeringEvent *get_event() override {
33 return new PGPeeringEvent(
34 epoch_sent,
35 min_epoch,
36 MInfoRec(
37 pg_shard_t(get_source().num(), info.pgid.shard),
38 info,
39 epoch_sent,
40 lease,
41 lease_ack));
42 }
43
44 MOSDPGInfo2() : MOSDPeeringOp{MSG_OSD_PG_INFO2,
45 HEAD_VERSION, COMPAT_VERSION} {
46 set_priority(CEPH_MSG_PRIO_HIGH);
47 }
48 MOSDPGInfo2(
49 spg_t s,
50 pg_info_t q,
51 epoch_t sent,
52 epoch_t min,
53 std::optional<pg_lease_t> l,
54 std::optional<pg_lease_ack_t> la)
55 : MOSDPeeringOp{MSG_OSD_PG_INFO2, HEAD_VERSION, COMPAT_VERSION},
56 spgid(s),
57 epoch_sent(sent),
58 min_epoch(min),
59 info(q),
60 lease(l),
61 lease_ack(la) {
62 set_priority(CEPH_MSG_PRIO_HIGH);
63 }
64
65private:
66 ~MOSDPGInfo2() override {}
67
68public:
69 std::string_view get_type_name() const override {
70 return "pg_info2";
71 }
72 void inner_print(std::ostream& out) const override {
73 out << spgid << " " << info;
74 }
75
76 void encode_payload(uint64_t features) override {
77 using ceph::encode;
78 encode(spgid, payload);
79 encode(epoch_sent, payload);
80 encode(min_epoch, payload);
81 encode(info, payload);
82 encode(lease, payload);
83 encode(lease_ack, payload);
84 }
85 void decode_payload() override {
86 using ceph::decode;
87 auto p = payload.cbegin();
88 decode(spgid, p);
89 decode(epoch_sent, p);
90 decode(min_epoch, p);
91 decode(info, p);
92 decode(lease, p);
93 decode(lease_ack, p);
94 }
95private:
96 template<class T, typename... Args>
97 friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
98};