From 94d9e33586b4d0faf422b5d86c9b8aee79056852 Mon Sep 17 00:00:00 2001
From: Douglas Barbosa Alexandre <dbalexandre@gmail.com>
Date: Fri, 21 Jun 2019 12:42:45 -0300
Subject: [PATCH 1/2] Include the GitLab version in the cache key for
 Gitlab::JsonCache

---
 lib/gitlab/json_cache.rb           |  4 +-
 spec/lib/gitlab/json_cache_spec.rb | 68 +++++++++++++++++++++---------
 2 files changed, 49 insertions(+), 23 deletions(-)

diff --git a/lib/gitlab/json_cache.rb b/lib/gitlab/json_cache.rb
index 9a0b2b351129..d01183d78451 100644
--- a/lib/gitlab/json_cache.rb
+++ b/lib/gitlab/json_cache.rb
@@ -22,10 +22,10 @@ def cache_key(key)
       expanded_cache_key = [namespace, key].compact
 
       if cache_key_with_version
-        expanded_cache_key << Rails.version
+        expanded_cache_key << [Gitlab::VERSION, Rails.version]
       end
 
-      expanded_cache_key.join(':')
+      expanded_cache_key.flatten.join(':').freeze
     end
 
     def expire(key)
diff --git a/spec/lib/gitlab/json_cache_spec.rb b/spec/lib/gitlab/json_cache_spec.rb
index c6a6042c65cf..59160741c45f 100644
--- a/spec/lib/gitlab/json_cache_spec.rb
+++ b/spec/lib/gitlab/json_cache_spec.rb
@@ -6,7 +6,7 @@
   let(:backend) { double('backend').as_null_object }
   let(:namespace) { 'geo' }
   let(:key) { 'foo' }
-  let(:expanded_key) { "#{namespace}:#{key}:#{Rails.version}" }
+  let(:expanded_key) { "#{namespace}:#{key}:#{Gitlab::VERSION}:#{Rails.version}" }
   set(:broadcast_message) { create(:broadcast_message) }
 
   subject(:cache) { described_class.new(namespace: namespace, backend: backend) }
@@ -35,42 +35,68 @@
 
   describe '#cache_key' do
     context 'when namespace is not defined' do
-      it 'expands out the key with Rails version' do
-        cache = described_class.new(cache_key_with_version: true)
+      context 'when cache_key_with_version is true' do
+        it 'expands out the key with GitLab, and Rails versions' do
+          cache = described_class.new(cache_key_with_version: true)
 
-        cache_key = cache.cache_key(key)
+          cache_key = cache.cache_key(key)
 
-        expect(cache_key).to eq("#{key}:#{Rails.version}")
+          expect(cache_key).to eq("#{key}:#{Gitlab::VERSION}:#{Rails.version}")
+        end
       end
-    end
 
-    context 'when cache_key_with_version is true' do
-      it 'expands out the key with namespace and Rails version' do
-        cache = described_class.new(namespace: namespace, cache_key_with_version: true)
+      context 'when cache_key_with_version is false' do
+        it 'returns the key' do
+          cache = described_class.new(namespace: nil, cache_key_with_version: false)
 
-        cache_key = cache.cache_key(key)
+          cache_key = cache.cache_key(key)
 
-        expect(cache_key).to eq("#{namespace}:#{key}:#{Rails.version}")
+          expect(cache_key).to eq(key)
+        end
       end
     end
 
-    context 'when cache_key_with_version is false' do
-      it 'expands out the key with namespace' do
-        cache = described_class.new(namespace: namespace, cache_key_with_version: false)
+    context 'when namespace is nil' do
+      context 'when cache_key_with_version is true' do
+        it 'expands out the key with GitLab, and Rails versions' do
+          cache = described_class.new(cache_key_with_version: true)
 
-        cache_key = cache.cache_key(key)
+          cache_key = cache.cache_key(key)
 
-        expect(cache_key).to eq("#{namespace}:#{key}")
+          expect(cache_key).to eq("#{key}:#{Gitlab::VERSION}:#{Rails.version}")
+        end
+      end
+
+      context 'when cache_key_with_version is false' do
+        it 'returns the key' do
+          cache = described_class.new(namespace: nil, cache_key_with_version: false)
+
+          cache_key = cache.cache_key(key)
+
+          expect(cache_key).to eq(key)
+        end
       end
     end
 
-    context 'when namespace is nil, and cache_key_with_version is false' do
-      it 'returns the key' do
-        cache = described_class.new(namespace: nil, cache_key_with_version: false)
+    context 'when namespace is set' do
+      context 'when cache_key_with_version is true' do
+        it 'expands out the key with namespace and Rails version' do
+          cache = described_class.new(namespace: namespace, cache_key_with_version: true)
+
+          cache_key = cache.cache_key(key)
 
-        cache_key = cache.cache_key(key)
+          expect(cache_key).to eq("#{namespace}:#{key}:#{Gitlab::VERSION}:#{Rails.version}")
+        end
+      end
 
-        expect(cache_key).to eq(key)
+      context 'when cache_key_with_version is false' do
+        it 'expands out the key with namespace' do
+          cache = described_class.new(namespace: namespace, cache_key_with_version: false)
+
+          cache_key = cache.cache_key(key)
+
+          expect(cache_key).to eq("#{namespace}:#{key}")
+        end
       end
     end
   end
-- 
GitLab


From 1b7e7ddea3f5303a9c21654c0ce33ed6b6975995 Mon Sep 17 00:00:00 2001
From: Douglas Barbosa Alexandre <dbalexandre@gmail.com>
Date: Fri, 21 Jun 2019 12:44:57 -0300
Subject: [PATCH 2/2] Add CHANGELOG entry

---
 ...soncache-includes-the-gitlab-version-in-the-cache-key.yml | 5 +++++
 1 file changed, 5 insertions(+)
 create mode 100644 changelogs/unreleased/63513-ensure-gitlab-jsoncache-includes-the-gitlab-version-in-the-cache-key.yml

diff --git a/changelogs/unreleased/63513-ensure-gitlab-jsoncache-includes-the-gitlab-version-in-the-cache-key.yml b/changelogs/unreleased/63513-ensure-gitlab-jsoncache-includes-the-gitlab-version-in-the-cache-key.yml
new file mode 100644
index 000000000000..b5715902630e
--- /dev/null
+++ b/changelogs/unreleased/63513-ensure-gitlab-jsoncache-includes-the-gitlab-version-in-the-cache-key.yml
@@ -0,0 +1,5 @@
+---
+title: Include the GitLab version in the cache key for Gitlab::JsonCache
+merge_request: 29938
+author:
+type: fixed
-- 
GitLab