summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean McGivern <sean@gitlab.com>2018-04-18 12:52:37 +0100
committerSean McGivern <sean@gitlab.com>2018-04-18 13:06:03 +0100
commitf9c68819e0c904f9d4292fd55f575ba7d9e28157 (patch)
treeccc8b86434c1f212412b570e09e344b5a67edfae
parent019c0d5761b55ca21fd71d547dd4a2ebf14d615f (diff)
downloadgitlab-ce-warn-when-preloading-lots-of-associations.tar.gz
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