From 91bb5fbb87de596aa624419ddb0821a61a2cabc9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 17 Nov 2016 16:37:41 -0600 Subject: [PATCH] osd/ReplicatedPG: osd configured limit on max omap keys during read This doesn't apply to the ops that explicitly name keys to read; those aren't as risky. Signed-off-by: Sage Weil --- src/common/config_opts.h | 2 ++ src/osd/ReplicatedPG.cc | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 99237c787244..d8936bfde4a1 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -929,6 +929,8 @@ OPTION(osd_max_object_namespace_len, OPT_U32, 256) // max rados object namespace OPTION(osd_max_attr_name_len, OPT_U32, 100) // max rados attr name len; cannot go higher than 100 chars for file system backends OPTION(osd_max_attr_size, OPT_U64, 0) +OPTION(osd_max_omap_entries_per_request, OPT_U64, 131072) + OPTION(osd_objectstore, OPT_STR, "filestore") // ObjectStore backend type OPTION(osd_objectstore_tracing, OPT_BOOL, false) // true if LTTng-UST tracepoints should be enabled // Override maintaining compatibility with older OSDs diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 8a8b5870ecbc..7a0c351bf6da 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5822,6 +5822,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) tracepoint(osd, do_osd_op_pre_omapgetkeys, soid.oid.name.c_str(), soid.snap.val, "???", 0); goto fail; } + if (max_return > g_conf->osd_max_omap_entries_per_request) { + max_return = g_conf->osd_max_omap_entries_per_request; + } tracepoint(osd, do_osd_op_pre_omapgetkeys, soid.oid.name.c_str(), soid.snap.val, start_after.c_str(), max_return); set out_set; @@ -5859,6 +5862,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) tracepoint(osd, do_osd_op_pre_omapgetvals, soid.oid.name.c_str(), soid.snap.val, "???", 0, "???"); goto fail; } + if (max_return > g_conf->osd_max_omap_entries_per_request) { + max_return = g_conf->osd_max_omap_entries_per_request; + } tracepoint(osd, do_osd_op_pre_omapgetvals, soid.oid.name.c_str(), soid.snap.val, start_after.c_str(), max_return, filter_prefix.c_str()); map out_set; -- 2.47.3