diff options
author | Samuel Just <sam.just@inktank.com> | 2013-08-15 15:35:26 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-08-15 15:35:26 -0700 |
commit | 56221d86cead9896892deecfc86d125d1ee0e4bb (patch) | |
tree | 61c9e82d6d78276fa754eadda439245e28e5ebd5 | |
parent | e7836e6e7ddb5f78db4bab2ab94a566b317bdbfb (diff) | |
download | ceph-56221d86cead9896892deecfc86d125d1ee0e4bb.tar.gz |
ReplicatedPG: add osd_recover_clone_overlap_limit to limit cloneswip-5985
We don't want to clone_range from clones too many times.
For now, just skip the cloning if there are too many holes.
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/common/config_opts.h | 5 | ||||
-rw-r--r-- | src/osd/ReplicatedPG.cc | 14 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 52458c268c8..52fc416766b 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -403,6 +403,11 @@ OPTION(osd_op_pq_min_cost, OPT_U64, 65536) OPTION(osd_disk_threads, OPT_INT, 1) OPTION(osd_recovery_threads, OPT_INT, 1) OPTION(osd_recover_clone_overlap, OPT_BOOL, true) // preserve clone_overlap during recovery/migration + +// Only use clone_overlap for recovery if there are fewer than +// osd_recover_clone_overlap_limit entries in the overlap set +OPTION(osd_recover_clone_overlap_limit, OPT_INT, 10) + OPTION(osd_backfill_scan_min, OPT_INT, 64) OPTION(osd_backfill_scan_max, OPT_INT, 512) OPTION(osd_op_thread_timeout, OPT_INT, 15) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index ab9c8099a44..eb300792e3a 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5128,6 +5128,13 @@ void ReplicatedPG::calc_head_subsets(ObjectContext *obc, SnapSet& snapset, const << " overlap " << prev << dendl; } + + if (cloning.num_intervals() > g_conf->osd_recover_clone_overlap_limit) { + dout(10) << "skipping clone, too many holes" << dendl; + clone_subsets.clear(); + cloning.clear(); + } + // what's left for us to push? data_subset.subtract(cloning); @@ -5197,6 +5204,13 @@ void ReplicatedPG::calc_clone_subsets(SnapSet& snapset, const hobject_t& soid, dout(10) << "calc_clone_subsets " << soid << " does not have next " << c << " overlap " << next << dendl; } + + if (cloning.num_intervals() > g_conf->osd_recover_clone_overlap_limit) { + dout(10) << "skipping clone, too many holes" << dendl; + clone_subsets.clear(); + cloning.clear(); + } + // what's left for us to push? data_subset.subtract(cloning); |