]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
messages/MOSDPGQuery: simplify encoding for luminous+
authorSage Weil <sage@redhat.com>
Wed, 12 Apr 2017 03:00:49 +0000 (23:00 -0400)
committerSage Weil <sage@redhat.com>
Fri, 21 Apr 2017 20:00:39 +0000 (16:00 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/messages/MOSDPGQuery.h

index cc5db00ebae7381dc43a4ce2770f5cbb2a79f4eb..8b58bc9a9f7afde949b1d0fea17b5eaf5c9e5288 100644 (file)
@@ -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<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);
   }
 };