class MOSDPGQuery : public Message {
static const int HEAD_VERSION = 4;
- static const int COMPAT_VERSION = 3;
+ static const int COMPAT_VERSION = 4;
version_t epoch = 0;
}
void encode_payload(uint64_t features) override {
- if (HAVE_FEATURE(features, SERVER_LUMINOUS)) {
- header.version = HEAD_VERSION;
- } else {
- // for kraken/jewel only
- header.version = 3;
- ::encode(epoch, payload);
- vector<pair<pg_t, pg_query_t> > _pg_list;
- _pg_list.reserve(pg_list.size());
- vector<shard_id_t> _shard_list;
- _shard_list.reserve(pg_list.size());
- for (map<spg_t, pg_query_t>::iterator i = pg_list.begin();
- i != pg_list.end();
- ++i) {
- _pg_list.push_back(make_pair(i->first.pgid, i->second));
- _shard_list.push_back(i->first.shard);
- }
- ::encode(_pg_list, payload, features);
- ::encode(_shard_list, payload);
- return;
- }
::encode(epoch, payload);
::encode(pg_list, payload, features);
}
void decode_payload() override {
bufferlist::iterator p = payload.begin();
- if (header.version < 4) {
- // for kraken/jewel only
- ::decode(epoch, p);
- vector<pair<pg_t, pg_query_t> > _pg_list;
- ::decode(_pg_list, p);
- vector<shard_id_t> _shard_list(_pg_list.size(), shard_id_t::NO_SHARD);
- _shard_list.clear();
- ::decode(_shard_list, p);
- assert(_pg_list.size() == _shard_list.size());
- for (unsigned i = 0; i < _pg_list.size(); ++i) {
- pg_list.insert(
- make_pair(
- spg_t(_pg_list[i].first, _shard_list[i]), _pg_list[i].second));
- }
- return;
- }
::decode(epoch, p);
::decode(pg_list, p);
}