messages: drop compatibility for pre-octopus versions

no need to be compatible with pre-octopus versions when it comes to
in-cluster communications.

* MMgrBeacon: octopus encodes MMgrBeacon with version 8
* MMonJoin: octopus encodes MMonJoin with version 2
* MOSDBoot: octopus encodes MOSDBoot with version 7
* MOSDFailure: octopus encodes MOSDFailure with version 4
* MOSDMarkMeDown: octopus encodes MOSDMarkMeDown with version 3
* MOSDPGLog: octopus encodes MOSDPGLog with version 6
* MOSDPGScan: octopus encodes MOSDPGScan with version 2
* MOSDPGInfo: octopus encodes MOSDPGInfo with version 6
* MOSDPGNotify: octopus encodes MOSDPGNotify with version 7

Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
Kefu Chai 2021-02-19 01:06:50 +08:00
parent 8e407f3ad8
commit 4a13e91261
9 changed files with 35 additions and 178 deletions

View File

@ -126,13 +126,8 @@ public:
using ceph::encode;
paxos_encode();
if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
header.version = 7;
header.compat_version = 1;
encode(server_addrs.legacy_addr(), payload, features);
} else {
encode(server_addrs, payload, features);
}
assert(HAVE_FEATURE(features, SERVER_NAUTILUS));
encode(server_addrs, payload, features);
encode(gid, payload);
encode(available, payload);
encode(name, payload);
@ -158,38 +153,18 @@ public:
using ceph::decode;
auto p = payload.cbegin();
paxos_decode(p);
assert(header.version >= 8);
decode(server_addrs, p); // entity_addr_t for version < 8
decode(gid, p);
decode(available, p);
decode(name, p);
if (header.version >= 2) {
decode(fsid, p);
}
if (header.version >= 3) {
std::set<std::string> module_name_list;
decode(module_name_list, p);
// Only need to unpack this field if we won't have the full
// ModuleInfo structures added in v7
if (header.version < 7) {
for (const auto &i : module_name_list) {
MgrMap::ModuleInfo info;
info.name = i;
modules.push_back(std::move(info));
}
}
}
if (header.version >= 4) {
decode(command_descs, p);
}
if (header.version >= 5) {
decode(metadata, p);
}
if (header.version >= 6) {
decode(services, p);
}
if (header.version >= 7) {
decode(modules, p);
}
decode(fsid, p);
std::set<std::string> module_name_list;
decode(module_name_list, p);
decode(command_descs, p);
decode(metadata, p);
decode(services, p);
decode(modules, p);
if (header.version >= 9) {
decode(mgr_features, p);
}

View File

@ -46,15 +46,10 @@ public:
paxos_encode();
encode(fsid, payload);
encode(name, payload);
if (HAVE_FEATURE(features, SERVER_NAUTILUS)) {
header.version = HEAD_VERSION;
header.compat_version = COMPAT_VERSION;
encode(addrs, payload, features);
} else {
header.version = 1;
header.compat_version = 1;
encode(addrs.legacy_addr(), payload, features);
}
assert(HAVE_FEATURE(features, SERVER_NAUTILUS));
header.version = HEAD_VERSION;
header.compat_version = COMPAT_VERSION;
encode(addrs, payload, features);
}
void decode_payload() override {
using ceph::decode;
@ -62,13 +57,8 @@ public:
paxos_decode(p);
decode(fsid, p);
decode(name, p);
if (header.version == 1) {
entity_addr_t addr;
decode(addr, p);
addrs = entity_addrvec_t(addr);
} else {
decode(addrs, p);
}
assert(header.version > 1);
decode(addrs, p);
}
};

View File

