From: Sage Weil Date: Wed, 12 Apr 2017 03:00:49 +0000 (-0400) Subject: messages/MOSDPGQuery: simplify encoding for luminous+ X-Git-Tag: v12.0.3~190^2~17 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b808e468ec97e4e414ece479411a285b1ea710e8;p=ceph.git messages/MOSDPGQuery: simplify encoding for luminous+ Signed-off-by: Sage Weil --- diff --git a/src/messages/MOSDPGQuery.h b/src/messages/MOSDPGQuery.h index cc5db00ebae7..8b58bc9a9f7a 100644 --- a/src/messages/MOSDPGQuery.h +++ b/src/messages/MOSDPGQuery.h @@ -24,7 +24,7 @@ */ 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; @@ -63,34 +63,47 @@ public: } void encode_payload(uint64_t features) override { - ::encode(epoch, payload); - vector > _pg_list; - _pg_list.reserve(pg_list.size()); - vector _shard_list; - _shard_list.reserve(pg_list.size()); - for (map::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 > _pg_list; + _pg_list.reserve(pg_list.size()); + vector _shard_list; + _shard_list.reserve(pg_list.size()); + for (map::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 > _pg_list; - ::decode(_pg_list, p); - vector _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 > _pg_list; + ::decode(_pg_list, p); + vector _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); } };