]> git.apps.os.sepia.ceph.com Git - ceph-ci.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, 4 Jan 2019 22:25:52 +0000 (14:25 -0800)
Signed-off-by: Neha Ojha <nojha@redhat.com>
src/osd/PG.h
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h

index 2c2340c88bde20d09bf5bc1d0a15bfea8a4fa75c..50fef7a6e987041ea256d2fda934f67253f44e44 100644 (file)
@@ -1388,6 +1388,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 4cc4e85cbd85648488e4f17550b0d1d0fad1bb28..6633e3dbc11842a86bf2579ed1e99f0e9bbde65a 100644 (file)
@@ -1610,6 +1610,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 81574aad341fdca108bc7c961401860782da0e19..f8c45b9f571173f386816461b58d5922359d37d6 100644 (file)
@@ -1350,6 +1350,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);