@ -68,18 +68,7 @@ public:
header.compat_version = COMPAT_VERSION;
using ceph::encode;
paxos_encode();
if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
header.version = 6;
header.compat_version = 6;
encode(sb, payload);
hb_back_addrs.legacy_addr().encode(payload, features);
cluster_addrs.legacy_addr().encode(payload, features);
encode(boot_epoch, payload);
hb_front_addrs.legacy_addr().encode(payload, features);
encode(metadata, payload);
encode(osd_features, payload);
return;
}
assert(HAVE_FEATURE(features, SERVER_NAUTILUS));
encode(sb, payload);
encode(hb_back_addrs, payload, features);
encode(cluster_addrs, payload, features);
@ -92,20 +81,7 @@ public:
auto p = payload.cbegin();
using ceph::decode;
paxos_decode(p);
if (header.version < 7) {
entity_addr_t a;
decode(sb, p);
decode(a, p);
hb_back_addrs = entity_addrvec_t(a);
decode(a, p);
cluster_addrs = entity_addrvec_t(a);
decode(boot_epoch, p);
decode(a, p);
hb_front_addrs = entity_addrvec_t(a);
decode(metadata, p);
decode(osd_features, p);
return;
}
assert(header.version >= 7);
decode(sb, p);
decode(hb_back_addrs, p);
decode(cluster_addrs, p);

View File

@ -75,15 +75,9 @@ public:
auto p = payload.cbegin();
paxos_decode(p);
decode(fsid, p);
if (header.version < 4) {
entity_inst_t i;
decode(i, p);
target_osd = i.name.num();
target_addrs.v.push_back(i.addr);
} else {
decode(target_osd, p);
decode(target_addrs, p);
}
assert(header.version >= 4);
decode(target_osd, p);
decode(target_addrs, p);
decode(epoch, p);
decode(flags, p);
decode(failed_for, p);
@ -92,17 +86,7 @@ public:
void encode_payload(uint64_t features) override {
using ceph::encode;
paxos_encode();
if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
header.version = 3;
header.compat_version = 3;
encode(fsid, payload);
encode(entity_inst_t(entity_name_t::OSD(target_osd),
target_addrs.legacy_addr()), payload, features);
encode(epoch, payload);
encode(flags, payload);
encode(failed_for, payload);
return;
}
assert(HAVE_FEATURE(features, SERVER_NAUTILUS));
header.version = HEAD_VERSION;
header.compat_version = COMPAT_VERSION;
encode(fsid, payload);

View File

@ -48,16 +48,7 @@ public:
using ceph::decode;
auto p = payload.cbegin();
paxos_decode(p);
if (header.version <= 2) {
decode(fsid, p);
entity_inst_t i;
decode(i, p);
target_osd = i.name.num();
target_addrs = entity_addrvec_t(i.addr);
decode(epoch, p);
decode(request_ack, p);
return;
}
assert(header.version >= 3);
decode(fsid, p);
decode(target_osd, p);
decode(target_addrs, p);
@ -68,17 +59,7 @@ public:
void encode_payload(uint64_t features) override {
using ceph::encode;
paxos_encode();
if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
header.version = 2;
header.compat_version = 2;
encode(fsid, payload);
encode(entity_inst_t(entity_name_t::OSD(target_osd),
target_addrs.legacy_addr()),
payload, features);
encode(epoch, payload);
encode(request_ack, payload);
return;
}
assert(HAVE_FEATURE(features, SERVER_NAUTILUS));
header.version = HEAD_VERSION;
header.compat_version = COMPAT_VERSION;
encode(fsid, payload);

View File

