Commit e722b107 authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch '300910-drop-puma-clustered-validation' into 'master'

Allow running Puma Single mode on non-.com envs

See merge request gitlab-org/gitlab!53830
parents 87435a20 33990d28
---
title: Allow running Puma in Single mode
merge_request: 53830
author:
type: other
# frozen_string_literal: true # frozen_string_literal: true
def allow_single_mode? def max_puma_workers
return false if Gitlab.com? Puma.cli_config.options[:workers].to_i
Gitlab::Utils.to_boolean(ENV['PUMA_SKIP_CLUSTER_VALIDATION'])
end end
if Gitlab::Runtime.puma? && ::Puma.cli_config.options[:workers].to_i == 0 if Gitlab::Runtime.puma? && max_puma_workers == 0
return if allow_single_mode? raise 'Puma is only supported in Clustered mode (workers > 0)' if Gitlab.com?
raise 'Puma is only supported in Cluster-mode: workers > 0' warn 'WARNING: Puma is running in Single mode (workers = 0). Some features may not work. Please refer to https://gitlab.com/groups/gitlab-org/-/epics/5303 for info.'
end end
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe 'validate puma' do RSpec.describe 'validate puma' do
include RakeHelpers
subject do subject do
load Rails.root.join('config/initializers/validate_puma.rb') load Rails.root.join('config/initializers/validate_puma.rb')
end end
before do before do
stub_env('PUMA_SKIP_CLUSTER_VALIDATION', skip_validation)
stub_const('Puma', double) stub_const('Puma', double)
allow(Gitlab::Runtime).to receive(:puma?).and_return(true) allow(Gitlab::Runtime).to receive(:puma?).and_return(true)
allow(Puma).to receive_message_chain(:cli_config, :options).and_return(workers: workers) allow(Puma).to receive_message_chain(:cli_config, :options).and_return(workers: workers)
...@@ -22,70 +23,44 @@ RSpec.describe 'validate puma' do ...@@ -22,70 +23,44 @@ RSpec.describe 'validate puma' do
context 'when worker count is 0' do context 'when worker count is 0' do
let(:workers) { 0 } let(:workers) { 0 }
context 'and PUMA_SKIP_CLUSTER_VALIDATION is true' do
let(:skip_validation) { true }
specify { expect { subject }.to raise_error(String) } specify { expect { subject }.to raise_error(String) }
end end
context 'and PUMA_SKIP_CLUSTER_VALIDATION is false' do
let(:skip_validation) { false }
specify { expect { subject }.to raise_error(String) }
end
end
context 'when worker count is > 0' do context 'when worker count is > 0' do
let(:workers) { 2 } let(:workers) { 2 }
context 'and PUMA_SKIP_CLUSTER_VALIDATION is true' do
let(:skip_validation) { true }
specify { expect { subject }.not_to raise_error }
end
context 'and PUMA_SKIP_CLUSTER_VALIDATION is false' do
let(:skip_validation) { false }
specify { expect { subject }.not_to raise_error } specify { expect { subject }.not_to raise_error }
end end
end end
end
context 'for other environments' do context 'for other environments' do
before do before do
allow(Gitlab).to receive(:com?).and_return(false) allow(Gitlab).to receive(:com?).and_return(false)
allow(main_object).to receive(:warn)
end end
context 'when worker count is 0' do context 'when worker count is 0' do
let(:workers) { 0 } let(:workers) { 0 }
context 'and PUMA_SKIP_CLUSTER_VALIDATION is true' do
let(:skip_validation) { true }
specify { expect { subject }.not_to raise_error } specify { expect { subject }.not_to raise_error }
end
context 'and PUMA_SKIP_CLUSTER_VALIDATION is false' do it 'warns about running Puma in a Single mode' do
let(:skip_validation) { false } expect(main_object).to receive(:warn) do |warning|
expect(warning).to include('https://gitlab.com/groups/gitlab-org/-/epics/5303')
end
specify { expect { subject }.to raise_error(String) } subject
end end
end end
context 'when worker count is > 0' do context 'when worker count is > 0' do
let(:workers) { 2 } let(:workers) { 2 }
context 'and PUMA_SKIP_CLUSTER_VALIDATION is true' do
let(:skip_validation) { true }
specify { expect { subject }.not_to raise_error } specify { expect { subject }.not_to raise_error }
end
context 'and PUMA_SKIP_CLUSTER_VALIDATION is false' do it 'does not issue a warning' do
let(:skip_validation) { false } expect(main_object).not_to receive(:warn)
specify { expect { subject }.not_to raise_error }
end end
end end
end end
......
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