tmp.set_epoch(v);
}
bufferlist mapbl;
- tmp.encode(mapbl);
+ tmp.encode(mapbl, -1);
bufferlist final;
::encode(v, final);
::encode(mapbl, final);
MMonElection(int o, epoch_t e, MonMap *m) :
Message(MSG_MON_ELECTION, HEAD_VERSION),
fsid(m->fsid), op(o), epoch(e) {
- m->encode(monmap_bl);
+ m->encode(monmap_bl, -1);
}
private:
~MMonElection() {}
#include "common/Formatter.h"
+#include "include/ceph_features.h"
+
using ceph::Formatter;
-void MonMap::encode(bufferlist& blist) const
+void MonMap::encode(bufferlist& blist, uint64_t features) const
{
+ if ((features & CEPH_FEATURE_MONNAMES) == 0) {
+ __u16 v = 1;
+ ::encode(v, blist);
+ ::encode_raw(fsid, blist);
+ ::encode(epoch, blist);
+ vector<entity_inst_t> mon_inst(mon_addr.size());
+ for (unsigned n = 0; n < mon_addr.size(); n++)
+ mon_inst[n] = get_inst(n);
+ ::encode(mon_inst, blist);
+ ::encode(last_changed, blist);
+ ::encode(created, blist);
+ return;
+ }
+
__u16 v = 2;
::encode(v, blist);
::encode_raw(fsid, blist);
::encode(created, blist);
}
-void MonMap::encode_v1(bufferlist& blist) const
-{
- __u16 v = 1;
- ::encode(v, blist);
- ::encode_raw(fsid, blist);
- ::encode(epoch, blist);
- vector<entity_inst_t> mon_inst(mon_addr.size());
- for (unsigned n = 0; n < mon_addr.size(); n++)
- mon_inst[n] = get_inst(n);
- ::encode(mon_inst, blist);
- ::encode(last_changed, blist);
- ::encode(created, blist);
-}
-
void MonMap::decode(bufferlist::iterator &p)
{
__u16 v;
{
// encode
bufferlist bl;
- encode(bl);
+ encode(bl, -1);
return bl.write_file(fn);
}
return i;
}
- void encode(bufferlist& blist) const;
- void encode_v1(bufferlist& blist) const;
-
+ void encode(bufferlist& blist, uint64_t features) const;
void decode(bufferlist& blist) {
bufferlist::iterator p = blist.begin();
decode(p);
static void generate_test_instances(list<MonMap*>& o);
};
-WRITE_CLASS_ENCODER(MonMap)
+WRITE_CLASS_ENCODER_FEATURES(MonMap)
inline ostream& operator<<(ostream& out, MonMap& m) {
m.print_summary(out);
MMonProbe *r = new MMonProbe(monmap->fsid, MMonProbe::OP_REPLY, name);
r->name = name;
r->quorum = quorum;
- monmap->encode(r->monmap_bl);
+ monmap->encode(r->monmap_bl, -1);
for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); ++p)
r->paxos_versions[(*p)->get_machine_name()] = (*p)->get_version();
messenger->send_message(r, m->get_connection());
void Monitor::send_latest_monmap(Connection *con)
{
bufferlist bl;
- if (!con->has_feature(CEPH_FEATURE_MONNAMES))
- monmap->encode_v1(bl);
- else
- monmap->encode(bl);
+ monmap->encode(bl, con->get_features());
messenger->send_message(new MMonMap(bl), con);
}
// save monmap, osdmap, keyring.
bufferlist monmapbl;
- monmap->encode(monmapbl);
+ monmap->encode(monmapbl, -1);
monmap->set_epoch(0); // must be 0 to avoid confusing first MonmapMonitor::update_from_paxos()
store->put_bl_ss(monmapbl, "mkfs", "monmap");
assert(mon->monmap->epoch + 1 == pending_map.epoch ||
pending_map.epoch == 1); // special case mkfs!
- pending_map.encode(bl);
+ pending_map.encode(bl, -1);
}
bool MonmapMonitor::preprocess_query(PaxosServiceMessage *m)
r = 0;
}
else if (m->cmd.size() == 2 && m->cmd[1] == "getmap") {
- mon->monmap->encode(rdata);
+ mon->monmap->encode(rdata, -1);
r = 0;
ss << "got latest monmap";
}