summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-03-30 14:04:28 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2016-04-04 10:44:35 +0200
commit7f0fd73eeb983782bac26bb983ec8ea52194b80a (patch)
treef73b6bf39f00dcdb783e7d721810d45fff3c5d10
parent9fa94326dba11ca3b9197a4f084ba2883c29bdff (diff)
downloadgitlab-ce-7f0fd73eeb983782bac26bb983ec8ea52194b80a.tar.gz
Cache default_issues_tracker? in Banzai
Every object processed by ExternalIssueReferenceFilter can return a different Project instance when calling "project". For example, every note processed will have it's own associated Project. If we were to cache Project#default_issues_tracker? on Project level this would have no impact on Markdown rendering timings as the cache would have to be built for every Project instance without it ever being re-used. To work around this we cache Project#default_issues_tracker? in Banzai::Filter::ExternalIssueReferenceFilter using the project's _id_ instead of the whole object. This setup allows re-using of the cached data even when the Project instances used are different, as long as the actual project IDs are the same.
-rw-r--r--lib/banzai/filter/external_issue_reference_filter.rb17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/banzai/filter/external_issue_reference_filter.rb b/lib/banzai/filter/external_issue_reference_filter.rb
index a3b66c4645a..37344b90576 100644
--- a/lib/banzai/filter/external_issue_reference_filter.rb
+++ b/lib/banzai/filter/external_issue_reference_filter.rb
@@ -35,7 +35,7 @@ module Banzai
def call
# Early return if the project isn't using an external tracker
- return doc if project.nil? || project.default_issues_tracker?
+ return doc if project.nil? || default_issues_tracker?
ref_pattern = ExternalIssue.reference_pattern
ref_start_pattern = /\A#{ref_pattern}\z/
@@ -90,6 +90,21 @@ module Banzai
def url_for_issue(*args)
IssuesHelper.url_for_issue(*args)
end
+
+ def default_issues_tracker?
+ if RequestStore.active?
+ default_issues_tracker_cache[project.id] ||=
+ project.default_issues_tracker?
+ else
+ project.default_issues_tracker?
+ end
+ end
+
+ private
+
+ def default_issues_tracker_cache
+ RequestStore[:banzai_default_issues_tracker_cache] ||= {}
+ end
end
end
end