Commit 9f69b063 authored by Mayra Cabrera's avatar Mayra Cabrera

Merge branch 'osw-move-external-dependent-reactive-caching-work-to-right-queue' into 'master'

Use reactive caching worker for external services

See merge request gitlab-org/gitlab!30212
parents 3f384edf 12683d66
...@@ -11,6 +11,7 @@ module Clusters ...@@ -11,6 +11,7 @@ module Clusters
}.freeze }.freeze
self.reactive_cache_key = ->(finder) { finder.model_name } self.reactive_cache_key = ->(finder) { finder.model_name }
self.reactive_cache_work_type = :external_dependency
self.reactive_cache_worker_finder = ->(_id, *cache_args) { from_cache(*cache_args) } self.reactive_cache_worker_finder = ->(_id, *cache_args) { from_cache(*cache_args) }
attr_reader :cluster, :environment attr_reader :cluster, :environment
......
...@@ -9,6 +9,7 @@ module Projects ...@@ -9,6 +9,7 @@ module Projects
attr_reader :project attr_reader :project
self.reactive_cache_key = ->(finder) { finder.cache_key } self.reactive_cache_key = ->(finder) { finder.cache_key }
self.reactive_cache_work_type = :external_dependency
self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) } self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
MAX_CLUSTERS = 10 MAX_CLUSTERS = 10
......
...@@ -26,6 +26,8 @@ module Clusters ...@@ -26,6 +26,8 @@ module Clusters
KUBE_INGRESS_BASE_DOMAIN = 'KUBE_INGRESS_BASE_DOMAIN' KUBE_INGRESS_BASE_DOMAIN = 'KUBE_INGRESS_BASE_DOMAIN'
APPLICATIONS_ASSOCIATIONS = APPLICATIONS.values.map(&:association_name).freeze APPLICATIONS_ASSOCIATIONS = APPLICATIONS.values.map(&:association_name).freeze
self.reactive_cache_work_type = :external_dependency
belongs_to :user belongs_to :user
belongs_to :management_project, class_name: '::Project', optional: true belongs_to :management_project, class_name: '::Project', optional: true
......
...@@ -9,6 +9,7 @@ module PrometheusAdapter ...@@ -9,6 +9,7 @@ module PrometheusAdapter
self.reactive_cache_lease_timeout = 30.seconds self.reactive_cache_lease_timeout = 30.seconds
self.reactive_cache_refresh_interval = 30.seconds self.reactive_cache_refresh_interval = 30.seconds
self.reactive_cache_lifetime = 1.minute self.reactive_cache_lifetime = 1.minute
self.reactive_cache_work_type = :external_dependency
def prometheus_client def prometheus_client
raise NotImplementedError raise NotImplementedError
......
...@@ -8,6 +8,7 @@ class Environment < ApplicationRecord ...@@ -8,6 +8,7 @@ class Environment < ApplicationRecord
self.reactive_cache_refresh_interval = 1.minute self.reactive_cache_refresh_interval = 1.minute
self.reactive_cache_lifetime = 55.seconds self.reactive_cache_lifetime = 55.seconds
self.reactive_cache_hard_limit = 10.megabytes self.reactive_cache_hard_limit = 10.megabytes
self.reactive_cache_work_type = :external_dependency
belongs_to :project, required: true belongs_to :project, required: true
......
...@@ -22,6 +22,7 @@ module ErrorTracking ...@@ -22,6 +22,7 @@ module ErrorTracking
}x.freeze }x.freeze
self.reactive_cache_key = ->(setting) { [setting.class.model_name.singular, setting.project_id] } self.reactive_cache_key = ->(setting) { [setting.class.model_name.singular, setting.project_id] }
self.reactive_cache_work_type = :external_dependency
belongs_to :project belongs_to :project
......
...@@ -24,6 +24,7 @@ class SshHostKey ...@@ -24,6 +24,7 @@ class SshHostKey
# This is achieved by making the lifetime shorter than the refresh interval. # This is achieved by making the lifetime shorter than the refresh interval.
self.reactive_cache_refresh_interval = 15.minutes self.reactive_cache_refresh_interval = 15.minutes
self.reactive_cache_lifetime = 10.minutes self.reactive_cache_lifetime = 10.minutes
self.reactive_cache_work_type = :external_dependency
def self.find_by(opts = {}) def self.find_by(opts = {})
opts = HashWithIndifferentAccess.new(opts) opts = HashWithIndifferentAccess.new(opts)
......
...@@ -12,6 +12,7 @@ module Grafana ...@@ -12,6 +12,7 @@ module Grafana
self.reactive_cache_key = ->(service) { service.cache_key } self.reactive_cache_key = ->(service) { service.cache_key }
self.reactive_cache_lease_timeout = 30.seconds self.reactive_cache_lease_timeout = 30.seconds
self.reactive_cache_refresh_interval = 30.seconds self.reactive_cache_refresh_interval = 30.seconds
self.reactive_cache_work_type = :external_dependency
self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) } self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
attr_accessor :project, :datasource_id, :proxy_path, :query_params attr_accessor :project, :datasource_id, :proxy_path, :query_params
......
...@@ -18,6 +18,7 @@ module Metrics ...@@ -18,6 +18,7 @@ module Metrics
self.reactive_cache_lease_timeout = 30.seconds self.reactive_cache_lease_timeout = 30.seconds
self.reactive_cache_refresh_interval = 30.minutes self.reactive_cache_refresh_interval = 30.minutes
self.reactive_cache_lifetime = 30.minutes self.reactive_cache_lifetime = 30.minutes
self.reactive_cache_work_type = :external_dependency
self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) } self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
class << self class << self
......
...@@ -11,6 +11,7 @@ module PodLogs ...@@ -11,6 +11,7 @@ module PodLogs
:pod_logs, :pod_logs,
:filter_return_keys :filter_return_keys
self.reactive_cache_work_type = :external_dependency
self.reactive_cache_worker_finder = ->(id, _cache_key, namespace, params) { new(::Clusters::Cluster.find(id), namespace, params: params) } self.reactive_cache_worker_finder = ->(id, _cache_key, namespace, params) { new(::Clusters::Cluster.find(id), namespace, params: params) }
private private
......
...@@ -17,6 +17,7 @@ module PodLogs ...@@ -17,6 +17,7 @@ module PodLogs
:split_logs, :split_logs,
:filter_return_keys :filter_return_keys
self.reactive_cache_work_type = :external_dependency
self.reactive_cache_worker_finder = ->(id, _cache_key, namespace, params) { new(::Clusters::Cluster.find(id), namespace, params: params) } self.reactive_cache_worker_finder = ->(id, _cache_key, namespace, params) { new(::Clusters::Cluster.find(id), namespace, params: params) }
private private
......
...@@ -17,6 +17,7 @@ module Prometheus ...@@ -17,6 +17,7 @@ module Prometheus
# is expected to change *and* be fetched again by the frontend # is expected to change *and* be fetched again by the frontend
self.reactive_cache_refresh_interval = 90.seconds self.reactive_cache_refresh_interval = 90.seconds
self.reactive_cache_lifetime = 1.minute self.reactive_cache_lifetime = 1.minute
self.reactive_cache_work_type = :external_dependency
self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) } self.reactive_cache_worker_finder = ->(_id, *args) { from_cache(*args) }
attr_accessor :proxyable, :method, :path, :params attr_accessor :proxyable, :method, :path, :params
......
...@@ -189,7 +189,7 @@ describe Projects::MirrorsController do ...@@ -189,7 +189,7 @@ describe Projects::MirrorsController do
context 'no data in cache' do context 'no data in cache' do
it 'requests the cache to be filled and returns a 204 response' do it 'requests the cache to be filled and returns a 204 response' do
expect(ReactiveCachingWorker).to receive(:perform_async).with(cache.class, cache.id).at_least(:once) expect(ExternalServiceReactiveCachingWorker).to receive(:perform_async).with(cache.class, cache.id).at_least(:once)
do_get(project) do_get(project)
......
...@@ -66,7 +66,7 @@ describe Grafana::ProxyService do ...@@ -66,7 +66,7 @@ describe Grafana::ProxyService do
context 'with caching', :use_clean_rails_memory_store_caching do context 'with caching', :use_clean_rails_memory_store_caching do
context 'when value not present in cache' do context 'when value not present in cache' do
it 'returns nil' do it 'returns nil' do
expect(ReactiveCachingWorker) expect(ExternalServiceReactiveCachingWorker)
.to receive(:perform_async) .to receive(:perform_async)
.with(service.class, service.id, *cache_params) .with(service.class, service.id, *cache_params)
......
...@@ -154,7 +154,7 @@ describe Metrics::Dashboard::GrafanaMetricEmbedService do ...@@ -154,7 +154,7 @@ describe Metrics::Dashboard::GrafanaMetricEmbedService do
context 'when value not present in cache' do context 'when value not present in cache' do
it 'returns nil' do it 'returns nil' do
expect(ReactiveCachingWorker) expect(ExternalServiceReactiveCachingWorker)
.to receive(:perform_async) .to receive(:perform_async)
.with(service.class, service.id, *cache_params) .with(service.class, service.id, *cache_params)
......
...@@ -117,7 +117,7 @@ describe Prometheus::ProxyService do ...@@ -117,7 +117,7 @@ describe Prometheus::ProxyService do
context 'when value not present in cache' do context 'when value not present in cache' do
it 'returns nil' do it 'returns nil' do
expect(ReactiveCachingWorker) expect(ExternalServiceReactiveCachingWorker)
.to receive(:perform_async) .to receive(:perform_async)
.with(subject.class, subject.id, *opts) .with(subject.class, subject.id, *opts)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment