From 6d89b34e5608c71b49ef33ab58340e90bd8da6e4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 22 Feb 2013 17:01:53 -0800 Subject: [PATCH] osd: allow (some) log trim when degraded, but not during recovery 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 Reviewed-by: Samuel Just --- src/common/config_opts.h | 3 ++- src/osd/ReplicatedPG.cc | 11 +++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 8a93c39d79324..aae1102f1a0a0 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -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 diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 3cbc202d05150..d22f209dbcb66 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -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) { -- 2.39.5