Reset connection pool and Rails.cache on reload
What does this MR do and why?
This MR updates the initializer to reset Redis connection pools and Rails.cache on reload!. This change affects local development only since we do not reload in prod.
The current reload! fails as the Gitlab::Redis::Cache is not reloaded (object_id remains the same), hence @pool in wrapper.rb. However, Gitlab::Redis::MultiStore is reloaded and leads to issues in ClusterUtil when doing an is_a?(MultiStore) check as there are stale references to classes in the Gitlab::Redis namespace.
Screenshots or screen recordings
From the screen-shot, we see that ._client is being called on MultiStore even though it should not happen since that would have triggered the if path.
| Before | After |
|---|---|
How to set up and validate locally
On master
- Browse GitLab-locally
- Adjust the application controller to add a
puts 'something'in an action and save - Click a link in GitLab locally. Notice the slow request because of code reloading
💥
Alternatively via console
Rails.cache.redis.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> true
Gitlab::Redis::Cache.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> true
reload!
...
Rails.cache.redis.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> false
Gitlab::Redis::Cache.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> false
On this MR
- Browse GitLab-locally
- Adjust the application controller to add a
puts 'something'in an action and save - Click a link in GitLab locally. Notice the slow request because of code reloading
✅
alternatively via console,
Rails.cache.redis.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> true
Gitlab::Redis::Cache.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> true
reload!
...
Rails.cache.redis.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> true
Gitlab::Redis::Cache.with {|c| c.is_a?(Gitlab::Redis::MultiStore)}
=> true
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
