]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSD: remove `skip_maps`
authorMatan Breizman <mbreizma@redhat.com>
Tue, 18 Jul 2023 16:08:23 +0000 (16:08 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Sun, 10 Sep 2023 14:39:56 +0000 (14:39 +0000)
the superblock now stores an interval_set which supports non-contiguous osdmap history.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/osd/osd.cc
src/osd/OSD.cc
src/osd/OSD.h

index ccb7435332b387c18b08bb9aeeb1dcff61edca7d..157881ccbe40055259da1c96298f3a3ea87b0461 100644 (file)
@@ -940,7 +940,6 @@ seastar::future<> OSD::_handle_osd_map(Ref<MOSDMap> m)
     return seastar::now();
   }
   // missing some?
-  bool skip_maps = false;
   epoch_t start = superblock.get_newest_map() + 1;
   if (first > start) {
     logger().info("handle_osd_map message skips epochs {}..{}",
@@ -956,8 +955,6 @@ seastar::future<> OSD::_handle_osd_map(Ref<MOSDMap> m)
       return get_shard_services().osdmap_subscribe(
         m->cluster_osdmap_trim_lower_bound - 1, true);
     }
-    skip_maps = true;
-    start = first;
   }
 
   return seastar::do_with(ceph::os::Transaction{},
index 2c1d2441b769e0ef83ec48bde9e3005211508599..1fd6b8eec3a82dfa09c471cf1a139faa327eea6c 100644 (file)
@@ -7930,40 +7930,30 @@ void OSD::osdmap_subscribe(version_t epoch, bool force_request)
   }
 }
 
-void OSD::trim_maps(epoch_t oldest, bool skip_maps)
+void OSD::trim_maps(epoch_t oldest)
 {
   epoch_t min = std::min(oldest, service.map_cache.cached_key_lower_bound());
   dout(20) <<  __func__ << ": min=" << min << " oldest_map="
-           << superblock.get_oldest_map() << " skip_maps=" << skip_maps
-           << dendl;
+           << superblock.get_oldest_map() << dendl;
   if (min <= superblock.get_oldest_map())
     return;
 
   // Trim from the superblock's oldest_map up to `min`.
   // Break if we have exceeded the txn target size.
-  // If skip_maps is true, we will trim up `min` unconditionally.
   ObjectStore::Transaction t;
-  while (superblock.superblock.get_oldest_map() < min) {
-    dout(20) << " removing old osdmap epoch " << superblock.superblock.get_oldest_map() << dendl;
-    t.remove(coll_t::meta(), get_osdmap_pobject_name(superblock.superblock.get_oldest_map()));
-    t.remove(coll_t::meta(), get_inc_osdmap_pobject_name(superblock.superblock.get_oldest_map()));
+  while (superblock.get_oldest_map() < min &&
+         t.get_num_ops() < cct->_conf->osd_target_transaction_size) {
+    dout(20) << " removing old osdmap epoch " << superblock.get_oldest_map() << dendl;
+    t.remove(coll_t::meta(), get_osdmap_pobject_name(superblock.get_oldest_map()));
+    t.remove(coll_t::meta(), get_inc_osdmap_pobject_name(superblock.get_oldest_map()));
     superblock.maps.erase(superblock.get_oldest_map());
-    if (t.get_num_ops() > cct->_conf->osd_target_transaction_size) {
-      service.publish_superblock(superblock);
-      write_superblock(cct, superblock, t);
-      int tr = store->queue_transaction(service.meta_ch, t.claim_and_reset(), nullptr);
-      ceph_assert(tr == 0);
-      if (skip_maps == false) {
-        break;
-      }
-    }
-  }
-  if (t.get_num_ops() > 0) {
-    service.publish_superblock(superblock);
-    write_superblock(cct, superblock, t);
-    int tr = store->queue_transaction(service.meta_ch, std::move(t), nullptr);
-    ceph_assert(tr == 0);
   }
+
+  service.publish_superblock(superblock);
+  write_superblock(cct, superblock, t);
+  int tr = store->queue_transaction(service.meta_ch, std::move(t), nullptr);
+  ceph_assert(tr == 0);
+
   // we should not trim past service.map_cache.cached_key_lower_bound() 
   // as there may still be PGs with those map epochs recorded.
   ceph_assert(min <= service.map_cache.cached_key_lower_bound());
@@ -8068,8 +8058,6 @@ void OSD::handle_osd_map(MOSDMap *m)
     return;
   }
 
-  // missing some?
-  bool skip_maps = false;
   if (first > superblock.get_newest_map() + 1) {
     dout(10) << "handle_osd_map message skips epochs "
             << superblock.get_newest_map() + 1 << ".." << (first-1) << dendl;
@@ -8087,10 +8075,6 @@ void OSD::handle_osd_map(MOSDMap *m)
       m->put();
       return;
     }
-    // The superblock's oldest_map should be moved forward (skipped)
-    // to the `first` osdmap of the incoming MOSDMap message.
-    // Trim all of the skipped osdmaps before updating the oldest_map.
-    skip_maps = true;
   }
 
   ObjectStore::Transaction t;
@@ -8211,7 +8195,7 @@ void OSD::handle_osd_map(MOSDMap *m)
   }
 
   if (!superblock.maps.empty()) {
-    trim_maps(m->cluster_osdmap_trim_lower_bound, skip_maps);
+    trim_maps(m->cluster_osdmap_trim_lower_bound);
     pg_num_history.prune(superblock.get_oldest_map());
   }
   superblock.insert_osdmap_epochs(first, last);
index 8ed960d96055aad0b56f90cbd436742df38bb08a..231050d8cc2f9a2ffa97facec166bbe42406b70a 100644 (file)
@@ -1685,7 +1685,7 @@ protected:
 
   void handle_osd_map(class MOSDMap *m);
   void _committed_osd_maps(epoch_t first, epoch_t last, class MOSDMap *m);
-  void trim_maps(epoch_t oldest, bool skip_maps);
+  void trim_maps(epoch_t oldest);
   void note_down_osd(int osd);
   void note_up_osd(int osd);
   friend struct C_OnMapCommit;