Merge branch 'gitaly-shell-redis-2' into 'master'
Internal API changes to decouple redis from Shell Closes gitaly#520 See merge request !13971
This commit is contained in:
commit
021fb512e3
|
@ -1 +1 @@
|
|||
5.8.0
|
||||
5.9.0
|
||||
|
|
|
@ -46,6 +46,15 @@ module API
|
|||
::MergeRequests::GetUrlsService.new(project).execute(params[:changes])
|
||||
end
|
||||
|
||||
def redis_ping
|
||||
result = Gitlab::Redis::SharedState.with { |redis| redis.ping }
|
||||
|
||||
result == 'PONG'
|
||||
rescue => e
|
||||
Rails.logger.warn("GitLab: An unexpected error occurred in pinging to Redis: #{e}")
|
||||
false
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_project
|
||||
|
|
|
@ -88,7 +88,8 @@ module API
|
|||
{
|
||||
api_version: API.version,
|
||||
gitlab_version: Gitlab::VERSION,
|
||||
gitlab_rev: Gitlab::REVISION
|
||||
gitlab_rev: Gitlab::REVISION,
|
||||
redis: redis_ping
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -142,6 +143,14 @@ module API
|
|||
{ success: true, recovery_codes: codes }
|
||||
end
|
||||
|
||||
post '/pre_receive' do
|
||||
status 200
|
||||
|
||||
reference_counter_increased = Gitlab::ReferenceCounter.new(params[:gl_repository]).increase
|
||||
|
||||
{ reference_counter_increased: reference_counter_increased }
|
||||
end
|
||||
|
||||
post "/notify_post_receive" do
|
||||
status 200
|
||||
|
||||
|
|
|
@ -5,13 +5,26 @@ describe API::Internal do
|
|||
let(:key) { create(:key, user: user) }
|
||||
let(:project) { create(:project, :repository) }
|
||||
let(:secret_token) { Gitlab::Shell.secret_token }
|
||||
let(:gl_repository) { "project-#{project.id}" }
|
||||
let(:reference_counter) { double('ReferenceCounter') }
|
||||
|
||||
describe "GET /internal/check" do
|
||||
it do
|
||||
expect_any_instance_of(Redis).to receive(:ping).and_return('PONG')
|
||||
|
||||
get api("/internal/check"), secret_token: secret_token
|
||||
|
||||
expect(response).to have_http_status(200)
|
||||
expect(json_response['api_version']).to eq(API::API.version)
|
||||
expect(json_response['redis']).to be(true)
|
||||
end
|
||||
|
||||
it 'returns false for field `redis` when redis is unavailable' do
|
||||
expect_any_instance_of(Redis).to receive(:ping).and_raise(Errno::ENOENT)
|
||||
|
||||
get api("/internal/check"), secret_token: secret_token
|
||||
|
||||
expect(json_response['redis']).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -661,9 +674,7 @@ describe API::Internal do
|
|||
# end
|
||||
|
||||
describe 'POST /internal/post_receive' do
|
||||
let(:gl_repository) { "project-#{project.id}" }
|
||||
let(:identifier) { 'key-123' }
|
||||
let(:reference_counter) { double('ReferenceCounter') }
|
||||
|
||||
let(:valid_params) do
|
||||
{
|
||||
|
@ -749,6 +760,22 @@ describe API::Internal do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'POST /internal/pre_receive' do
|
||||
let(:valid_params) do
|
||||
{ gl_repository: gl_repository, secret_token: secret_token }
|
||||
end
|
||||
|
||||
it 'decreases the reference counter and returns the result' do
|
||||
expect(Gitlab::ReferenceCounter).to receive(:new).with(gl_repository)
|
||||
.and_return(reference_counter)
|
||||
expect(reference_counter).to receive(:increase).and_return(true)
|
||||
|
||||
post api("/internal/pre_receive"), valid_params
|
||||
|
||||
expect(json_response['reference_counter_increased']).to be(true)
|
||||
end
|
||||
end
|
||||
|
||||
def project_with_repo_path(path)
|
||||
double().tap do |fake_project|
|
||||
allow(fake_project).to receive_message_chain('repository.path_to_repo' => path)
|
||||
|
|
Loading…
Reference in New Issue