@ -22,7 +22,7 @@
class MOSDPGInfo final : public Message {
private:
static constexpr int HEAD_VERSION = 6;
static constexpr int COMPAT_VERSION = 5;
static constexpr int COMPAT_VERSION = 6;
epoch_t epoch = 0;
@ -67,33 +67,13 @@ public:
using ceph::encode;
header.version = HEAD_VERSION;
encode(epoch, payload);
if (!HAVE_FEATURE(features, SERVER_OCTOPUS)) {
// pretend to be vector<pair<pg_notify_t,PastIntervals>>
header.version = 5;
encode((uint32_t)pg_list.size(), payload);
for (auto& i : pg_list) {
encode(i, payload); // this embeds a dup (ignored) PastIntervals
encode(i.past_intervals, payload);
}
return;
}
assert(HAVE_FEATURE(features, SERVER_OCTOPUS));
encode(pg_list, payload);
}
void decode_payload() override {
using ceph::decode;
auto p = payload.cbegin();
decode(epoch, p);
if (header.version == 5) {
// decode legacy vector<pair<pg_notify_t,PastIntervals>>
uint32_t num;
decode(num, p);
pg_list.resize(num);
for (unsigned i = 0; i < num; ++i) {
decode(pg_list[i], p);
decode(pg_list[i].past_intervals, p);
}
return;
}
decode(pg_list, p);
}
private:

View File

@ -22,7 +22,7 @@
class MOSDPGLog final : public MOSDPeeringOp {
private:
static constexpr int HEAD_VERSION = 6;
static constexpr int COMPAT_VERSION = 5;
static constexpr int COMPAT_VERSION = 6;
epoch_t epoch = 0;
/// query_epoch is the epoch of the query being responded to, or
@ -101,12 +101,8 @@ public:
encode(info, payload);
encode(log, payload);
encode(missing, payload, features);
if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
// pre-nautilus OSDs do not set last_peering_reset properly
encode(epoch, payload);
} else {
encode(query_epoch, payload);
}
assert(HAVE_FEATURE(features, SERVER_NAUTILUS));
encode(query_epoch, payload);
encode(past_intervals, payload);
encode(to, payload);
encode(from, payload);
@ -123,9 +119,8 @@ public:
decode(past_intervals, p);
decode(to, p);
decode(from, p);
if (header.version >= 6) {
decode(lease, p);
}
assert(header.version >= 6);
decode(lease, p);
}
private:
template<class T, typename... Args>

View File

@ -26,7 +26,7 @@
class MOSDPGNotify final : public Message {
private:
static constexpr int HEAD_VERSION = 7;
static constexpr int COMPAT_VERSION = 6;
static constexpr int COMPAT_VERSION = 7;
epoch_t epoch = 0;
/// query_epoch is the epoch of the query being responded to, or
@ -61,16 +61,7 @@ public:
using ceph::encode;
header.version = HEAD_VERSION;
encode(epoch, payload);
if (!HAVE_FEATURE(features, SERVER_OCTOPUS)) {
// pretend to be vector<pair<pg_notify_t,PastIntervals>>
header.version = 6;
encode((uint32_t)pg_list.size(), payload);
for (auto& i : pg_list) {
encode(i, payload); // this embeds a dup (ignored) PastIntervals
encode(i.past_intervals, payload);
}
return;
}
assert(HAVE_FEATURE(features, SERVER_OCTOPUS));
encode(pg_list, payload);
}
@ -78,17 +69,6 @@ public:
auto p = payload.cbegin();
using ceph::decode;
decode(epoch, p);
if (header.version == 6) {
// decode legacy vector<pair<pg_notify_t,PastIntervals>>
uint32_t num;
decode(num, p);
pg_list.resize(num);
for (unsigned i = 0; i < num; ++i) {
decode(pg_list[i], p);
decode(pg_list[i].past_intervals, p);
}
return;
}
decode(pg_list, p);
}
void print(std::ostream& out) const override {

View File

@ -75,12 +75,8 @@ public:
using ceph::encode;
encode(op, payload);
encode(map_epoch, payload);
if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
// pre-nautilus OSDs do not set last_peering_reset properly
encode(map_epoch, payload);
} else {
encode(query_epoch, payload);
}
assert(HAVE_FEATURE(features, SERVER_NAUTILUS));
encode(query_epoch, payload);
encode(pgid.pgid, payload);
encode(begin, payload);
encode(end, payload);