Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / 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