*/
class MOSDPGQuery : public Message {
- static const int HEAD_VERSION = 3;
+ static const int HEAD_VERSION = 4;
static const int COMPAT_VERSION = 3;
version_t epoch;
}
void encode_payload(uint64_t features) override {
- ::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);
+ if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) {
+ // 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(_pg_list, payload, features);
- ::encode(_shard_list, payload);
+ ::encode(epoch, payload);
+ ::encode(pg_list, payload, features);
}
void decode_payload() override {
bufferlist::iterator p = payload.begin();
- ::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));
+ 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);
}
};