diff options
author | Imre Farkas <ifarkas@gitlab.com> | 2019-07-17 11:07:26 +0000 |
---|---|---|
committer | Thong Kuah <tkuah@gitlab.com> | 2019-07-17 11:07:26 +0000 |
commit | f463a2d95b657cf9470053eeb3d12d236e3febb4 (patch) | |
tree | 08a1a03b62ec7bdf959c946815bb4c63023c63fe /spec | |
parent | 4f95a8d7f6612e8df138bd831db7f689a01ef9ca (diff) | |
download | gitlab-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')
-rw-r--r-- | spec/models/active_session_spec.rb | 13 |
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 |