]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: bring back old calc_trim_to and rename new method
authorNeha Ojha <nojha@redhat.com>
Fri, 14 Dec 2018 23:59:24 +0000 (15:59 -0800)
committerNeha Ojha <nojha@redhat.com>
Fri, 25 Jan 2019 19:55:10 +0000 (19:55 +0000)
Signed-off-by: Neha Ojha <nojha@redhat.com>
(cherry picked from commit 0536aef761fefda9a86d5bc72a12ca8cab931ccb)

src/osd/PG.h
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h

index ffb50360ee28a5d781305d78f7de8ae1389a8213..36a8e5a1825bcee3d09db0464d73f12caeffbab9 100644 (file)
@@ -1372,6 +1372,8 @@ protected:
 
   virtual void calc_trim_to() = 0;
 
+  virtual void calc_trim_to_aggressive() = 0;
+
   void proc_replica_log(pg_info_t &oinfo, const pg_log_t &olog,
                        pg_missing_t& omissing, pg_shard_t from);
   void proc_master_log(ObjectStore::Transaction& t, pg_info_t &oinfo, pg_log_t &olog,
index 5d0805cc05bcfbae32f7eebb2e3d449cc9e156c8..55301dd5d8a85ad8aeeb2c134c153124aa2ca8a3 100644 (file)
@@ -1609,6 +1609,48 @@ int PrimaryLogPG::do_scrub_ls(MOSDOp *m, OSDOp *osd_op)
 }
 
 void PrimaryLogPG::calc_trim_to()
+{
+  size_t target = cct->_conf->osd_min_pg_log_entries;
+  if (is_degraded() ||
+      state_test(PG_STATE_RECOVERING |
+                 PG_STATE_RECOVERY_WAIT |
+                 PG_STATE_BACKFILLING |
+                 PG_STATE_BACKFILL_WAIT |
+                 PG_STATE_BACKFILL_TOOFULL)) {
+    target = cct->_conf->osd_max_pg_log_entries;
+  }
+
+  eversion_t limit = std::min(
+    min_last_complete_ondisk,
+    pg_log.get_can_rollback_to());
+  if (limit != eversion_t() &&
+      limit != pg_trim_to &&
+      pg_log.get_log().approx_size() > target) {
+    size_t num_to_trim = std::min(pg_log.get_log().approx_size() - target,
+                             cct->_conf->osd_pg_log_trim_max);
+    if (num_to_trim < cct->_conf->osd_pg_log_trim_min &&
+        cct->_conf->osd_pg_log_trim_max >= cct->_conf->osd_pg_log_trim_min) {
+      return;
+    }
+    list<pg_log_entry_t>::const_iterator it = pg_log.get_log().log.begin();
+    eversion_t new_trim_to;
+    for (size_t i = 0; i < num_to_trim; ++i) {
+      new_trim_to = it->version;
+      ++it;
+      if (new_trim_to > limit) {
+        new_trim_to = limit;
+        dout(10) << "calc_trim_to trimming to min_last_complete_ondisk" << dendl;
+        break;
+      }
+    }
+    dout(10) << "calc_trim_to " << pg_trim_to << " -> " << new_trim_to << dendl;
+    pg_trim_to = new_trim_to;
+    assert(pg_trim_to <= pg_log.get_head());
+    assert(pg_trim_to <= min_last_complete_ondisk);
+  }
+}
+
+void PrimaryLogPG::calc_trim_to_aggressive()
 {
   size_t target = cct->_conf->osd_min_pg_log_entries;
   if (is_degraded() ||
index 615b23d612913f4cd911d819398ad455b3e957df..87e4891ea805ff2c6d6effe7ba5f3f791f4c6a8d 100644 (file)
@@ -1345,6 +1345,7 @@ protected:
   void apply_and_flush_repops(bool requeue);
 
   void calc_trim_to() override;
+  void calc_trim_to_aggressive() override;
   int do_xattr_cmp_u64(int op, __u64 v1, bufferlist& xattr);
   int do_xattr_cmp_str(int op, string& v1s, bufferlist& xattr);