]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/messages/MOSDPGRemove.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / messages / MOSDPGRemove.h
index f692ad428c361edb0d01456a38049855eacdbc0c..94e9885e9d94fdd11a7c6a3ae7c8491bc840ed5f 100644 (file)
 #include "msg/Message.h"
 
 
-class MOSDPGRemove : public Message {
-
-  static const int HEAD_VERSION = 3;
-  static const int COMPAT_VERSION = 2;
+class MOSDPGRemove : public MessageInstance<MOSDPGRemove> {
+public:
+  friend factory;
+private:
+  static constexpr int HEAD_VERSION = 3;
+  static constexpr int COMPAT_VERSION = 3;
 
   epoch_t epoch = 0;
 
@@ -33,9 +35,9 @@ class MOSDPGRemove : public Message {
   epoch_t get_epoch() const { return epoch; }
 
   MOSDPGRemove() :
-    Message(MSG_OSD_PG_REMOVE, HEAD_VERSION, COMPAT_VERSION) {}
+    MessageInstance(MSG_OSD_PG_REMOVE, HEAD_VERSION, COMPAT_VERSION) {}
   MOSDPGRemove(epoch_t e, vector<spg_t>& l) :
-    Message(MSG_OSD_PG_REMOVE, HEAD_VERSION, COMPAT_VERSION) {
+    MessageInstance(MSG_OSD_PG_REMOVE, HEAD_VERSION, COMPAT_VERSION) {
     this->epoch = e;
     pg_list.swap(l);
   }
@@ -43,51 +45,17 @@ private:
   ~MOSDPGRemove() override {}
 
 public:  
-  const char *get_type_name() const override { return "PGrm"; }
+  std::string_view get_type_name() const override { return "PGrm"; }
 
   void encode_payload(uint64_t features) override {
-    if (HAVE_FEATURE(features, SERVER_LUMINOUS)) {
-      header.version = HEAD_VERSION;
-    } else {
-      // for jewel+kraken
-      header.version = 2;
-      ::encode(epoch, payload);
-
-      vector<pg_t> _pg_list;
-      _pg_list.reserve(pg_list.size());
-      vector<shard_id_t> _shard_list;
-      _shard_list.reserve(pg_list.size());
-      for (auto i = pg_list.begin(); i != pg_list.end(); ++i) {
-       _pg_list.push_back(i->pgid);
-       _shard_list.push_back(i->shard);
-      }
-      ::encode(_pg_list, payload);
-      ::encode(_shard_list, payload);
-      return;
-    }
-    ::encode(epoch, payload);
-    ::encode(pg_list, payload);
+    using ceph::encode;
+    encode(epoch, payload);
+    encode(pg_list, payload);
   }
   void decode_payload() override {
-    bufferlist::iterator p = payload.begin();
-    if (header.version == 2) {
-      // jewel/kraken
-      ::decode(epoch, p);
-      vector<pg_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(_shard_list.size() == _pg_list.size());
-      pg_list.reserve(_shard_list.size());
-      for (unsigned i = 0; i < _shard_list.size(); ++i) {
-       pg_list.push_back(spg_t(_pg_list[i], _shard_list[i]));
-      }
-      return;
-    }
-    ::decode(epoch, p);
-    ::decode(pg_list, p);
+    auto p = payload.cbegin();
+    decode(epoch, p);
+    decode(pg_list, p);
   }
   void print(ostream& out) const override {
     out << "osd pg remove(" << "epoch " << epoch << "; ";