]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: allow (some) log trim when degraded, but not during recovery
authorSage Weil <sage@inktank.com>
Sat, 23 Feb 2013 01:01:53 +0000 (17:01 -0800)
committerSage Weil <sage@inktank.com>
Tue, 26 Feb 2013 20:26:43 +0000 (12:26 -0800)
We allow some trim during degraded, although we keep more entries around to
improve our chances of a restarting OSD of doing log-based recovery.

Still disallow during recovery...

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
src/common/config_opts.h
src/osd/ReplicatedPG.cc

index 8a93c39d7932489be2978c3ba9e9d71148c748fc..aae1102f1a0a04b0615201dba5bd3ee76323fe9b 100644 (file)
@@ -391,7 +391,8 @@ OPTION(osd_use_stale_snap, OPT_BOOL, false)
 OPTION(osd_rollback_to_cluster_snap, OPT_STR, "")
 OPTION(osd_default_notify_timeout, OPT_U32, 30) // default notify timeout in seconds
 OPTION(osd_kill_backfill_at, OPT_INT, 0)
-OPTION(osd_min_pg_log_entries, OPT_U32, 1000) // number of entries to keep in the pg log when trimming it
+OPTION(osd_min_pg_log_entries, OPT_U32, 1000)  // number of entries to keep in the pg log when trimming it
+OPTION(osd_max_pg_log_entries, OPT_U32, 10000) // max entries, say when degraded, before we trim
 OPTION(osd_op_complaint_time, OPT_FLOAT, 30) // how many seconds old makes an op complaint-worthy
 OPTION(osd_command_max_records, OPT_INT, 256)
 OPTION(osd_op_log_threshold, OPT_INT, 5) // how many op log messages to show in one go
index 3cbc202d051500b61083bea39a5ec1fce5046ca1..d22f209dbcb66c9f4db5f9136e913e664447b19e 100644 (file)
@@ -564,8 +564,12 @@ void ReplicatedPG::do_pg_op(OpRequestRef op)
 
 void ReplicatedPG::calc_trim_to()
 {
-  if (is_degraded() || !is_clean()) {
-    dout(10) << "calc_trim_to no trim while degraded or not clean" << dendl;
+  if (state_test(PG_STATE_RECOVERING |
+                PG_STATE_RECOVERY_WAIT |
+                PG_STATE_BACKFILL |
+                PG_STATE_BACKFILL_WAIT |
+                PG_STATE_BACKFILL_TOOFULL)) {
+    dout(10) << "calc_trim_to no trim during recovery" << dendl;
     pg_trim_to = eversion_t();
     return;
   }
@@ -577,6 +581,9 @@ void ReplicatedPG::calc_trim_to()
   }
 
   size_t target = g_conf->osd_min_pg_log_entries;
+  if (is_degraded())
+    target = g_conf->osd_max_pg_log_entries;
+
   if (min_last_complete_ondisk != eversion_t() &&
       min_last_complete_ondisk != pg_trim_to &&
       log.approx_size() > target) {