1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
16 #ifndef CEPH_MMONPROBE_H
17 #define CEPH_MMONPROBE_H
19 #include "include/ceph_features.h"
20 #include "msg/Message.h"
21 #include "mon/MonMap.h"
23 class MMonProbe
: public Message
{
25 static const int HEAD_VERSION
= 6;
26 static const int COMPAT_VERSION
= 5;
34 OP_MISSING_FEATURES
= 6,
37 static const char *get_opname(int o
) {
39 case OP_PROBE
: return "probe";
40 case OP_REPLY
: return "reply";
41 case OP_SLURP
: return "slurp";
42 case OP_SLURP_LATEST
: return "slurp_latest";
43 case OP_DATA
: return "data";
44 case OP_MISSING_FEATURES
: return "missing_features";
45 default: ceph_abort(); return 0;
54 version_t paxos_first_version
= 0;
55 version_t paxos_last_version
= 0;
56 bool has_ever_joined
= 0;
57 uint64_t required_features
= 0;
60 : Message(MSG_MON_PROBE
, HEAD_VERSION
, COMPAT_VERSION
) {}
61 MMonProbe(const uuid_d
& f
, int o
, const string
& n
, bool hej
)
62 : Message(MSG_MON_PROBE
, HEAD_VERSION
, COMPAT_VERSION
),
66 paxos_first_version(0),
67 paxos_last_version(0),
69 required_features(0) {}
71 ~MMonProbe() override
{}
74 const char *get_type_name() const override
{ return "mon_probe"; }
75 void print(ostream
& out
) const override
{
76 out
<< "mon_probe(" << get_opname(op
) << " " << fsid
<< " name " << name
;
78 out
<< " quorum " << quorum
;
81 << " fc " << paxos_first_version
82 << " lc " << paxos_last_version
87 if (required_features
)
88 out
<< " required_features " << required_features
;
92 void encode_payload(uint64_t features
) override
{
93 if (monmap_bl
.length() &&
94 ((features
& CEPH_FEATURE_MONENC
) == 0 ||
95 (features
& CEPH_FEATURE_MSG_ADDR2
) == 0)) {
96 // reencode old-format monmap
100 t
.encode(monmap_bl
, features
);
103 ::encode(fsid
, payload
);
104 ::encode(op
, payload
);
105 ::encode(name
, payload
);
106 ::encode(quorum
, payload
);
107 ::encode(monmap_bl
, payload
);
108 ::encode(has_ever_joined
, payload
);
109 ::encode(paxos_first_version
, payload
);
110 ::encode(paxos_last_version
, payload
);
111 ::encode(required_features
, payload
);
113 void decode_payload() override
{
114 bufferlist::iterator p
= payload
.begin();
119 ::decode(monmap_bl
, p
);
120 ::decode(has_ever_joined
, p
);
121 ::decode(paxos_first_version
, p
);
122 ::decode(paxos_last_version
, p
);
123 if (header
.version
>= 6)
124 ::decode(required_features
, p
);
126 required_features
= 0;