Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2018-04-18 14:52:37 +0300
committerSean McGivern <sean@gitlab.com>2018-04-18 15:06:03 +0300
commitf9c68819e0c904f9d4292fd55f575ba7d9e28157 (patch)
treeccc8b86434c1f212412b570e09e344b5a67edfae
parent019c0d5761b55ca21fd71d547dd4a2ebf14d615f (diff)
Warn when Goldiloader's preloading exceeds 100 objectswarn-when-preloading-lots-of-associations
-rw-r--r--config/initializers/goldiloader.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/config/initializers/goldiloader.rb b/config/initializers/goldiloader.rb
new file mode 100644
index 00000000000..2a5f9c9dbbc
--- /dev/null
+++ b/config/initializers/goldiloader.rb
@@ -0,0 +1,25 @@
+module Goldiloader
+ module AssociationLoader
+ module LimitPreloading
+ PreloadingLimitExceeded = Class.new(StandardError)
+
+ private
+
+ def eager_load(models, association_name)
+ if Gitlab::Sentry.enabled? && models.count > 100
+ Gitlab::Sentry.context
+
+ Raven.capture_exception(PreloadingLimitExceeded.new("More than 100 models preloaded for #{models.first.class}.#{association_name}"))
+ return
+ end
+
+ super
+ rescue => e
+ Raven.capture_exception(e)
+ end
+ end
+
+ prepend LimitPreloading
+ singleton_class.prepend LimitPreloading
+ end
+end