Commit 8e88429c authored by Kerri Miller's avatar Kerri Miller

Begin observing size of cached highlighted diffs

parent 93f07c47
...@@ -101,6 +101,8 @@ module Gitlab ...@@ -101,6 +101,8 @@ module Gitlab
# #
redis.expire(key, EXPIRATION) redis.expire(key, EXPIRATION)
end end
record_memory_usage(fetch_memory_usage(redis, key))
end end
# Subsequent read_file calls would need the latest cache. # Subsequent read_file calls would need the latest cache.
...@@ -109,6 +111,23 @@ module Gitlab ...@@ -109,6 +111,23 @@ module Gitlab
clear_memoization(:cacheable_files) clear_memoization(:cacheable_files)
end end
def record_memory_usage(memory_usage)
if memory_usage
self.class.gitlab_redis_diff_caching_memory_usage_bytes.observe({}, memory_usage)
end
end
def fetch_memory_usage(redis, key)
# Redis versions prior to 4.0.0 do not support memory usage reporting
# for a specific key. As of 11-March-2020 we support Redis 3.x, so
# need to account for this. We can remove this check once we
# officially cease supporting versions <4.0.0.
#
return if Gem::Version.new(redis.info["redis_version"]) < Gem::Version.new("4")
redis.memory("USAGE", key)
end
def file_paths def file_paths
strong_memoize(:file_paths) do strong_memoize(:file_paths) do
diff_files.collect(&:file_path) diff_files.collect(&:file_path)
......
...@@ -97,6 +97,28 @@ describe Gitlab::Diff::HighlightCache, :clean_gitlab_redis_cache do ...@@ -97,6 +97,28 @@ describe Gitlab::Diff::HighlightCache, :clean_gitlab_redis_cache do
let(:paths) { merge_request.diffs.raw_diff_files.select(&:text?).map(&:file_path) } let(:paths) { merge_request.diffs.raw_diff_files.select(&:text?).map(&:file_path) }
end end
it 'updates memory usage metrics if Redis version >= 4' do
allow_next_instance_of(Redis) do |redis|
allow(redis).to receive(:info).and_return({ "redis_version" => "4.0.0" })
expect(described_class.gitlab_redis_diff_caching_memory_usage_bytes)
.to receive(:observe).and_call_original
cache.send(:write_to_redis_hash, diff_hash)
end
end
it 'does not update memory usage metrics if Redis version < 4' do
allow_next_instance_of(Redis) do |redis|
allow(redis).to receive(:info).and_return({ "redis_version" => "3.0.0" })
expect(described_class.gitlab_redis_diff_caching_memory_usage_bytes)
.not_to receive(:observe).and_call_original
cache.send(:write_to_redis_hash, diff_hash)
end
end
context 'different diff_collections for the same diffable' do context 'different diff_collections for the same diffable' do
before do before do
cache.write_if_empty cache.write_if_empty
......
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