]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd: report last_purged_snaps_scrub as part of beacon
authorSage Weil <sage@redhat.com>
Wed, 26 Jun 2019 19:29:55 +0000 (14:29 -0500)
committerSage Weil <sage@redhat.com>
Tue, 2 Jul 2019 13:37:51 +0000 (08:37 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/crimson/osd/osd.cc
src/messages/MOSDBeacon.h
src/osd/OSD.cc

index 5515ee35be7ceb195ee13da3803abf7722b8122f..9fa996be19f00316d2af8b807f26155f8f6fd816 100644 (file)
@@ -875,7 +875,8 @@ seastar::future<> OSD::send_beacon()
   //        and should set m->pgs
   epoch_t min_last_epoch_clean = osdmap->get_epoch();
   auto m = make_message<MOSDBeacon>(osdmap->get_epoch(),
-                                    min_last_epoch_clean);
+                                    min_last_epoch_clean,
+                                   superblock.last_purged_snaps_scrub);
   return monc->send_message(m);
 }
 
index 068858cbf9685478ee43ba89e9f18710d6ca42dc..20341858de4eda571dafac100c2aca8e4fb52bf9 100644 (file)
@@ -6,34 +6,46 @@
 #include "PaxosServiceMessage.h"
 
 class MOSDBeacon : public PaxosServiceMessage {
+private:
+  static constexpr int HEAD_VERSION = 2;
+  static constexpr int COMPAT_VERSION = 1;
 public:
   std::vector<pg_t> pgs;
   epoch_t min_last_epoch_clean = 0;
+  utime_t last_purged_snaps_scrub;
 
   MOSDBeacon()
-    : PaxosServiceMessage{MSG_OSD_BEACON, 0}
+    : PaxosServiceMessage{MSG_OSD_BEACON, 0,
+                         HEAD_VERSION, COMPAT_VERSION}
   {}
-  MOSDBeacon(epoch_t e, epoch_t min_lec)
-    : PaxosServiceMessage{MSG_OSD_BEACON, e},
-      min_last_epoch_clean(min_lec)
+  MOSDBeacon(epoch_t e, epoch_t min_lec, utime_t ls)
+    : PaxosServiceMessage{MSG_OSD_BEACON, e,
+                         HEAD_VERSION, COMPAT_VERSION},
+      min_last_epoch_clean(min_lec),
+      last_purged_snaps_scrub(ls)
   {}
   void encode_payload(uint64_t features) override {
     using ceph::encode;
     paxos_encode();
     encode(pgs, payload);
     encode(min_last_epoch_clean, payload);
+    encode(last_purged_snaps_scrub, payload);
   }
   void decode_payload() override {
     auto p = payload.cbegin();
     paxos_decode(p);
     decode(pgs, p);
     decode(min_last_epoch_clean, p);
+    if (header.version >= 2) {
+      decode(last_purged_snaps_scrub, p);
+    }
   }
   std::string_view get_type_name() const override { return "osd_beacon"; }
   void print(ostream &out) const {
     out << get_type_name()
         << "(pgs " << pgs
         << " lec " << min_last_epoch_clean
+       << " last_purged_snaps_scrub " << last_purged_snaps_scrub
         << " v" << version << ")";
   }
 private:
index 5bfb172882d45b88c4e1fa3bd7d7ee89832b80a2..6d4757b057e2e52f2eee77467678506cc2d4eb84 100644 (file)
@@ -5894,7 +5894,9 @@ void OSD::send_beacon(const ceph::coarse_mono_clock::time_point& now)
     MOSDBeacon* beacon = nullptr;
     {
       std::lock_guard l{min_last_epoch_clean_lock};
-      beacon = new MOSDBeacon(osdmap->get_epoch(), min_last_epoch_clean);
+      beacon = new MOSDBeacon(osdmap->get_epoch(),
+                             min_last_epoch_clean,
+                             superblock.last_purged_snaps_scrub);
       beacon->pgs = min_last_epoch_clean_pgs;
       last_sent_beacon = now;
     }