summaryrefslogtreecommitdiff
path: root/spec/models/active_session_spec.rb
diff options
context:
space:
mode:
authorImre Farkas <ifarkas@gitlab.com>2019-07-17 11:07:26 +0000
committerThong Kuah <tkuah@gitlab.com>2019-07-17 11:07:26 +0000
commitf463a2d95b657cf9470053eeb3d12d236e3febb4 (patch)
tree08a1a03b62ec7bdf959c946815bb4c63023c63fe /spec/models/active_session_spec.rb
parent4f95a8d7f6612e8df138bd831db7f689a01ef9ca (diff)
downloadgitlab-ce-f463a2d95b657cf9470053eeb3d12d236e3febb4.tar.gz
Do Redis lookup in batches in ActiveSession.sessions_from_ids
By doing smaller mget calls to Redis, it can better schedule the workload. Currently a single mget with a lot of keys can keep Redis busy for long, while nothing in its queue gets processed.
Diffstat (limited to 'spec/models/active_session_spec.rb')
-rw-r--r--spec/models/active_session_spec.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/spec/models/active_session_spec.rb b/spec/models/active_session_spec.rb
index 2762eaeccd3..09c2878663a 100644
--- a/spec/models/active_session_spec.rb
+++ b/spec/models/active_session_spec.rb
@@ -132,6 +132,19 @@ RSpec.describe ActiveSession, :clean_gitlab_redis_shared_state do
expect(ActiveSession.sessions_from_ids([])).to eq([])
end
+
+ it 'uses redis lookup in batches' do
+ stub_const('ActiveSession::SESSION_BATCH_SIZE', 1)
+
+ redis = double(:redis)
+ expect(Gitlab::Redis::SharedState).to receive(:with).and_yield(redis)
+
+ sessions = ['session-a', 'session-b']
+ mget_responses = sessions.map { |session| [Marshal.dump(session)]}
+ expect(redis).to receive(:mget).twice.and_return(*mget_responses)
+
+ expect(ActiveSession.sessions_from_ids([1, 2])).to eql(sessions)
+ end
end
describe '.set' do