From: Wanlong Gao Date: Thu, 23 Jun 2016 12:04:25 +0000 (+0800) Subject: osd: limit omap data in push op X-Git-Tag: archive/raspbian/12.2.8+dfsg1-5+rpi1~3^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e6860e32f25c4b2c9c15410a7d47cd0b66227cb9;p=ceph.git osd: limit omap data in push op We already have the config osd_recovery_max_chunk to limit the total size of omap entries and omap data. But we need an individual config to limit the number of omap entries independently. We call this config osd_recovery_max_omap_entries_per_chunk here with the default number of 64000. Signed-off-by: Wanlong Gao Gbp-Pq: Name osd-limit-omap-data-in-push-op.patch --- diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 3795f0ec3..1c3ea43fb 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -748,6 +748,7 @@ OPTION(osd_recovery_delay_start, OPT_FLOAT, 0) OPTION(osd_recovery_max_active, OPT_INT, 3) OPTION(osd_recovery_max_single_start, OPT_INT, 1) OPTION(osd_recovery_max_chunk, OPT_U64, 8<<20) // max size of push chunk +OPTION(osd_recovery_max_omap_entries_per_chunk, OPT_U64, 64000) // max number of omap entries per chunk; 0 to disable limit OPTION(osd_copyfrom_max_chunk, OPT_U64, 8<<20) // max size of a COPYFROM chunk OPTION(osd_push_per_object_cost, OPT_U64, 1000) // push cost per object OPTION(osd_max_push_cost, OPT_U64, 8<<20) // max size of push message diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 32b9f1765..708ca7855 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -1985,7 +1985,9 @@ int ReplicatedBackend::build_push_op(const ObjectRecoveryInfo &recovery_info, iter->valid(); iter->next(false)) { if (!out_op->omap_entries.empty() && - available <= (iter->key().size() + iter->value().length())) + ((cct->_conf->osd_recovery_max_omap_entries_per_chunk > 0 && + out_op->omap_entries.size() >= cct->_conf->osd_recovery_max_omap_entries_per_chunk) || + available <= iter->key().size() + iter->value().length())) break; out_op->omap_entries.insert(make_pair(iter->key(), iter->value()));