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
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-03-01 06:12:27 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-03-01 06:12:27 +0300
commitb0ad241fbbdf6a9d4ccb6f44f2c233d542b3b08d (patch)
tree05d1c9682c9dfdbe2ecd480e441c192dc07e50f1 /lib/gitlab/cache
parentd40f85a4030015db726d2e1bea1f2ab1e16d1eb1 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/cache')
-rw-r--r--lib/gitlab/cache/client.rb68
-rw-r--r--lib/gitlab/cache/metadata.rb11
2 files changed, 76 insertions, 3 deletions
diff --git a/lib/gitlab/cache/client.rb b/lib/gitlab/cache/client.rb
new file mode 100644
index 00000000000..ac710ee0adf
--- /dev/null
+++ b/lib/gitlab/cache/client.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Cache
+ # It replaces Rails.cache with metrics support
+ class Client
+ DEFAULT_BACKING_RESOURCE = :unknown
+
+ # Build Cache client with the metadata support
+ #
+ # @param cache_identifier [String] defines the location of the cache definition
+ # Example: "ProtectedBranches::CacheService#fetch"
+ # @param feature_category [Symbol] name of the feature category (from config/feature_categories.yml)
+ # @param caller_id [String] caller id from labkit context
+ # @param backing_resource [Symbol] most affected resource by cache generation (full list: VALID_BACKING_RESOURCES)
+ # @return [Gitlab::Cache::Client]
+ def self.build_with_metadata(
+ cache_identifier:,
+ feature_category:,
+ caller_id: Gitlab::ApplicationContext.current_context_attribute(:caller_id),
+ backing_resource: DEFAULT_BACKING_RESOURCE
+ )
+ new(Metadata.new(
+ caller_id: caller_id,
+ cache_identifier: cache_identifier,
+ feature_category: feature_category,
+ backing_resource: backing_resource
+ ))
+ end
+
+ def initialize(metadata, backend: Rails.cache)
+ @metadata = metadata
+ @metrics = Metrics.new(metadata)
+ @backend = backend
+ end
+
+ def read(name)
+ read_result = backend.read(name)
+
+ if read_result.nil?
+ metrics.increment_cache_miss
+ else
+ metrics.increment_cache_hit
+ end
+
+ read_result
+ end
+
+ def fetch(name, options = nil, &block)
+ read_result = read(name)
+
+ return read_result unless block || read_result
+
+ backend.fetch(name, options) do
+ metrics.observe_cache_generation(&block)
+ end
+ end
+
+ delegate :write, :exist?, :delete, to: :backend
+
+ attr_reader :metadata, :metrics
+
+ private
+
+ attr_reader :backend
+ end
+ end
+end
diff --git a/lib/gitlab/cache/metadata.rb b/lib/gitlab/cache/metadata.rb
index d6c89b5b2c3..224f215ef82 100644
--- a/lib/gitlab/cache/metadata.rb
+++ b/lib/gitlab/cache/metadata.rb
@@ -5,13 +5,18 @@ module Gitlab
# Value object for cache metadata
class Metadata
VALID_BACKING_RESOURCES = [:cpu, :database, :gitaly, :memory, :unknown].freeze
- DEFAULT_BACKING_RESOURCE = :unknown
+ # @param cache_identifier [String] defines the location of the cache definition
+ # Example: "ProtectedBranches::CacheService#fetch"
+ # @param feature_category [Symbol] name of the feature category (from config/feature_categories.yml)
+ # @param caller_id [String] caller id from labkit context
+ # @param backing_resource [Symbol] most affected resource by cache generation (full list: VALID_BACKING_RESOURCES)
+ # @return [Gitlab::Cache::Metadata]
def initialize(
cache_identifier:,
feature_category:,
caller_id: Gitlab::ApplicationContext.current_context_attribute(:caller_id),
- backing_resource: DEFAULT_BACKING_RESOURCE
+ backing_resource: Client::DEFAULT_BACKING_RESOURCE
)
@cache_identifier = cache_identifier
@feature_category = Gitlab::FeatureCategories.default.get!(feature_category)
@@ -28,7 +33,7 @@ module Gitlab
raise "Unknown backing resource: #{resource}" if Gitlab.dev_or_test_env?
- DEFAULT_BACKING_RESOURCE
+ Client::DEFAULT_BACKING_RESOURCE
end
end
end