]> git.proxmox.com Git - ceph.git/blob - ceph/src/messages/PaxosServiceMessage.h
update sources to 12.2.7
[ceph.git] / ceph / src / messages / PaxosServiceMessage.h
1 #ifndef CEPH_PAXOSSERVICEMESSAGE_H
2 #define CEPH_PAXOSSERVICEMESSAGE_H
3
4 #include "msg/Message.h"
5 #include "mon/Session.h"
6
7 class PaxosServiceMessage : public Message {
8 public:
9 version_t version;
10 __s16 deprecated_session_mon;
11 uint64_t deprecated_session_mon_tid;
12
13 // track which epoch the leader received a forwarded request in, so we can
14 // discard forwarded requests appropriately on election boundaries.
15 epoch_t rx_election_epoch;
16
17 PaxosServiceMessage()
18 : Message(MSG_PAXOS),
19 version(0), deprecated_session_mon(-1), deprecated_session_mon_tid(0),
20 rx_election_epoch(0) { }
21 PaxosServiceMessage(int type, version_t v, int enc_version=1, int compat_enc_version=0)
22 : Message(type, enc_version, compat_enc_version),
23 version(v), deprecated_session_mon(-1), deprecated_session_mon_tid(0),
24 rx_election_epoch(0) { }
25 protected:
26 ~PaxosServiceMessage() override {}
27
28 public:
29 void paxos_encode() {
30 ::encode(version, payload);
31 ::encode(deprecated_session_mon, payload);
32 ::encode(deprecated_session_mon_tid, payload);
33 }
34
35 void paxos_decode( bufferlist::iterator& p ) {
36 ::decode(version, p);
37 ::decode(deprecated_session_mon, p);
38 ::decode(deprecated_session_mon_tid, p);
39 }
40
41 void encode_payload(uint64_t features) override {
42 ceph_abort();
43 paxos_encode();
44 }
45
46 void decode_payload() override {
47 ceph_abort();
48 bufferlist::iterator p = payload.begin();
49 paxos_decode(p);
50 }
51
52 /**
53 * These messages are only used by the monitors and clients,
54 * and the client doesn't care, so we're creating a monitor-specific
55 * function here. Note that this function explicitly exists to bypass
56 * the normal ref-counting, so don't expect the returned pointer to be
57 * very long-lived -- it will still only last as long as the Session would
58 * normally.
59 */
60 MonSession *get_session() {
61 MonSession *session = (MonSession *)get_connection()->get_priv();
62 if (session)
63 session->put();
64 return session;
65 }
66
67 const char *get_type_name() const override { return "PaxosServiceMessage"; }
68 };
69
70 #endif