Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
7480d774df
commit
9763c08170
48 changed files with 188 additions and 259 deletions
|
@ -46,6 +46,7 @@ rules:
|
|||
vue/no-v-html: off
|
||||
vue/use-v-on-exact: off
|
||||
no-jquery/no-animate: off
|
||||
# all offenses of no-jquery/no-animate-toggle are false positives ( $toast.show() )
|
||||
no-jquery/no-animate-toggle: off
|
||||
no-jquery/no-fade: off
|
||||
no-jquery/no-serialize: error
|
||||
|
|
|
@ -930,7 +930,7 @@ GEM
|
|||
rubyntlm (0.6.2)
|
||||
rubypants (0.2.0)
|
||||
rubyzip (1.3.0)
|
||||
rugged (0.28.3.1)
|
||||
rugged (0.28.4.1)
|
||||
safe_yaml (1.0.4)
|
||||
sanitize (4.6.6)
|
||||
crass (~> 1.0.2)
|
||||
|
|
|
@ -163,7 +163,7 @@ module Git
|
|||
end
|
||||
|
||||
def logger
|
||||
if Gitlab::Runtime.sidekiq?
|
||||
if Sidekiq.server?
|
||||
Sidekiq.logger
|
||||
else
|
||||
# This service runs in Sidekiq, so this shouldn't ever be
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Authenticate requests with job token as basic auth header for request limiting
|
||||
merge_request: 21562
|
||||
author:
|
||||
type: fixed
|
5
changelogs/unreleased/ak-logs-timestamp.yml
Normal file
5
changelogs/unreleased/ak-logs-timestamp.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add timestamps to pod logs
|
||||
merge_request: 21663
|
||||
author:
|
||||
type: added
|
5
changelogs/unreleased/sh-upgrade-rugged.yml
Normal file
5
changelogs/unreleased/sh-upgrade-rugged.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Update Rugged to v0.28.4.1
|
||||
merge_request: 21869
|
||||
author:
|
||||
type: security
|
|
@ -22,7 +22,6 @@ module Gitlab
|
|||
require_dependency Rails.root.join('lib/gitlab/current_settings')
|
||||
require_dependency Rails.root.join('lib/gitlab/middleware/read_only')
|
||||
require_dependency Rails.root.join('lib/gitlab/middleware/basic_health_check')
|
||||
require_dependency Rails.root.join('lib/gitlab/runtime')
|
||||
|
||||
# Settings in config/environments/* take precedence over those specified here.
|
||||
# Application configuration should go into files in config/initializers
|
||||
|
@ -256,7 +255,7 @@ module Gitlab
|
|||
caching_config_hash[:compress] = false
|
||||
caching_config_hash[:namespace] = Gitlab::Redis::Cache::CACHE_NAMESPACE
|
||||
caching_config_hash[:expires_in] = 2.weeks # Cache should not grow forever
|
||||
if Gitlab::Runtime.multi_threaded?
|
||||
if Sidekiq.server? || defined?(::Puma) # threaded context
|
||||
caching_config_hash[:pool_size] = Gitlab::Redis::Cache.pool_size
|
||||
caching_config_hash[:pool_timeout] = 1
|
||||
end
|
||||
|
|
|
@ -46,7 +46,7 @@ Rails.application.configure do
|
|||
# Do not log asset requests
|
||||
config.assets.quiet = true
|
||||
|
||||
config.allow_concurrency = Gitlab::Runtime.multi_threaded?
|
||||
config.allow_concurrency = defined?(::Puma)
|
||||
|
||||
# BetterErrors live shell (REPL) on every stack frame
|
||||
BetterErrors::Middleware.allow_ip!("127.0.0.1/0")
|
||||
|
|
|
@ -75,5 +75,5 @@ Rails.application.configure do
|
|||
|
||||
config.eager_load = true
|
||||
|
||||
config.allow_concurrency = Gitlab::Runtime.multi_threaded?
|
||||
config.allow_concurrency = defined?(::Puma)
|
||||
end
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
begin
|
||||
Gitlab::AppLogger.info("Runtime: #{Gitlab::Runtime.name}")
|
||||
rescue => e
|
||||
message = <<-NOTICE
|
||||
\n!! RUNTIME IDENTIFICATION FAILED: #{e}
|
||||
Runtime based configuration settings may not work properly.
|
||||
If you continue to see this error, please file an issue via
|
||||
https://gitlab.com/gitlab-org/gitlab/issues/new
|
||||
NOTICE
|
||||
Gitlab::AppLogger.error(message)
|
||||
end
|
|
@ -364,7 +364,7 @@ Gitlab.ee do
|
|||
# To ensure acceptable performance we only allow feature to be used with
|
||||
# multithreaded web-server Puma. This will be removed once download logic is moved
|
||||
# to GitLab workhorse
|
||||
Settings.dependency_proxy['enabled'] = false unless Gitlab::Runtime.puma?
|
||||
Settings.dependency_proxy['enabled'] = false unless defined?(::Puma)
|
||||
end
|
||||
|
||||
#
|
||||
|
|
|
@ -4,11 +4,11 @@ require 'prometheus/client'
|
|||
def prometheus_default_multiproc_dir
|
||||
return unless Rails.env.development? || Rails.env.test?
|
||||
|
||||
if Gitlab::Runtime.sidekiq?
|
||||
if Sidekiq.server?
|
||||
Rails.root.join('tmp/prometheus_multiproc_dir/sidekiq')
|
||||
elsif Gitlab::Runtime.unicorn?
|
||||
elsif defined?(Unicorn::Worker)
|
||||
Rails.root.join('tmp/prometheus_multiproc_dir/unicorn')
|
||||
elsif Gitlab::Runtime.puma?
|
||||
elsif defined?(::Puma)
|
||||
Rails.root.join('tmp/prometheus_multiproc_dir/puma')
|
||||
else
|
||||
Rails.root.join('tmp/prometheus_multiproc_dir')
|
||||
|
@ -48,9 +48,9 @@ if !Rails.env.test? && Gitlab::Metrics.prometheus_metrics_enabled?
|
|||
Gitlab::Cluster::LifecycleEvents.on_master_start do
|
||||
::Prometheus::Client.reinitialize_on_pid_change(force: true)
|
||||
|
||||
if Gitlab::Runtime.unicorn?
|
||||
if defined?(::Unicorn)
|
||||
Gitlab::Metrics::Samplers::UnicornSampler.instance(Settings.monitoring.unicorn_sampler_interval).start
|
||||
elsif Gitlab::Runtime.puma?
|
||||
elsif defined?(::Puma)
|
||||
Gitlab::Metrics::Samplers::PumaSampler.instance(Settings.monitoring.puma_sampler_interval).start
|
||||
end
|
||||
|
||||
|
@ -58,7 +58,7 @@ if !Rails.env.test? && Gitlab::Metrics.prometheus_metrics_enabled?
|
|||
end
|
||||
end
|
||||
|
||||
if Gitlab::Runtime.app_server?
|
||||
if defined?(::Unicorn) || defined?(::Puma)
|
||||
Gitlab::Cluster::LifecycleEvents.on_master_start do
|
||||
Gitlab::Metrics::Exporter::WebExporter.instance.start
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Don't handle sidekiq configuration as it
|
||||
# has its own special active record configuration here
|
||||
if defined?(ActiveRecord::Base) && !Gitlab::Runtime.sidekiq?
|
||||
if defined?(ActiveRecord::Base) && !Sidekiq.server?
|
||||
Gitlab::Cluster::LifecycleEvents.on_worker_start do
|
||||
ActiveSupport.on_load(:active_record) do
|
||||
ActiveRecord::Base.establish_connection
|
||||
|
|
|
@ -5,8 +5,10 @@
|
|||
#
|
||||
# Follow-up the issue: https://gitlab.com/gitlab-org/gitlab/issues/34107
|
||||
|
||||
if Gitlab::Runtime.puma?
|
||||
if defined?(::Puma)
|
||||
Puma::Cluster.prepend(::Gitlab::Cluster::Mixins::PumaCluster)
|
||||
elsif Gitlab::Runtime.unicorn?
|
||||
end
|
||||
|
||||
if defined?(::Unicorn::HttpServer)
|
||||
Unicorn::HttpServer.prepend(::Gitlab::Cluster::Mixins::UnicornHttpServer)
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# when running on puma, scale connection pool size with the number
|
||||
# of threads per worker process
|
||||
if Gitlab::Runtime.puma?
|
||||
if defined?(::Puma)
|
||||
db_config = Gitlab::Database.config ||
|
||||
Rails.application.config.database_configuration[Rails.env]
|
||||
puma_options = Puma.cli_config.options
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Only use Lograge for Rails
|
||||
unless Gitlab::Runtime.sidekiq?
|
||||
unless Sidekiq.server?
|
||||
filename = File.join(Rails.root, 'log', "#{Rails.env}_json.log")
|
||||
|
||||
Rails.application.configure do
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
# and it's used only as the last resort. In such case this termination is
|
||||
# logged and we should fix the potential timeout issue in the code itself.
|
||||
|
||||
if Gitlab::Runtime.puma? && !Rails.env.test?
|
||||
if defined?(::Puma) && !Rails.env.test?
|
||||
require 'rack/timeout/base'
|
||||
|
||||
Gitlab::Application.configure do |config|
|
||||
|
|
|
@ -13,7 +13,7 @@ if Labkit::Tracing.enabled?
|
|||
end
|
||||
|
||||
# Instrument Sidekiq server calls when running Sidekiq server
|
||||
if Gitlab::Runtime.sidekiq?
|
||||
if Sidekiq.server?
|
||||
Sidekiq.configure_server do |config|
|
||||
config.server_middleware do |chain|
|
||||
chain.add Labkit::Tracing::Sidekiq::ServerMiddleware
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
if Gitlab::Runtime.puma? && ::Puma.cli_config.options[:workers].to_i.zero?
|
||||
if defined?(::Puma) && ::Puma.cli_config.options[:workers].to_i.zero?
|
||||
raise 'Puma is only supported in Cluster-mode: workers > 0'
|
||||
end
|
||||
|
|
|
@ -100,8 +100,8 @@ module Gitlab
|
|||
end
|
||||
|
||||
def self.process_name
|
||||
return 'sidekiq' if Gitlab::Runtime.sidekiq?
|
||||
return 'console' if Gitlab::Runtime.console?
|
||||
return 'sidekiq' if Sidekiq.server?
|
||||
return 'console' if defined?(Rails::Console)
|
||||
return 'test' if Rails.env.test?
|
||||
|
||||
'web'
|
||||
|
|
|
@ -21,6 +21,7 @@ module Gitlab
|
|||
prepend_if_ee('::EE::Gitlab::Auth::AuthFinders') # rubocop: disable Cop/InjectEnterpriseEditionModule
|
||||
|
||||
include Gitlab::Utils::StrongMemoize
|
||||
include ActionController::HttpAuthentication::Basic
|
||||
|
||||
PRIVATE_TOKEN_HEADER = 'HTTP_PRIVATE_TOKEN'
|
||||
PRIVATE_TOKEN_PARAM = :private_token
|
||||
|
@ -67,6 +68,19 @@ module Gitlab
|
|||
job.user
|
||||
end
|
||||
|
||||
def find_user_from_basic_auth_job
|
||||
return unless has_basic_credentials?(current_request)
|
||||
|
||||
login, password = user_name_and_password(current_request)
|
||||
return unless login.present? && password.present?
|
||||
return unless ::Ci::Build::CI_REGISTRY_USER == login
|
||||
|
||||
job = ::Ci::Build.find_by_token(password)
|
||||
raise UnauthorizedError unless job
|
||||
|
||||
job.user
|
||||
end
|
||||
|
||||
# We only allow Private Access Tokens with `api` scope to be used by web
|
||||
# requests on RSS feeds or ICS files for backwards compatibility.
|
||||
# It is also used by GraphQL/API requests.
|
||||
|
|
|
@ -32,7 +32,8 @@ module Gitlab
|
|||
def find_sessionless_user(request_format)
|
||||
find_user_from_web_access_token(request_format) ||
|
||||
find_user_from_feed_token(request_format) ||
|
||||
find_user_from_static_object_token(request_format)
|
||||
find_user_from_static_object_token(request_format) ||
|
||||
find_user_from_basic_auth_job
|
||||
rescue Gitlab::Auth::AuthenticationError
|
||||
nil
|
||||
end
|
||||
|
|
|
@ -149,10 +149,10 @@ module Gitlab
|
|||
|
||||
def in_clustered_environment?
|
||||
# Sidekiq doesn't fork
|
||||
return false if Gitlab::Runtime.sidekiq?
|
||||
return false if Sidekiq.server?
|
||||
|
||||
# Unicorn always forks
|
||||
return true if Gitlab::Runtime.unicorn?
|
||||
return true if defined?(::Unicorn)
|
||||
|
||||
# Puma sometimes forks
|
||||
return true if in_clustered_puma?
|
||||
|
@ -162,7 +162,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def in_clustered_puma?
|
||||
return false unless Gitlab::Runtime.puma?
|
||||
return false unless defined?(::Puma)
|
||||
|
||||
@puma_options && @puma_options[:workers] && @puma_options[:workers] > 0
|
||||
end
|
||||
|
|
|
@ -29,7 +29,7 @@ module Gitlab
|
|||
PEM_REGEX = /\-+BEGIN CERTIFICATE\-+.+?\-+END CERTIFICATE\-+/m.freeze
|
||||
SERVER_VERSION_FILE = 'GITALY_SERVER_VERSION'
|
||||
MAXIMUM_GITALY_CALLS = 30
|
||||
CLIENT_NAME = (Gitlab::Runtime.sidekiq? ? 'gitlab-sidekiq' : 'gitlab-web').freeze
|
||||
CLIENT_NAME = (Sidekiq.server? ? 'gitlab-sidekiq' : 'gitlab-web').freeze
|
||||
GITALY_METADATA_FILENAME = '.gitaly-metadata'
|
||||
|
||||
MUTEX = Mutex.new
|
||||
|
@ -382,13 +382,17 @@ module Gitlab
|
|||
end
|
||||
|
||||
def self.long_timeout
|
||||
if Gitlab::Runtime.app_server?
|
||||
if web_app_server?
|
||||
default_timeout
|
||||
else
|
||||
6.hours
|
||||
end
|
||||
end
|
||||
|
||||
def self.web_app_server?
|
||||
defined?(::Unicorn) || defined?(::Puma)
|
||||
end
|
||||
|
||||
def self.storage_metadata_file_path(storage)
|
||||
Gitlab::GitalyClient::StorageSettings.allow_disk_access do
|
||||
File.join(
|
||||
|
|
|
@ -135,7 +135,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def cleanup_time
|
||||
Gitlab::Runtime.sidekiq? ? BG_CLEANUP_RUNTIME_S : FG_CLEANUP_RUNTIME_S
|
||||
Sidekiq.server? ? BG_CLEANUP_RUNTIME_S : FG_CLEANUP_RUNTIME_S
|
||||
end
|
||||
|
||||
def tmp_keychains_created
|
||||
|
|
|
@ -18,7 +18,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def check
|
||||
return unless Gitlab::Runtime.puma?
|
||||
return unless defined?(::Puma)
|
||||
|
||||
stats = Puma.stats
|
||||
stats = JSON.parse(stats)
|
||||
|
|
|
@ -30,7 +30,7 @@ module Gitlab
|
|||
# to change so we can cache the list of servers.
|
||||
def http_servers
|
||||
strong_memoize(:http_servers) do
|
||||
next unless Gitlab::Runtime.unicorn?
|
||||
next unless defined?(::Unicorn::HttpServer)
|
||||
|
||||
ObjectSpace.each_object(::Unicorn::HttpServer).to_a
|
||||
end
|
||||
|
|
|
@ -68,7 +68,7 @@ module Gitlab
|
|||
end
|
||||
|
||||
def timeout_time
|
||||
Gitlab::Runtime.sidekiq? ? TIMEOUT_BACKGROUND : TIMEOUT_FOREGROUND
|
||||
Sidekiq.server? ? TIMEOUT_BACKGROUND : TIMEOUT_FOREGROUND
|
||||
end
|
||||
|
||||
def link_dependencies(text, highlighted_text)
|
||||
|
|
|
@ -150,7 +150,7 @@ module Gitlab
|
|||
|
||||
# Returns the prefix to use for the name of a series.
|
||||
def series_prefix
|
||||
@series_prefix ||= Gitlab::Runtime.sidekiq? ? 'sidekiq_' : 'rails_'
|
||||
@series_prefix ||= Sidekiq.server? ? 'sidekiq_' : 'rails_'
|
||||
end
|
||||
|
||||
# Allow access from other metrics related middlewares
|
||||
|
|
|
@ -39,10 +39,14 @@ module Gitlab
|
|||
end
|
||||
|
||||
def add_metric(series, values, tags = {})
|
||||
prefix = Gitlab::Runtime.sidekiq? ? 'sidekiq_' : 'rails_'
|
||||
prefix = sidekiq? ? 'sidekiq_' : 'rails_'
|
||||
|
||||
@metrics << Metric.new("#{prefix}#{series}", values, tags)
|
||||
end
|
||||
|
||||
def sidekiq?
|
||||
Sidekiq.server?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -61,7 +61,7 @@ module Gitlab
|
|||
# it takes around 80ms. The instances of HttpServers are not a subject
|
||||
# to change so we can cache the list of servers.
|
||||
def http_servers
|
||||
return [] unless Gitlab::Runtime.unicorn?
|
||||
return [] unless defined?(::Unicorn::HttpServer)
|
||||
|
||||
@http_servers ||= ObjectSpace.each_object(::Unicorn::HttpServer).to_a
|
||||
end
|
||||
|
|
|
@ -22,10 +22,10 @@ module Gitlab
|
|||
def pool_size
|
||||
# heuristic constant 5 should be a config setting somewhere -- related to CPU count?
|
||||
size = 5
|
||||
if Gitlab::Runtime.sidekiq?
|
||||
if Sidekiq.server?
|
||||
# the pool will be used in a multi-threaded context
|
||||
size += Sidekiq.options[:concurrency]
|
||||
elsif Gitlab::Runtime.puma?
|
||||
elsif defined?(::Puma)
|
||||
size += Puma.cli_config.options[:max_threads]
|
||||
end
|
||||
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Gitlab
|
||||
# Provides routines to identify the current runtime as which the application
|
||||
# executes, such as whether it is an application server and which one.
|
||||
module Runtime
|
||||
class << self
|
||||
def name
|
||||
matches = []
|
||||
matches << :puma if puma?
|
||||
matches << :unicorn if unicorn?
|
||||
matches << :console if console?
|
||||
matches << :sidekiq if sidekiq?
|
||||
|
||||
raise "Ambiguous process match: #{matches}" if matches.size > 1
|
||||
|
||||
matches.first || :unknown
|
||||
end
|
||||
|
||||
def puma?
|
||||
!!(defined?(::Puma) && bin == 'puma')
|
||||
end
|
||||
|
||||
# For unicorn, we need to check for actual server instances to avoid false positives.
|
||||
def unicorn?
|
||||
!!(defined?(::Unicorn) && defined?(::Unicorn::HttpServer))
|
||||
end
|
||||
|
||||
def sidekiq?
|
||||
!!(defined?(::Sidekiq) && Sidekiq.server? && bin == 'sidekiq')
|
||||
end
|
||||
|
||||
def console?
|
||||
!!defined?(::Rails::Console)
|
||||
end
|
||||
|
||||
def app_server?
|
||||
puma? || unicorn?
|
||||
end
|
||||
|
||||
def multi_threaded?
|
||||
puma? || sidekiq?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Some example values from my system:
|
||||
# puma: /data/cache/bundle-2.5/bin/puma
|
||||
# unicorn: unicorn_rails master -E development -c /tmp/unicorn.rb -l 0.0.0.0:8080
|
||||
# sidekiq: /data/cache/bundle-2.5/bin/sidekiq
|
||||
# thin: bin/rails
|
||||
# console: bin/rails
|
||||
def script_name
|
||||
$0
|
||||
end
|
||||
|
||||
def bin
|
||||
File.basename(script_name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -5,11 +5,11 @@ module Prometheus
|
|||
extend self
|
||||
|
||||
def worker_id
|
||||
if Gitlab::Runtime.sidekiq?
|
||||
if Sidekiq.server?
|
||||
sidekiq_worker_id
|
||||
elsif Gitlab::Runtime.unicorn?
|
||||
elsif defined?(Unicorn::Worker)
|
||||
unicorn_worker_id
|
||||
elsif Gitlab::Runtime.puma?
|
||||
elsif defined?(::Puma)
|
||||
puma_worker_id
|
||||
else
|
||||
unknown_process_id
|
||||
|
|
|
@ -16,7 +16,6 @@ describe 'Database config initializer' do
|
|||
let(:puma_options) { { max_threads: 8 } }
|
||||
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:puma?).and_return(true)
|
||||
stub_const("Puma", puma)
|
||||
allow(puma).to receive_message_chain(:cli_config, :options).and_return(puma_options)
|
||||
end
|
||||
|
|
|
@ -335,6 +335,72 @@ describe Gitlab::Auth::AuthFinders do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#find_user_from_basic_auth_job' do
|
||||
def basic_http_auth(username, password)
|
||||
ActionController::HttpAuthentication::Basic.encode_credentials(username, password)
|
||||
end
|
||||
|
||||
def set_auth(username, password)
|
||||
env['HTTP_AUTHORIZATION'] = basic_http_auth(username, password)
|
||||
end
|
||||
|
||||
subject { find_user_from_basic_auth_job }
|
||||
|
||||
context 'when the request does not have AUTHORIZATION header' do
|
||||
it { is_expected.to be_nil }
|
||||
end
|
||||
|
||||
context 'with wrong credentials' do
|
||||
it 'returns nil without user and password' do
|
||||
set_auth(nil, nil)
|
||||
|
||||
is_expected.to be_nil
|
||||
end
|
||||
|
||||
it 'returns nil without password' do
|
||||
set_auth('some-user', nil)
|
||||
|
||||
is_expected.to be_nil
|
||||
end
|
||||
|
||||
it 'returns nil without user' do
|
||||
set_auth(nil, 'password')
|
||||
|
||||
is_expected.to be_nil
|
||||
end
|
||||
|
||||
it 'returns nil without CI username' do
|
||||
set_auth('user', 'password')
|
||||
|
||||
is_expected.to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'with CI username' do
|
||||
let(:username) { ::Ci::Build::CI_REGISTRY_USER }
|
||||
let(:user) { create(:user) }
|
||||
let(:build) { create(:ci_build, user: user) }
|
||||
|
||||
it 'returns nil without password' do
|
||||
set_auth(username, nil)
|
||||
|
||||
is_expected.to be_nil
|
||||
end
|
||||
|
||||
it 'returns user with valid token' do
|
||||
set_auth(username, build.token)
|
||||
|
||||
is_expected.to eq user
|
||||
end
|
||||
|
||||
it 'raises error with invalid token' do
|
||||
set_auth(username, 'token')
|
||||
|
||||
expect { subject }.to raise_error(Gitlab::Auth::UnauthorizedError)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#validate_access_token!' do
|
||||
let(:personal_access_token) { create(:personal_access_token, user: user) }
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@ require 'spec_helper'
|
|||
|
||||
describe Gitlab::Database::ObsoleteIgnoredColumns do
|
||||
module Testing
|
||||
# Used a fixed date to prevent tests failing across date boundaries
|
||||
REMOVE_DATE = Date.new(2019, 12, 16)
|
||||
|
||||
class MyBase < ApplicationRecord
|
||||
end
|
||||
|
||||
|
@ -23,12 +26,12 @@ describe Gitlab::Database::ObsoleteIgnoredColumns do
|
|||
self.table_name = 'issues'
|
||||
|
||||
ignore_column :id, :other, remove_after: '2019-01-01', remove_with: '12.0'
|
||||
ignore_column :not_used_but_still_ignored, remove_after: Date.today.to_s, remove_with: '12.1'
|
||||
ignore_column :not_used_but_still_ignored, remove_after: REMOVE_DATE.to_s, remove_with: '12.1'
|
||||
end
|
||||
|
||||
class A < SomeAbstract
|
||||
ignore_column :also_unused, remove_after: '2019-02-01', remove_with: '12.1'
|
||||
ignore_column :not_used_but_still_ignored, remove_after: Date.today.to_s, remove_with: '12.1'
|
||||
ignore_column :not_used_but_still_ignored, remove_after: REMOVE_DATE.to_s, remove_with: '12.1'
|
||||
end
|
||||
|
||||
class C < MyBase
|
||||
|
@ -40,15 +43,17 @@ describe Gitlab::Database::ObsoleteIgnoredColumns do
|
|||
|
||||
describe '#execute' do
|
||||
it 'returns a list of class names and columns pairs' do
|
||||
expect(subject.execute).to eq([
|
||||
['Testing::A', {
|
||||
'unused' => IgnorableColumns::ColumnIgnore.new(Date.parse('2019-01-01'), '12.0'),
|
||||
'also_unused' => IgnorableColumns::ColumnIgnore.new(Date.parse('2019-02-01'), '12.1')
|
||||
}],
|
||||
['Testing::B', {
|
||||
'other' => IgnorableColumns::ColumnIgnore.new(Date.parse('2019-01-01'), '12.0')
|
||||
}]
|
||||
])
|
||||
Timecop.freeze(Testing::REMOVE_DATE) do
|
||||
expect(subject.execute).to eq([
|
||||
['Testing::A', {
|
||||
'unused' => IgnorableColumns::ColumnIgnore.new(Date.parse('2019-01-01'), '12.0'),
|
||||
'also_unused' => IgnorableColumns::ColumnIgnore.new(Date.parse('2019-02-01'), '12.1')
|
||||
}],
|
||||
['Testing::B', {
|
||||
'other' => IgnorableColumns::ColumnIgnore.new(Date.parse('2019-01-01'), '12.0')
|
||||
}]
|
||||
])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -26,7 +26,7 @@ describe Gitlab::GitalyClient do
|
|||
|
||||
context 'running in Unicorn' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:unicorn?).and_return(true)
|
||||
stub_const('Unicorn', 1)
|
||||
end
|
||||
|
||||
it { expect(subject.long_timeout).to eq(55) }
|
||||
|
@ -34,7 +34,7 @@ describe Gitlab::GitalyClient do
|
|||
|
||||
context 'running in Puma' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:puma?).and_return(true)
|
||||
stub_const('Puma', 1)
|
||||
end
|
||||
|
||||
it { expect(subject.long_timeout).to eq(55) }
|
||||
|
|
|
@ -236,7 +236,7 @@ describe Gitlab::Gpg do
|
|||
|
||||
context 'when running in Sidekiq' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:sidekiq?).and_return(true)
|
||||
allow(Sidekiq).to receive(:server?).and_return(true)
|
||||
end
|
||||
|
||||
it_behaves_like 'multiple deletion attempts of the tmp-dir', described_class::BG_CLEANUP_RUNTIME_S
|
||||
|
|
|
@ -22,7 +22,6 @@ describe Gitlab::HealthChecks::PumaCheck do
|
|||
|
||||
context 'when Puma is not loaded' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:puma?).and_return(false)
|
||||
hide_const('Puma')
|
||||
end
|
||||
|
||||
|
@ -34,7 +33,6 @@ describe Gitlab::HealthChecks::PumaCheck do
|
|||
|
||||
context 'when Puma is loaded' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:puma?).and_return(true)
|
||||
stub_const('Puma', Module.new)
|
||||
end
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@ describe Gitlab::HealthChecks::UnicornCheck do
|
|||
|
||||
context 'when Unicorn is not loaded' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:unicorn?).and_return(false)
|
||||
hide_const('Unicorn')
|
||||
end
|
||||
|
||||
|
@ -40,7 +39,6 @@ describe Gitlab::HealthChecks::UnicornCheck do
|
|||
let(:http_server_class) { Struct.new(:worker_processes) }
|
||||
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:unicorn?).and_return(true)
|
||||
stub_const('Unicorn::HttpServer', http_server_class)
|
||||
end
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ describe Gitlab::Highlight do
|
|||
end
|
||||
|
||||
it 'utilizes longer timeout for sidekiq' do
|
||||
allow(Gitlab::Runtime).to receive(:sidekiq?).and_return(true)
|
||||
allow(Sidekiq).to receive(:server?).and_return(true)
|
||||
expect(Timeout).to receive(:timeout).with(described_class::TIMEOUT_BACKGROUND).and_call_original
|
||||
|
||||
subject.highlight("Content")
|
||||
|
|
|
@ -63,7 +63,7 @@ describe Gitlab::Metrics::Samplers::InfluxSampler do
|
|||
|
||||
describe '#add_metric' do
|
||||
it 'prefixes the series name for a Rails process' do
|
||||
expect(Gitlab::Runtime).to receive(:sidekiq?).and_return(false)
|
||||
expect(sampler).to receive(:sidekiq?).and_return(false)
|
||||
|
||||
expect(Gitlab::Metrics::Metric).to receive(:new)
|
||||
.with('rails_cats', { value: 10 }, {})
|
||||
|
@ -73,7 +73,7 @@ describe Gitlab::Metrics::Samplers::InfluxSampler do
|
|||
end
|
||||
|
||||
it 'prefixes the series name for a Sidekiq process' do
|
||||
expect(Gitlab::Runtime).to receive(:sidekiq?).and_return(true)
|
||||
expect(sampler).to receive(:sidekiq?).and_return(true)
|
||||
|
||||
expect(Gitlab::Metrics::Metric).to receive(:new)
|
||||
.with('sidekiq_cats', { value: 10 }, {})
|
||||
|
|
|
@ -1,112 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe Gitlab::Runtime do
|
||||
REAL_PATH = $0
|
||||
|
||||
after(:all) do
|
||||
$0 = REAL_PATH
|
||||
end
|
||||
|
||||
context "when unknown" do
|
||||
it "identifies as :unknown" do
|
||||
expect(subject.name).to eq(:unknown)
|
||||
end
|
||||
end
|
||||
|
||||
context "on multiple matches" do
|
||||
before do
|
||||
$0 = '/data/cache/bundle-2.5/bin/puma'
|
||||
stub_const('::Puma', double)
|
||||
stub_const('::Rails::Console', double)
|
||||
end
|
||||
|
||||
it "raises an exception when trying to identify" do
|
||||
expect { subject.name }.to raise_error(RuntimeError, "Ambiguous process match: [:puma, :console]")
|
||||
end
|
||||
end
|
||||
|
||||
context "puma" do
|
||||
let(:puma_type) { double('::Puma') }
|
||||
|
||||
before do
|
||||
$0 = '/data/cache/bundle-2.5/bin/puma'
|
||||
stub_const('::Puma', puma_type)
|
||||
end
|
||||
|
||||
it "identifies itself" do
|
||||
expect(subject.name).to eq(:puma)
|
||||
expect(subject.puma?).to be(true)
|
||||
end
|
||||
|
||||
it "does not identify as others" do
|
||||
expect(subject.unicorn?).to be(false)
|
||||
expect(subject.sidekiq?).to be(false)
|
||||
expect(subject.console?).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
context "unicorn" do
|
||||
let(:unicorn_type) { Module.new }
|
||||
let(:unicorn_server_type) { Class.new }
|
||||
|
||||
before do
|
||||
$0 = 'unicorn_rails master -E development -c /tmp/unicorn.rb -l 0.0.0.0:8080'
|
||||
stub_const('::Unicorn', unicorn_type)
|
||||
stub_const('::Unicorn::HttpServer', unicorn_server_type)
|
||||
end
|
||||
|
||||
it "identifies itself" do
|
||||
expect(subject.name).to eq(:unicorn)
|
||||
expect(subject.unicorn?).to be(true)
|
||||
end
|
||||
|
||||
it "does not identify as others" do
|
||||
expect(subject.puma?).to be(false)
|
||||
expect(subject.sidekiq?).to be(false)
|
||||
expect(subject.console?).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
context "sidekiq" do
|
||||
let(:sidekiq_type) { double('::Sidekiq') }
|
||||
|
||||
before do
|
||||
$0 = '/data/cache/bundle-2.5/bin/sidekiq'
|
||||
stub_const('::Sidekiq', sidekiq_type)
|
||||
allow(sidekiq_type).to receive(:server?).and_return(true)
|
||||
end
|
||||
|
||||
it "identifies itself" do
|
||||
expect(subject.name).to eq(:sidekiq)
|
||||
expect(subject.sidekiq?).to be(true)
|
||||
end
|
||||
|
||||
it "does not identify as others" do
|
||||
expect(subject.unicorn?).to be(false)
|
||||
expect(subject.puma?).to be(false)
|
||||
expect(subject.console?).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
context "console" do
|
||||
let(:console_type) { double('::Rails::Console') }
|
||||
|
||||
before do
|
||||
$0 = 'bin/rails'
|
||||
stub_const('::Rails::Console', console_type)
|
||||
end
|
||||
|
||||
it "identifies itself" do
|
||||
expect(subject.name).to eq(:console)
|
||||
expect(subject.console?).to be(true)
|
||||
end
|
||||
|
||||
it "does not identify as others" do
|
||||
expect(subject.unicorn?).to be(false)
|
||||
expect(subject.sidekiq?).to be(false)
|
||||
expect(subject.puma?).to be(false)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -6,13 +6,16 @@ describe Prometheus::PidProvider do
|
|||
describe '.worker_id' do
|
||||
subject { described_class.worker_id }
|
||||
|
||||
let(:sidekiq_module) { Module.new }
|
||||
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:sidekiq?).and_return(false)
|
||||
allow(sidekiq_module).to receive(:server?).and_return(false)
|
||||
stub_const('Sidekiq', sidekiq_module)
|
||||
end
|
||||
|
||||
context 'when running in Sidekiq server mode' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:sidekiq?).and_return(true)
|
||||
expect(Sidekiq).to receive(:server?).and_return(true)
|
||||
end
|
||||
|
||||
context 'in a clustered setup' do
|
||||
|
@ -30,7 +33,8 @@ describe Prometheus::PidProvider do
|
|||
|
||||
context 'when running in Unicorn mode' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:unicorn?).and_return(true)
|
||||
stub_const('Unicorn::Worker', Class.new)
|
||||
hide_const('Puma')
|
||||
|
||||
expect(described_class).to receive(:process_name)
|
||||
.at_least(:once)
|
||||
|
@ -90,7 +94,8 @@ describe Prometheus::PidProvider do
|
|||
|
||||
context 'when running in Puma mode' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:puma?).and_return(true)
|
||||
stub_const('Puma', Module.new)
|
||||
hide_const('Unicorn::Worker')
|
||||
|
||||
expect(described_class).to receive(:process_name)
|
||||
.at_least(:once)
|
||||
|
@ -111,6 +116,11 @@ describe Prometheus::PidProvider do
|
|||
end
|
||||
|
||||
context 'when running in unknown mode' do
|
||||
before do
|
||||
hide_const('Puma')
|
||||
hide_const('Unicorn::Worker')
|
||||
end
|
||||
|
||||
it { is_expected.to eq "process_#{Process.pid}" }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -108,7 +108,7 @@ describe Git::BranchPushService, services: true do
|
|||
end
|
||||
|
||||
it 'reports an error' do
|
||||
allow(Gitlab::Runtime).to receive(:sidekiq?).and_return(true)
|
||||
allow(Sidekiq).to receive(:server?).and_return(true)
|
||||
expect(Sidekiq.logger).to receive(:warn)
|
||||
|
||||
expect { subject }.not_to change { Ci::Pipeline.count }
|
||||
|
|
|
@ -84,7 +84,7 @@ module KubernetesHelpers
|
|||
end
|
||||
|
||||
logs_url = service.api_url + "/api/v1/namespaces/#{namespace}/pods/#{pod_name}" \
|
||||
"/log?#{container_query_param}tailLines=#{Clusters::Platforms::Kubernetes::LOGS_LIMIT}"
|
||||
"/log?#{container_query_param}tailLines=#{Clusters::Platforms::Kubernetes::LOGS_LIMIT}×tamps=true"
|
||||
|
||||
if status
|
||||
response = { status: status }
|
||||
|
@ -331,7 +331,7 @@ module KubernetesHelpers
|
|||
end
|
||||
|
||||
def kube_logs_body
|
||||
"Log 1\nLog 2\nLog 3"
|
||||
"2019-12-13T14:04:22.123456Z Log 1\n2019-12-13T14:04:23.123456Z Log 2\n2019-12-13T14:04:24.123456Z Log 3"
|
||||
end
|
||||
|
||||
def kube_deployments_body
|
||||
|
|
|
@ -118,7 +118,7 @@ RSpec.shared_examples "redis_shared_examples" do
|
|||
|
||||
context 'when running not on sidekiq workers' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:sidekiq?).and_return(false)
|
||||
allow(Sidekiq).to receive(:server?).and_return(false)
|
||||
end
|
||||
|
||||
it 'instantiates a connection pool with size 5' do
|
||||
|
@ -130,7 +130,7 @@ RSpec.shared_examples "redis_shared_examples" do
|
|||
|
||||
context 'when running on sidekiq workers' do
|
||||
before do
|
||||
allow(Gitlab::Runtime).to receive(:sidekiq?).and_return(true)
|
||||
allow(Sidekiq).to receive(:server?).and_return(true)
|
||||
allow(Sidekiq).to receive(:options).and_return({ concurrency: 18 })
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue