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
path: root/app
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2019-08-13 19:04:30 +0300
committerStan Hu <stanhu@gmail.com>2019-08-13 19:04:30 +0300
commite658f9603c99ca6a8ef4c0292b2cdab2916fb09e (patch)
tree57e0c03ea5dd676c7a53243bf3da20aefafc0ded /app
parent3702ab7317533896c7455357dd6643181666f22b (diff)
Only expire tag cache once per push
Previously each tag in a push would invoke the Gitaly `FindAllTags` RPC since the tag cache would be invalidated with every tag. We can eliminate those extraneous calls by expiring the tag cache once in `PostReceive` and taking advantage of the cached tags. Relates to https://gitlab.com/gitlab-org/gitlab-ce/issues/65795
Diffstat (limited to 'app')
-rw-r--r--app/models/repository.rb14
-rw-r--r--app/workers/post_receive.rb2
2 files changed, 11 insertions, 5 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 58abfaef801..9d45a12fa6e 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -418,25 +418,29 @@ class Repository
end
# Runs code before pushing (= creating or removing) a tag.
+ #
+ # Note that this doesn't expire the tags. You may need to call
+ # expire_caches_for_tags or expire_tags_cache.
def before_push_tag
+ repository_event(:push_tag)
+ end
+
+ def expire_caches_for_tags
expire_statistics_caches
expire_emptiness_caches
expire_tags_cache
-
- repository_event(:push_tag)
end
# Runs code before removing a tag.
def before_remove_tag
- expire_tags_cache
- expire_statistics_caches
+ expire_caches_for_tags
repository_event(:remove_tag)
end
# Runs code after removing a tag.
def after_remove_tag
- expire_tags_cache
+ expire_caches_for_tags
end
# Runs code after the HEAD of a repository is changed.
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb
index d8dfbc0faf7..675fa1a73ca 100644
--- a/app/workers/post_receive.rb
+++ b/app/workers/post_receive.rb
@@ -44,6 +44,8 @@ class PostReceive
# Expire the branches cache so we have updated data for this push
post_received.project.repository.expire_branches_cache if post_received.includes_branches?
+ # We only need to expire tags once per push
+ post_received.project.repository.expire_caches_for_tags if post_received.includes_tags?
post_received.enum_for(:changes_refs).with_index do |(oldrev, newrev, ref), index|
service_klass =