]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: osd configured limit on max omap keys during read
authorSage Weil <sage@redhat.com>
Thu, 17 Nov 2016 22:37:41 +0000 (16:37 -0600)
committerSage Weil <sage@redhat.com>
Thu, 17 Nov 2016 23:00:36 +0000 (17:00 -0600)
This doesn't apply to the ops that explicitly name keys to read; those
aren't as risky.

Signed-off-by: Sage Weil <sage@redhat.com>
src/common/config_opts.h
src/osd/ReplicatedPG.cc

index 99237c7872443f49f01055d970e80eb8f3d93672..d8936bfde4a16a8cf284a58c975bca3fb337535f 100644 (file)
@@ -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
index 8a8b5870ecbc2bbcf62ff415ff50d7a696961c47..7a0c351bf6da64680ab32a60f210abe9c421b54a 100644 (file)
@@ -5822,6 +5822,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& 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<string> out_set;
 
@@ -5859,6 +5862,9 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& 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<string, bufferlist> out_set;