Commit 705c15d7 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Allow enabling the circuitbreaker using an env variable

That way we can enable the circuitbreaker for just one host at a time.
parent 591ee4e3
...@@ -131,6 +131,15 @@ mount is reset. ...@@ -131,6 +131,15 @@ mount is reset.
**Seconds to wait for a storage access attempt:** The time in seconds GitLab will **Seconds to wait for a storage access attempt:** The time in seconds GitLab will
try to access storage. After this time a timeout error will be raised. try to access storage. After this time a timeout error will be raised.
To enable the circuitbreaker for repository storage you can flip the feature flag from a rails console:
```
Feature.enable('git_storage_circuit_breaker')
```
Alternatively it can be enabled by setting `true` in the `GIT_STORAGE_CIRCUIT_BREAKER` environment variable.
This approach would be used when enabling the circuit breaker on a single host.
When storage failures occur, this will be visible in the admin interface like this: When storage failures occur, this will be visible in the admin interface like this:
![failing storage](img/failing_storage.png) ![failing storage](img/failing_storage.png)
......
...@@ -54,7 +54,7 @@ module Gitlab ...@@ -54,7 +54,7 @@ module Gitlab
end end
def perform def perform
return yield unless Feature.enabled?('git_storage_circuit_breaker') return yield unless enabled?
check_storage_accessible! check_storage_accessible!
...@@ -78,6 +78,15 @@ module Gitlab ...@@ -78,6 +78,15 @@ module Gitlab
private private
# The circuitbreaker can be enabled for the entire fleet using a Feature
# flag.
#
# Enabling it for a single host can be done setting the
# `GIT_STORAGE_CIRCUIT_BREAKER` environment variable.
def enabled?
ENV['GIT_STORAGE_CIRCUIT_BREAKER'].present? || Feature.enabled?('git_storage_circuit_breaker')
end
def failure_info def failure_info
@failure_info ||= get_failure_info @failure_info ||= get_failure_info
end end
......
...@@ -200,10 +200,21 @@ describe Gitlab::Git::Storage::CircuitBreaker, clean_gitlab_redis_shared_state: ...@@ -200,10 +200,21 @@ describe Gitlab::Git::Storage::CircuitBreaker, clean_gitlab_redis_shared_state:
end end
context 'with the feature disabled' do context 'with the feature disabled' do
it 'returns the block without checking accessibility' do before do
stub_feature_flags(git_storage_circuit_breaker: false) stub_feature_flags(git_storage_circuit_breaker: false)
end
expect(circuit_breaker).not_to receive(:circuit_broken?) it 'returns the block without checking accessibility' do
expect(circuit_breaker).not_to receive(:check_storage_accessible!)
result = circuit_breaker.perform { 'hello' }
expect(result).to eq('hello')
end
it 'allows enabling the feature using an ENV var' do
stub_env('GIT_STORAGE_CIRCUIT_BREAKER', 'true')
expect(circuit_breaker).to receive(:check_storage_accessible!)
result = circuit_breaker.perform { 'hello' } result = circuit_breaker.perform { 'hello' }
......
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