gitlab-org--gitlab-foss/app/models/concerns/reactive_caching.rb

186 lines
5.6 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
# The ReactiveCaching concern is used to fetch some data in the background and
# store it in the Rails cache, keeping it up-to-date for as long as it is being
# requested. If the data hasn't been requested for +reactive_cache_lifetime+,
# it stop being refreshed, and then be removed.
#
# Example of use:
#
# class Foo < ApplicationRecord
# include ReactiveCaching
#
# self.reactive_cache_key = ->(thing) { ["foo", thing.id] }
#
# after_save :clear_reactive_cache!
#
# def calculate_reactive_cache
# # Expensive operation here. The return value of this method is cached
# end
#
# def result
# with_reactive_cache do |data|
# # ...
# end
# end
# end
#
# In this example, the first time `#result` is called, it will return `nil`.
# However, it will enqueue a background worker to call `#calculate_reactive_cache`
# and set an initial cache lifetime of ten minutes.
#
# The background worker needs to find or generate the object on which
# `with_reactive_cache` was called.
# The default behaviour can be overridden by defining a custom
# `reactive_cache_worker_finder`.
# Otherwise the background worker will use the class name and primary key to get
# the object using the ActiveRecord find_by method.
#
# class Bar
# include ReactiveCaching
#
# self.reactive_cache_key = ->() { ["bar", "thing"] }
# self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
#
# def self.from_cache(var1, var2)
# # This method will be called by the background worker with "bar1" and
# # "bar2" as arguments.
# new(var1, var2)
# end
#
# def initialize(var1, var2)
# # ...
# end
#
# def calculate_reactive_cache
# # Expensive operation here. The return value of this method is cached
# end
#
# def result
# with_reactive_cache("bar1", "bar2") do |data|
# # ...
# end
# end
# end
#
# Each time the background job completes, it stores the return value of
# `#calculate_reactive_cache`. It is also re-enqueued to run again after
# `reactive_cache_refresh_interval`, so keeping the stored value up to date.
# Calculations are never run concurrently.
#
# Calling `#result` while a value is in the cache will call the block given to
# `#with_reactive_cache`, yielding the cached value. It will also extend the
# lifetime by `reactive_cache_lifetime`.
#
# Once the lifetime has expired, no more background jobs will be enqueued and
# calling `#result` will again return `nil` - starting the process all over
# again
module ReactiveCaching
extend ActiveSupport::Concern
Squashed commit of the following: commit 610c02c305d9fb3c7d271883450a5fee8b0cf16f Merge: f2088edb260 84f24dcef0d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 23:01:38 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit f2088edb26008e5791b7be86fc02fc470c881143 Merge: c67e1d32cac 339f47abec1 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:52:10 2018 +0900 Merge branch 'improve-junit-support-be' of gitlab.com:gitlab-org/gitlab-ce into improve-junit-support-be commit c67e1d32cac731b895e2f49a24ce0e1726b8196c Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:51:39 2018 +0900 Remove debuggable fixtures commit 339f47abec1d0ce815e6103a087902d71d8ff5be Merge: 7a33a9be724 96b748fbcc0 Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:10:18 2018 +0100 Merge branch 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce into improve-junit-support-be * 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce: Add spec for latest Add spec for merge request Add spec for cache invalidation Add spec for pipeline Add spec Fix specs Support corrupted fixtures Add cache key to error message commit 7a33a9be724dbde79a24cec77658952ff2d2fa6c Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:09:56 2018 +0100 Show resolved failures commit 96b748fbcc00a98a13aeb78f5d97de9cf25035b6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:50:05 2018 +0900 Add spec for latest commit 0e8b024169b4b0ac272331117ac2fa821c4052f7 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:24:38 2018 +0900 Add spec for merge request commit 8690a699bc98394ad4deebdc91e6690758c5965e Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:18:55 2018 +0900 Add spec for cache invalidation commit 97678e1612826af409ca8a04b6c0dc830f7b66c6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:01:03 2018 +0900 Add spec for pipeline commit 96c2a698af049e4026c68e74b1f41a265464b2b2 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:52:21 2018 +0900 Add spec commit 67bcbd25a3c13abb78ea43c0411f5aed417b87d0 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:39:02 2018 +0900 Fix specs commit d7d49def2023f85c07d2718b83f35c8849f65f05 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:11:07 2018 +0900 Support corrupted fixtures commit d58dbbc17a7d954db22082615f5331c148c1061b Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:10:47 2018 +0900 Add cache key to error message commit f6f976216dc36333b5e05e3f0acdfca689350483 Author: Shinya Maeda <shinya@gitlab.com> Date: Thu Aug 2 19:07:46 2018 +0900 bring back debaggable fixtures commit 48a7800e67a718145c0e88c324c0c1f9619e26a4 Merge: 2822b9e8a36 dd627072b3f Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 09:22:22 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit 2822b9e8a369162d098a72a58803c8494b2343cd Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:54:47 2018 +0900 Move cache invalidation policy to outside of reactive cache commit b35efb1764ae61bb31dacbf79dbc022dcee3a203 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:34:10 2018 +0900 ADd reactive cache an ability to invalite cache commit feafee6f8a50f4a32866d8ae768e99766b0b7c73 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:25:22 2018 +0900 Pipeline has test reports if latest builds have any commit f302dbb73abe03c6c431e7d52d526e28a1586fee Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:18:56 2018 +0900 Invalidate test reports cache if it's outdated commit 83adaca01a1ee1cd64cac86b6fa3d10e2e4e2b98 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 18:08:06 2018 +0900 Revert cache invalidation in expire pipeline cache worker commit ec3af5de4ca34e2e92ad6b97f29733d6c65062bc Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 15:13:47 2018 +0900 Fix feature spec commit 0db48805a1ba68763be0504eb57218bde2380e4b Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:46 2018 +0900 Change lifetime of test reports cache to 10 minutes commit 17f7e78bfe2188c349cda1ff90a3ea94d337461e Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:19 2018 +0900 Add changelog commit 89c87585ab7f5333a8139c02b330dd2caf0be31a Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:01:20 2018 +0900 Add feature spec commit 1120cfd7a9ab06105f2e763c375fab00922b7e0c Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 12:55:47 2018 +0900 Invalidate cache when pipeline status transits. Correct test reports from the latest builds
2018-08-07 10:02:57 -04:00
InvalidateReactiveCache = Class.new(StandardError)
included do
class_attribute :reactive_cache_lease_timeout
class_attribute :reactive_cache_key
class_attribute :reactive_cache_lifetime
class_attribute :reactive_cache_refresh_interval
class_attribute :reactive_cache_worker_finder
# defaults
self.reactive_cache_lease_timeout = 2.minutes
self.reactive_cache_refresh_interval = 1.minute
self.reactive_cache_lifetime = 10.minutes
self.reactive_cache_worker_finder = ->(id, *_args) do
find_by(primary_key => id)
end
def calculate_reactive_cache(*args)
raise NotImplementedError
end
2018-07-25 06:03:18 -04:00
def reactive_cache_updated(*args)
end
def with_reactive_cache(*args, &blk)
Squashed commit of the following: commit 610c02c305d9fb3c7d271883450a5fee8b0cf16f Merge: f2088edb260 84f24dcef0d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 23:01:38 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit f2088edb26008e5791b7be86fc02fc470c881143 Merge: c67e1d32cac 339f47abec1 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:52:10 2018 +0900 Merge branch 'improve-junit-support-be' of gitlab.com:gitlab-org/gitlab-ce into improve-junit-support-be commit c67e1d32cac731b895e2f49a24ce0e1726b8196c Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:51:39 2018 +0900 Remove debuggable fixtures commit 339f47abec1d0ce815e6103a087902d71d8ff5be Merge: 7a33a9be724 96b748fbcc0 Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:10:18 2018 +0100 Merge branch 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce into improve-junit-support-be * 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce: Add spec for latest Add spec for merge request Add spec for cache invalidation Add spec for pipeline Add spec Fix specs Support corrupted fixtures Add cache key to error message commit 7a33a9be724dbde79a24cec77658952ff2d2fa6c Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:09:56 2018 +0100 Show resolved failures commit 96b748fbcc00a98a13aeb78f5d97de9cf25035b6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:50:05 2018 +0900 Add spec for latest commit 0e8b024169b4b0ac272331117ac2fa821c4052f7 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:24:38 2018 +0900 Add spec for merge request commit 8690a699bc98394ad4deebdc91e6690758c5965e Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:18:55 2018 +0900 Add spec for cache invalidation commit 97678e1612826af409ca8a04b6c0dc830f7b66c6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:01:03 2018 +0900 Add spec for pipeline commit 96c2a698af049e4026c68e74b1f41a265464b2b2 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:52:21 2018 +0900 Add spec commit 67bcbd25a3c13abb78ea43c0411f5aed417b87d0 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:39:02 2018 +0900 Fix specs commit d7d49def2023f85c07d2718b83f35c8849f65f05 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:11:07 2018 +0900 Support corrupted fixtures commit d58dbbc17a7d954db22082615f5331c148c1061b Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:10:47 2018 +0900 Add cache key to error message commit f6f976216dc36333b5e05e3f0acdfca689350483 Author: Shinya Maeda <shinya@gitlab.com> Date: Thu Aug 2 19:07:46 2018 +0900 bring back debaggable fixtures commit 48a7800e67a718145c0e88c324c0c1f9619e26a4 Merge: 2822b9e8a36 dd627072b3f Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 09:22:22 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit 2822b9e8a369162d098a72a58803c8494b2343cd Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:54:47 2018 +0900 Move cache invalidation policy to outside of reactive cache commit b35efb1764ae61bb31dacbf79dbc022dcee3a203 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:34:10 2018 +0900 ADd reactive cache an ability to invalite cache commit feafee6f8a50f4a32866d8ae768e99766b0b7c73 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:25:22 2018 +0900 Pipeline has test reports if latest builds have any commit f302dbb73abe03c6c431e7d52d526e28a1586fee Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:18:56 2018 +0900 Invalidate test reports cache if it's outdated commit 83adaca01a1ee1cd64cac86b6fa3d10e2e4e2b98 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 18:08:06 2018 +0900 Revert cache invalidation in expire pipeline cache worker commit ec3af5de4ca34e2e92ad6b97f29733d6c65062bc Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 15:13:47 2018 +0900 Fix feature spec commit 0db48805a1ba68763be0504eb57218bde2380e4b Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:46 2018 +0900 Change lifetime of test reports cache to 10 minutes commit 17f7e78bfe2188c349cda1ff90a3ea94d337461e Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:19 2018 +0900 Add changelog commit 89c87585ab7f5333a8139c02b330dd2caf0be31a Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:01:20 2018 +0900 Add feature spec commit 1120cfd7a9ab06105f2e763c375fab00922b7e0c Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 12:55:47 2018 +0900 Invalidate cache when pipeline status transits. Correct test reports from the latest builds
2018-08-07 10:02:57 -04:00
unless within_reactive_cache_lifetime?(*args)
refresh_reactive_cache!(*args)
return
Squashed commit of the following: commit 610c02c305d9fb3c7d271883450a5fee8b0cf16f Merge: f2088edb260 84f24dcef0d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 23:01:38 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit f2088edb26008e5791b7be86fc02fc470c881143 Merge: c67e1d32cac 339f47abec1 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:52:10 2018 +0900 Merge branch 'improve-junit-support-be' of gitlab.com:gitlab-org/gitlab-ce into improve-junit-support-be commit c67e1d32cac731b895e2f49a24ce0e1726b8196c Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:51:39 2018 +0900 Remove debuggable fixtures commit 339f47abec1d0ce815e6103a087902d71d8ff5be Merge: 7a33a9be724 96b748fbcc0 Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:10:18 2018 +0100 Merge branch 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce into improve-junit-support-be * 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce: Add spec for latest Add spec for merge request Add spec for cache invalidation Add spec for pipeline Add spec Fix specs Support corrupted fixtures Add cache key to error message commit 7a33a9be724dbde79a24cec77658952ff2d2fa6c Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:09:56 2018 +0100 Show resolved failures commit 96b748fbcc00a98a13aeb78f5d97de9cf25035b6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:50:05 2018 +0900 Add spec for latest commit 0e8b024169b4b0ac272331117ac2fa821c4052f7 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:24:38 2018 +0900 Add spec for merge request commit 8690a699bc98394ad4deebdc91e6690758c5965e Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:18:55 2018 +0900 Add spec for cache invalidation commit 97678e1612826af409ca8a04b6c0dc830f7b66c6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:01:03 2018 +0900 Add spec for pipeline commit 96c2a698af049e4026c68e74b1f41a265464b2b2 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:52:21 2018 +0900 Add spec commit 67bcbd25a3c13abb78ea43c0411f5aed417b87d0 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:39:02 2018 +0900 Fix specs commit d7d49def2023f85c07d2718b83f35c8849f65f05 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:11:07 2018 +0900 Support corrupted fixtures commit d58dbbc17a7d954db22082615f5331c148c1061b Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:10:47 2018 +0900 Add cache key to error message commit f6f976216dc36333b5e05e3f0acdfca689350483 Author: Shinya Maeda <shinya@gitlab.com> Date: Thu Aug 2 19:07:46 2018 +0900 bring back debaggable fixtures commit 48a7800e67a718145c0e88c324c0c1f9619e26a4 Merge: 2822b9e8a36 dd627072b3f Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 09:22:22 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit 2822b9e8a369162d098a72a58803c8494b2343cd Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:54:47 2018 +0900 Move cache invalidation policy to outside of reactive cache commit b35efb1764ae61bb31dacbf79dbc022dcee3a203 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:34:10 2018 +0900 ADd reactive cache an ability to invalite cache commit feafee6f8a50f4a32866d8ae768e99766b0b7c73 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:25:22 2018 +0900 Pipeline has test reports if latest builds have any commit f302dbb73abe03c6c431e7d52d526e28a1586fee Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:18:56 2018 +0900 Invalidate test reports cache if it's outdated commit 83adaca01a1ee1cd64cac86b6fa3d10e2e4e2b98 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 18:08:06 2018 +0900 Revert cache invalidation in expire pipeline cache worker commit ec3af5de4ca34e2e92ad6b97f29733d6c65062bc Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 15:13:47 2018 +0900 Fix feature spec commit 0db48805a1ba68763be0504eb57218bde2380e4b Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:46 2018 +0900 Change lifetime of test reports cache to 10 minutes commit 17f7e78bfe2188c349cda1ff90a3ea94d337461e Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:19 2018 +0900 Add changelog commit 89c87585ab7f5333a8139c02b330dd2caf0be31a Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:01:20 2018 +0900 Add feature spec commit 1120cfd7a9ab06105f2e763c375fab00922b7e0c Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 12:55:47 2018 +0900 Invalidate cache when pipeline status transits. Correct test reports from the latest builds
2018-08-07 10:02:57 -04:00
end
Squashed commit of the following: commit 610c02c305d9fb3c7d271883450a5fee8b0cf16f Merge: f2088edb260 84f24dcef0d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 23:01:38 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit f2088edb26008e5791b7be86fc02fc470c881143 Merge: c67e1d32cac 339f47abec1 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:52:10 2018 +0900 Merge branch 'improve-junit-support-be' of gitlab.com:gitlab-org/gitlab-ce into improve-junit-support-be commit c67e1d32cac731b895e2f49a24ce0e1726b8196c Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:51:39 2018 +0900 Remove debuggable fixtures commit 339f47abec1d0ce815e6103a087902d71d8ff5be Merge: 7a33a9be724 96b748fbcc0 Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:10:18 2018 +0100 Merge branch 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce into improve-junit-support-be * 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce: Add spec for latest Add spec for merge request Add spec for cache invalidation Add spec for pipeline Add spec Fix specs Support corrupted fixtures Add cache key to error message commit 7a33a9be724dbde79a24cec77658952ff2d2fa6c Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:09:56 2018 +0100 Show resolved failures commit 96b748fbcc00a98a13aeb78f5d97de9cf25035b6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:50:05 2018 +0900 Add spec for latest commit 0e8b024169b4b0ac272331117ac2fa821c4052f7 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:24:38 2018 +0900 Add spec for merge request commit 8690a699bc98394ad4deebdc91e6690758c5965e Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:18:55 2018 +0900 Add spec for cache invalidation commit 97678e1612826af409ca8a04b6c0dc830f7b66c6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:01:03 2018 +0900 Add spec for pipeline commit 96c2a698af049e4026c68e74b1f41a265464b2b2 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:52:21 2018 +0900 Add spec commit 67bcbd25a3c13abb78ea43c0411f5aed417b87d0 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:39:02 2018 +0900 Fix specs commit d7d49def2023f85c07d2718b83f35c8849f65f05 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:11:07 2018 +0900 Support corrupted fixtures commit d58dbbc17a7d954db22082615f5331c148c1061b Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:10:47 2018 +0900 Add cache key to error message commit f6f976216dc36333b5e05e3f0acdfca689350483 Author: Shinya Maeda <shinya@gitlab.com> Date: Thu Aug 2 19:07:46 2018 +0900 bring back debaggable fixtures commit 48a7800e67a718145c0e88c324c0c1f9619e26a4 Merge: 2822b9e8a36 dd627072b3f Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 09:22:22 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit 2822b9e8a369162d098a72a58803c8494b2343cd Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:54:47 2018 +0900 Move cache invalidation policy to outside of reactive cache commit b35efb1764ae61bb31dacbf79dbc022dcee3a203 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:34:10 2018 +0900 ADd reactive cache an ability to invalite cache commit feafee6f8a50f4a32866d8ae768e99766b0b7c73 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:25:22 2018 +0900 Pipeline has test reports if latest builds have any commit f302dbb73abe03c6c431e7d52d526e28a1586fee Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:18:56 2018 +0900 Invalidate test reports cache if it's outdated commit 83adaca01a1ee1cd64cac86b6fa3d10e2e4e2b98 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 18:08:06 2018 +0900 Revert cache invalidation in expire pipeline cache worker commit ec3af5de4ca34e2e92ad6b97f29733d6c65062bc Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 15:13:47 2018 +0900 Fix feature spec commit 0db48805a1ba68763be0504eb57218bde2380e4b Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:46 2018 +0900 Change lifetime of test reports cache to 10 minutes commit 17f7e78bfe2188c349cda1ff90a3ea94d337461e Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:19 2018 +0900 Add changelog commit 89c87585ab7f5333a8139c02b330dd2caf0be31a Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:01:20 2018 +0900 Add feature spec commit 1120cfd7a9ab06105f2e763c375fab00922b7e0c Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 12:55:47 2018 +0900 Invalidate cache when pipeline status transits. Correct test reports from the latest builds
2018-08-07 10:02:57 -04:00
keep_alive_reactive_cache!(*args)
begin
data = Rails.cache.read(full_reactive_cache_key(*args))
yield data unless data.nil?
Squashed commit of the following: commit 610c02c305d9fb3c7d271883450a5fee8b0cf16f Merge: f2088edb260 84f24dcef0d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 23:01:38 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit f2088edb26008e5791b7be86fc02fc470c881143 Merge: c67e1d32cac 339f47abec1 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:52:10 2018 +0900 Merge branch 'improve-junit-support-be' of gitlab.com:gitlab-org/gitlab-ce into improve-junit-support-be commit c67e1d32cac731b895e2f49a24ce0e1726b8196c Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:51:39 2018 +0900 Remove debuggable fixtures commit 339f47abec1d0ce815e6103a087902d71d8ff5be Merge: 7a33a9be724 96b748fbcc0 Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:10:18 2018 +0100 Merge branch 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce into improve-junit-support-be * 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce: Add spec for latest Add spec for merge request Add spec for cache invalidation Add spec for pipeline Add spec Fix specs Support corrupted fixtures Add cache key to error message commit 7a33a9be724dbde79a24cec77658952ff2d2fa6c Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:09:56 2018 +0100 Show resolved failures commit 96b748fbcc00a98a13aeb78f5d97de9cf25035b6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:50:05 2018 +0900 Add spec for latest commit 0e8b024169b4b0ac272331117ac2fa821c4052f7 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:24:38 2018 +0900 Add spec for merge request commit 8690a699bc98394ad4deebdc91e6690758c5965e Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:18:55 2018 +0900 Add spec for cache invalidation commit 97678e1612826af409ca8a04b6c0dc830f7b66c6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:01:03 2018 +0900 Add spec for pipeline commit 96c2a698af049e4026c68e74b1f41a265464b2b2 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:52:21 2018 +0900 Add spec commit 67bcbd25a3c13abb78ea43c0411f5aed417b87d0 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:39:02 2018 +0900 Fix specs commit d7d49def2023f85c07d2718b83f35c8849f65f05 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:11:07 2018 +0900 Support corrupted fixtures commit d58dbbc17a7d954db22082615f5331c148c1061b Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:10:47 2018 +0900 Add cache key to error message commit f6f976216dc36333b5e05e3f0acdfca689350483 Author: Shinya Maeda <shinya@gitlab.com> Date: Thu Aug 2 19:07:46 2018 +0900 bring back debaggable fixtures commit 48a7800e67a718145c0e88c324c0c1f9619e26a4 Merge: 2822b9e8a36 dd627072b3f Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 09:22:22 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit 2822b9e8a369162d098a72a58803c8494b2343cd Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:54:47 2018 +0900 Move cache invalidation policy to outside of reactive cache commit b35efb1764ae61bb31dacbf79dbc022dcee3a203 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:34:10 2018 +0900 ADd reactive cache an ability to invalite cache commit feafee6f8a50f4a32866d8ae768e99766b0b7c73 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:25:22 2018 +0900 Pipeline has test reports if latest builds have any commit f302dbb73abe03c6c431e7d52d526e28a1586fee Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:18:56 2018 +0900 Invalidate test reports cache if it's outdated commit 83adaca01a1ee1cd64cac86b6fa3d10e2e4e2b98 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 18:08:06 2018 +0900 Revert cache invalidation in expire pipeline cache worker commit ec3af5de4ca34e2e92ad6b97f29733d6c65062bc Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 15:13:47 2018 +0900 Fix feature spec commit 0db48805a1ba68763be0504eb57218bde2380e4b Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:46 2018 +0900 Change lifetime of test reports cache to 10 minutes commit 17f7e78bfe2188c349cda1ff90a3ea94d337461e Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:19 2018 +0900 Add changelog commit 89c87585ab7f5333a8139c02b330dd2caf0be31a Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:01:20 2018 +0900 Add feature spec commit 1120cfd7a9ab06105f2e763c375fab00922b7e0c Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 12:55:47 2018 +0900 Invalidate cache when pipeline status transits. Correct test reports from the latest builds
2018-08-07 10:02:57 -04:00
rescue InvalidateReactiveCache
refresh_reactive_cache!(*args)
nil
end
end
def clear_reactive_cache!(*args)
Rails.cache.delete(full_reactive_cache_key(*args))
Rails.cache.delete(alive_reactive_cache_key(*args))
end
def exclusively_update_reactive_cache!(*args)
locking_reactive_cache(*args) do
if within_reactive_cache_lifetime?(*args)
enqueuing_update(*args) do
2018-07-25 06:03:18 -04:00
key = full_reactive_cache_key(*args)
new_value = calculate_reactive_cache(*args)
old_value = Rails.cache.read(key)
Rails.cache.write(key, new_value)
reactive_cache_updated(*args) if new_value != old_value
end
end
end
end
private
Squashed commit of the following: commit 610c02c305d9fb3c7d271883450a5fee8b0cf16f Merge: f2088edb260 84f24dcef0d Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 23:01:38 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit f2088edb26008e5791b7be86fc02fc470c881143 Merge: c67e1d32cac 339f47abec1 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:52:10 2018 +0900 Merge branch 'improve-junit-support-be' of gitlab.com:gitlab-org/gitlab-ce into improve-junit-support-be commit c67e1d32cac731b895e2f49a24ce0e1726b8196c Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 21:51:39 2018 +0900 Remove debuggable fixtures commit 339f47abec1d0ce815e6103a087902d71d8ff5be Merge: 7a33a9be724 96b748fbcc0 Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:10:18 2018 +0100 Merge branch 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce into improve-junit-support-be * 'improve-junit-support-be' of https://gitlab.com/gitlab-org/gitlab-ce: Add spec for latest Add spec for merge request Add spec for cache invalidation Add spec for pipeline Add spec Fix specs Support corrupted fixtures Add cache key to error message commit 7a33a9be724dbde79a24cec77658952ff2d2fa6c Author: Filipa Lacerda <filipa@gitlab.com> Date: Tue Aug 7 11:09:56 2018 +0100 Show resolved failures commit 96b748fbcc00a98a13aeb78f5d97de9cf25035b6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:50:05 2018 +0900 Add spec for latest commit 0e8b024169b4b0ac272331117ac2fa821c4052f7 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:24:38 2018 +0900 Add spec for merge request commit 8690a699bc98394ad4deebdc91e6690758c5965e Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:18:55 2018 +0900 Add spec for cache invalidation commit 97678e1612826af409ca8a04b6c0dc830f7b66c6 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 18:01:03 2018 +0900 Add spec for pipeline commit 96c2a698af049e4026c68e74b1f41a265464b2b2 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:52:21 2018 +0900 Add spec commit 67bcbd25a3c13abb78ea43c0411f5aed417b87d0 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 17:39:02 2018 +0900 Fix specs commit d7d49def2023f85c07d2718b83f35c8849f65f05 Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:11:07 2018 +0900 Support corrupted fixtures commit d58dbbc17a7d954db22082615f5331c148c1061b Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 13:10:47 2018 +0900 Add cache key to error message commit f6f976216dc36333b5e05e3f0acdfca689350483 Author: Shinya Maeda <shinya@gitlab.com> Date: Thu Aug 2 19:07:46 2018 +0900 bring back debaggable fixtures commit 48a7800e67a718145c0e88c324c0c1f9619e26a4 Merge: 2822b9e8a36 dd627072b3f Author: Shinya Maeda <shinya@gitlab.com> Date: Tue Aug 7 09:22:22 2018 +0900 Merge branch 'master-ce' into improve-junit-support-be commit 2822b9e8a369162d098a72a58803c8494b2343cd Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:54:47 2018 +0900 Move cache invalidation policy to outside of reactive cache commit b35efb1764ae61bb31dacbf79dbc022dcee3a203 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 22:34:10 2018 +0900 ADd reactive cache an ability to invalite cache commit feafee6f8a50f4a32866d8ae768e99766b0b7c73 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:25:22 2018 +0900 Pipeline has test reports if latest builds have any commit f302dbb73abe03c6c431e7d52d526e28a1586fee Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 19:18:56 2018 +0900 Invalidate test reports cache if it's outdated commit 83adaca01a1ee1cd64cac86b6fa3d10e2e4e2b98 Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 18:08:06 2018 +0900 Revert cache invalidation in expire pipeline cache worker commit ec3af5de4ca34e2e92ad6b97f29733d6c65062bc Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 15:13:47 2018 +0900 Fix feature spec commit 0db48805a1ba68763be0504eb57218bde2380e4b Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:46 2018 +0900 Change lifetime of test reports cache to 10 minutes commit 17f7e78bfe2188c349cda1ff90a3ea94d337461e Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:07:19 2018 +0900 Add changelog commit 89c87585ab7f5333a8139c02b330dd2caf0be31a Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 14:01:20 2018 +0900 Add feature spec commit 1120cfd7a9ab06105f2e763c375fab00922b7e0c Author: Shinya Maeda <shinya@gitlab.com> Date: Mon Aug 6 12:55:47 2018 +0900 Invalidate cache when pipeline status transits. Correct test reports from the latest builds
2018-08-07 10:02:57 -04:00
def refresh_reactive_cache!(*args)
clear_reactive_cache!(*args)
keep_alive_reactive_cache!(*args)
ReactiveCachingWorker.perform_async(self.class, id, *args)
end
def keep_alive_reactive_cache!(*args)
Rails.cache.write(alive_reactive_cache_key(*args), true, expires_in: self.class.reactive_cache_lifetime)
end
def full_reactive_cache_key(*qualifiers)
prefix = self.class.reactive_cache_key
prefix = prefix.call(self) if prefix.respond_to?(:call)
([prefix].flatten + qualifiers).join(':')
end
def alive_reactive_cache_key(*qualifiers)
full_reactive_cache_key(*(qualifiers + ['alive']))
end
def locking_reactive_cache(*args)
lease = Gitlab::ExclusiveLease.new(full_reactive_cache_key(*args), timeout: reactive_cache_lease_timeout)
uuid = lease.try_obtain
yield if uuid
ensure
Gitlab::ExclusiveLease.cancel(full_reactive_cache_key(*args), uuid)
end
def within_reactive_cache_lifetime?(*args)
!!Rails.cache.read(alive_reactive_cache_key(*args))
end
def enqueuing_update(*args)
yield
ensure
ReactiveCachingWorker.perform_in(self.class.reactive_cache_refresh_interval, self.class, id, *args)
end
end
end