#include "msg/Message.h"
#include "mon/Session.h"
-class PaxosServiceMessage : public Message {
- public:
+class PaxosServiceMessage : public MessageSubType<PaxosServiceMessage> {
+public:
version_t version;
__s16 deprecated_session_mon;
uint64_t deprecated_session_mon_tid;
epoch_t rx_election_epoch;
PaxosServiceMessage()
- : Message(MSG_PAXOS),
+ : MessageSubType(MSG_PAXOS),
version(0), deprecated_session_mon(-1), deprecated_session_mon_tid(0),
rx_election_epoch(0) { }
PaxosServiceMessage(int type, version_t v, int enc_version=1, int compat_enc_version=0)
- : Message(type, enc_version, compat_enc_version),
+ : MessageSubType(type, enc_version, compat_enc_version),
version(v), deprecated_session_mon(-1), deprecated_session_mon_tid(0),
rx_election_epoch(0) { }
protected:
- ~PaxosServiceMessage() override {}
+ virtual ~PaxosServiceMessage() override {}
public:
void paxos_encode() {
- ::encode(version, payload);
- ::encode(deprecated_session_mon, payload);
- ::encode(deprecated_session_mon_tid, payload);
+ using ceph::encode;
+ encode(version, payload);
+ encode(deprecated_session_mon, payload);
+ encode(deprecated_session_mon_tid, payload);
}
- void paxos_decode( bufferlist::iterator& p ) {
- ::decode(version, p);
- ::decode(deprecated_session_mon, p);
- ::decode(deprecated_session_mon_tid, p);
+ void paxos_decode(bufferlist::const_iterator& p ) {
+ decode(version, p);
+ decode(deprecated_session_mon, p);
+ decode(deprecated_session_mon_tid, p);
}
void encode_payload(uint64_t features) override {
void decode_payload() override {
ceph_abort();
- bufferlist::iterator p = payload.begin();
+ auto p = payload.cbegin();
paxos_decode(p);
}
- /**
- * These messages are only used by the monitors and clients,
- * and the client doesn't care, so we're creating a monitor-specific
- * function here. Note that this function explicitly exists to bypass
- * the normal ref-counting, so don't expect the returned pointer to be
- * very long-lived -- it will still only last as long as the Session would
- * normally.
- */
- MonSession *get_session() {
- MonSession *session = (MonSession *)get_connection()->get_priv();
- if (session)
- session->put();
- return session;
- }
-
- const char *get_type_name() const override { return "PaxosServiceMessage"; }
+ std::string_view get_type_name() const override { return "PaxosServiceMessage"; }
};
#endif