]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: limit omap data in push op 12417/head
authorWanlong Gao <wanlong.gao@easystack.cn>
Thu, 23 Jun 2016 12:04:25 +0000 (20:04 +0800)
committerNathan Cutler <ncutler@suse.com>
Fri, 9 Dec 2016 13:44:39 +0000 (14:44 +0100)
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 <wanlong.gao@easystack.cn>
(cherry picked from commit 56064c5cb645254574dbad00e6c16b783115bb93)

src/common/config_opts.h
src/osd/ReplicatedBackend.cc

index c55694e88608999202382ced75f9fd5d5befe0e9..b20920c2ae64a9948259e89b439a596596a6d809 100644 (file)
@@ -616,6 +616,7 @@ OPTION(osd_recovery_delay_start, OPT_FLOAT, 0)
 OPTION(osd_recovery_max_active, OPT_INT, 15)
 OPTION(osd_recovery_max_single_start, OPT_INT, 5)
 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
index 7228a12030ac4904161987d98049383bfb11f9fb..c1c12d61c073d1f8265ab38b3d2550b9eec34ecb 100644 (file)
@@ -2033,7 +2033,9 @@ int ReplicatedBackend::build_push_op(const ObjectRecoveryInfo &recovery_info,
         iter->valid();
         iter->next()) {
       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()));