summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/javascripts/vue_merge_request_widget/components/extensions/status_icon.vue2
-rw-r--r--app/workers/loose_foreign_keys/cleanup_worker.rb2
-rw-r--r--doc/development/database/multiple_databases.md2
-rw-r--r--doc/update/package/convert_to_ee.md14
-rw-r--r--doc/user/admin_area/index.md14
-rw-r--r--doc/user/project/merge_requests/drafts.md8
-rw-r--r--lib/gitlab/database.rb38
-rw-r--r--lib/gitlab/database/each_database.rb5
-rw-r--r--lib/gitlab/database/gitlab_schema.rb6
-rw-r--r--lib/gitlab/database/load_balancing.rb2
-rw-r--r--lib/gitlab/diff/highlight_cache.rb7
-rw-r--r--lib/gitlab/metrics/subscribers/active_record.rb5
-rw-r--r--lib/gitlab/usage_data_counters/hll_redis_counter.rb9
-rw-r--r--lib/gitlab/usage_data_counters/known_events/work_items.yml5
-rw-r--r--lib/tasks/gitlab/db.rake2
-rw-r--r--lib/tasks/gitlab/db/lock_writes.rake6
-rw-r--r--spec/db/docs_spec.rb5
-rw-r--r--spec/lib/gitlab/database/each_database_spec.rb27
-rw-r--r--spec/lib/gitlab/database/gitlab_schema_spec.rb19
-rw-r--r--spec/lib/gitlab/database/migrations/reestablished_connection_stack_spec.rb2
-rw-r--r--spec/lib/gitlab/database/reindexing_spec.rb2
-rw-r--r--spec/lib/gitlab/database_spec.rb2
-rw-r--r--spec/lib/gitlab/diff/highlight_cache_spec.rb19
-rw-r--r--spec/services/work_items/task_list_reference_removal_service_spec.rb6
-rw-r--r--spec/tasks/dev_rake_spec.rb4
-rw-r--r--spec/tasks/gitlab/db_rake_spec.rb13
-rw-r--r--spec/workers/loose_foreign_keys/cleanup_worker_spec.rb2
27 files changed, 156 insertions, 72 deletions
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/extensions/status_icon.vue b/app/assets/javascripts/vue_merge_request_widget/components/extensions/status_icon.vue
index 25b7e652657..dc748ba44f2 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/extensions/status_icon.vue
+++ b/app/assets/javascripts/vue_merge_request_widget/components/extensions/status_icon.vue
@@ -49,7 +49,7 @@ export default {
<div
:class="[
$options.EXTENSION_ICON_CLASS[iconName],
- { 'mr-widget-extension-icon': !isLoading && level === 1 },
+ { 'mr-widget-extension-icon gl-w-6': !isLoading && level === 1 },
{ 'gl-p-2': isLoading || level === 1 },
]"
class="gl-rounded-full gl-mr-3 gl-relative gl-p-2"
diff --git a/app/workers/loose_foreign_keys/cleanup_worker.rb b/app/workers/loose_foreign_keys/cleanup_worker.rb
index 0d04c503fbf..0a3a834578a 100644
--- a/app/workers/loose_foreign_keys/cleanup_worker.rb
+++ b/app/workers/loose_foreign_keys/cleanup_worker.rb
@@ -34,7 +34,7 @@ module LooseForeignKeys
# If two DBs are configured (Main, CI): minute 1 -> Main, minute 2 -> CI
def current_connection_name_and_base_model
minutes_since_epoch = Time.current.to_i / 60
- connections_with_name = Gitlab::Database.database_base_models.to_a # this will never be empty
+ connections_with_name = Gitlab::Database.database_base_models_with_gitlab_shared.to_a # this will never be empty
connections_with_name[minutes_since_epoch % connections_with_name.count]
end
end
diff --git a/doc/development/database/multiple_databases.md b/doc/development/database/multiple_databases.md
index 7991043625e..9641ea37002 100644
--- a/doc/development/database/multiple_databases.md
+++ b/doc/development/database/multiple_databases.md
@@ -26,6 +26,7 @@ Each table of GitLab needs to have a `gitlab_schema` assigned:
- `gitlab_main`: describes all tables that are being stored in the `main:` database (for example, like `projects`, `users`).
- `gitlab_ci`: describes all CI tables that are being stored in the `ci:` database (for example, `ci_pipelines`, `ci_builds`).
+- `gitlab_geo`: describes all Geo tables that are being stored in the `geo:` database (for example, like `project_registry`, `secondary_usage_data`).
- `gitlab_shared`: describe all application tables that contain data across all decomposed databases (for example, `loose_foreign_keys_deleted_records`) for models that inherit from `Gitlab::Database::SharedModel`.
- `gitlab_internal`: describe all internal tables of Rails and PostgreSQL (for example, `ar_internal_metadata`, `schema_migrations`, `pg_*`).
- `...`: more schemas to be introduced with additional decomposed databases
@@ -34,6 +35,7 @@ The usage of schema enforces the base class to be used:
- `ApplicationRecord` for `gitlab_main`
- `Ci::ApplicationRecord` for `gitlab_ci`
+- `Geo::TrackingBase` for `gitlab_geo`
- `Gitlab::Database::SharedModel` for `gitlab_shared`
### The impact of `gitlab_schema`
diff --git a/doc/update/package/convert_to_ee.md b/doc/update/package/convert_to_ee.md
index e47e1d49927..9f8e56c460c 100644
--- a/doc/update/package/convert_to_ee.md
+++ b/doc/update/package/convert_to_ee.md
@@ -63,6 +63,12 @@ The steps can be summed up to:
piped script, you can first
[check its contents](https://packages.gitlab.com/gitlab/gitlab-ee/install).
+ NOTE:
+ If you want to use `dpkg`/`rpm` instead of `apt-get`/`yum`, go through the first
+ step to find the current GitLab version, then follow
+ [Update using a manually-downloaded package](index.md#upgrade-using-a-manually-downloaded-package),
+ and then [add your license](../../user/admin_area/license.md).
+
1. Install the `gitlab-ee` package. The install automatically
uninstalls the `gitlab-ce` package on your GitLab server. `reconfigure`
Omnibus right after the `gitlab-ee` package is installed. **Make sure that you
@@ -91,8 +97,7 @@ The steps can be summed up to:
sudo gitlab-ctl reconfigure
```
-1. Now go to the GitLab Admin Area of your server (`/admin/subscription`) and
- [add your license](../../user/admin_area/license.md).
+1. Now activate GitLab Enterprise Edition by [adding your license](../../user/admin_area/license.md).
1. After you confirm that GitLab is working as expected, you may remove the old
Community Edition repository:
@@ -111,8 +116,3 @@ The steps can be summed up to:
That's it! You can now use GitLab Enterprise Edition! To update to a newer
version, follow [Update using the official repositories](index.md#upgrade-using-the-official-repositories).
-
-NOTE:
-If you want to use `dpkg`/`rpm` instead of `apt-get`/`yum`, go through the first
-step to find the current GitLab version and then follow
-[Update using a manually-downloaded package](index.md#upgrade-using-a-manually-downloaded-package).
diff --git a/doc/user/admin_area/index.md b/doc/user/admin_area/index.md
index f8867638be1..5fd44cf8697 100644
--- a/doc/user/admin_area/index.md
+++ b/doc/user/admin_area/index.md
@@ -372,14 +372,16 @@ The following topics document the **Monitoring** section of the Admin Area.
### System Information
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/341248) in GitLab 15.2, support for relative time. "Uptime" statistic was renamed to "System started".
+
The **System Info** page provides the following statistics:
-| Field | Description |
-|:-------------|:------------|
-| CPU | Number of CPU cores available |
-| Memory Usage | Memory in use, and total memory available |
-| Disk Usage | Disk space in use, and total disk space available |
-| Uptime | Approximate uptime of the GitLab instance |
+| Field | Description |
+|:---------------|:--------------------------------------------------|
+| CPU | Number of CPU cores available |
+| Memory Usage | Memory in use, and total memory available |
+| Disk Usage | Disk space in use, and total disk space available |
+| System started | When the system hosting GitLab was started. In GitLab 15.1 and earlier, this was an uptime statistic. |
These statistics are updated only when you navigate to the **System Info** page, or you refresh the page in your browser.
diff --git a/doc/user/project/merge_requests/drafts.md b/doc/user/project/merge_requests/drafts.md
index 13cc68f02dd..4bb6034c0bd 100644
--- a/doc/user/project/merge_requests/drafts.md
+++ b/doc/user/project/merge_requests/drafts.md
@@ -75,12 +75,10 @@ draft merge requests:
## Pipelines for drafts
-When the [merged results pipelines](../../../ci/pipelines/merged_results_pipelines.md)
-feature is enabled, draft merge requests run
-[merge request pipelines](../../../ci/pipelines/merge_request_pipelines.md) only.
+Draft merge requests run the same pipelines as merge request that are marked as ready.
-To run merged results pipelines, you must
-[mark the merge request as ready](#mark-merge-requests-as-ready).
+In GitLab 15.0 and older, you must [mark the merge request as ready](#mark-merge-requests-as-ready)
+if you want to run [merged results pipelines](../../../ci/pipelines/merged_results_pipelines.md).
<!-- ## Troubleshooting
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb
index 68df2282df6..8703365b678 100644
--- a/lib/gitlab/database.rb
+++ b/lib/gitlab/database.rb
@@ -63,13 +63,45 @@ module Gitlab
}.compact.with_indifferent_access.freeze
end
+ # This returns a list of databases that contains all the gitlab_shared schema
+ # tables. We can't reuse database_base_models because Geo does not support
+ # the gitlab_shared tables yet.
+ def self.database_base_models_with_gitlab_shared
+ @database_base_models_with_gitlab_shared ||= {
+ # Note that we use ActiveRecord::Base here and not ApplicationRecord.
+ # This is deliberate, as we also use these classes to apply load
+ # balancing to, and the load balancer must be enabled for _all_ models
+ # that inher from ActiveRecord::Base; not just our own models that
+ # inherit from ApplicationRecord.
+ main: ::ActiveRecord::Base,
+ ci: ::Ci::ApplicationRecord.connection_class? ? ::Ci::ApplicationRecord : nil
+ }.compact.with_indifferent_access.freeze
+ end
+
+ # This returns a list of databases whose connection supports database load
+ # balancing. We can't reuse the database_base_models method because the Geo
+ # database does not support load balancing yet.
+ #
+ # TODO: https://gitlab.com/gitlab-org/geo-team/discussions/-/issues/5032
+ def self.database_base_models_using_load_balancing
+ @database_base_models_with_gitlab_shared ||= {
+ # Note that we use ActiveRecord::Base here and not ApplicationRecord.
+ # This is deliberate, as we also use these classes to apply load
+ # balancing to, and the load balancer must be enabled for _all_ models
+ # that inher from ActiveRecord::Base; not just our own models that
+ # inherit from ApplicationRecord.
+ main: ::ActiveRecord::Base,
+ ci: ::Ci::ApplicationRecord.connection_class? ? ::Ci::ApplicationRecord : nil
+ }.compact.with_indifferent_access.freeze
+ end
+
# This returns a list of base models with connection associated for a given gitlab_schema
def self.schemas_to_base_models
@schemas_to_base_models ||= {
gitlab_main: [self.database_base_models.fetch(:main)],
gitlab_ci: [self.database_base_models[:ci] || self.database_base_models.fetch(:main)], # use CI or fallback to main
- gitlab_shared: self.database_base_models.values, # all models
- gitlab_internal: self.database_base_models.values # all models
+ gitlab_shared: database_base_models_with_gitlab_shared.values, # all models
+ gitlab_internal: database_base_models.values # all models
}.with_indifferent_access.freeze
end
@@ -168,7 +200,7 @@ module Gitlab
# can potentially upgrade from read to read-write mode (using a different connection), we specify
# up-front that we'll explicitly use the primary for the duration of the operation.
Gitlab::Database::LoadBalancing::Session.current.use_primary do
- base_models = database_base_models.values
+ base_models = database_base_models_using_load_balancing.values
base_models.reduce(block) { |blk, model| -> { model.uncached(&blk) } }.call
end
end
diff --git a/lib/gitlab/database/each_database.rb b/lib/gitlab/database/each_database.rb
index 0d876f5124f..02f008abf85 100644
--- a/lib/gitlab/database/each_database.rb
+++ b/lib/gitlab/database/each_database.rb
@@ -36,8 +36,7 @@ module Gitlab
private
def select_base_models(names)
- base_models = Gitlab::Database.database_base_models
-
+ base_models = Gitlab::Database.database_base_models_with_gitlab_shared
return base_models if names.empty?
names.each_with_object(HashWithIndifferentAccess.new) do |name, hash|
@@ -48,7 +47,7 @@ module Gitlab
end
def with_shared_model_connections(shared_model, selected_databases, &blk)
- Gitlab::Database.database_base_models.each_pair do |connection_name, connection_model|
+ Gitlab::Database.database_base_models_with_gitlab_shared.each_pair do |connection_name, connection_model|
if shared_model.limit_connection_names
next unless shared_model.limit_connection_names.include?(connection_name.to_sym)
end
diff --git a/lib/gitlab/database/gitlab_schema.rb b/lib/gitlab/database/gitlab_schema.rb
index baf4cc48424..365a4283d4c 100644
--- a/lib/gitlab/database/gitlab_schema.rb
+++ b/lib/gitlab/database/gitlab_schema.rb
@@ -13,6 +13,8 @@
module Gitlab
module Database
module GitlabSchema
+ GITLAB_SCHEMAS_FILE = 'lib/gitlab/database/gitlab_schemas.yml'
+
# These tables are deleted/renamed, but still referenced by migrations.
# This is needed for now, but should be removed in the future
DELETED_TABLES = {
@@ -93,7 +95,7 @@ module Gitlab
end
def self.tables_to_schema
- @tables_to_schema ||= YAML.load_file(Rails.root.join('lib/gitlab/database/gitlab_schemas.yml'))
+ @tables_to_schema ||= YAML.load_file(Rails.root.join(GITLAB_SCHEMAS_FILE))
end
def self.schema_names
@@ -102,3 +104,5 @@ module Gitlab
end
end
end
+
+Gitlab::Database::GitlabSchema.prepend_mod
diff --git a/lib/gitlab/database/load_balancing.rb b/lib/gitlab/database/load_balancing.rb
index 6517923d23e..5f9416fb4db 100644
--- a/lib/gitlab/database/load_balancing.rb
+++ b/lib/gitlab/database/load_balancing.rb
@@ -19,7 +19,7 @@ module Gitlab
].freeze
def self.base_models
- @base_models ||= ::Gitlab::Database.database_base_models.values.freeze
+ @base_models ||= ::Gitlab::Database.database_base_models_using_load_balancing.values.freeze
end
def self.each_load_balancer
diff --git a/lib/gitlab/diff/highlight_cache.rb b/lib/gitlab/diff/highlight_cache.rb
index f950d01fdf0..8e9dc3a305f 100644
--- a/lib/gitlab/diff/highlight_cache.rb
+++ b/lib/gitlab/diff/highlight_cache.rb
@@ -193,6 +193,8 @@ module Gitlab
results = redis.hmget(key, file_paths)
end
+ record_hit_ratio(results)
+
results.map! do |result|
Gitlab::Json.parse(gzip_decompress(result), symbolize_names: true) unless result.nil?
end
@@ -215,6 +217,11 @@ module Gitlab
def current_transaction
::Gitlab::Metrics::WebTransaction.current
end
+
+ def record_hit_ratio(results)
+ current_transaction&.increment(:gitlab_redis_diff_caching_requests_total)
+ current_transaction&.increment(:gitlab_redis_diff_caching_hits_total) if results.any?(&:present?)
+ end
end
end
end
diff --git a/lib/gitlab/metrics/subscribers/active_record.rb b/lib/gitlab/metrics/subscribers/active_record.rb
index c1ecbe994cd..e3756a8c9f6 100644
--- a/lib/gitlab/metrics/subscribers/active_record.rb
+++ b/lib/gitlab/metrics/subscribers/active_record.rb
@@ -186,7 +186,10 @@ module Gitlab
end
::Gitlab::Database.database_base_models.keys.each do |config_name|
- counters << compose_metric_key(metric, nil, config_name) # main / ci
+ counters << compose_metric_key(metric, nil, config_name) # main / ci / geo
+ end
+
+ ::Gitlab::Database.database_base_models_using_load_balancing.keys.each do |config_name|
counters << compose_metric_key(metric, nil, config_name + ::Gitlab::Database::LoadBalancing::LoadBalancer::REPLICA_SUFFIX) # main_replica / ci_replica
end
end
diff --git a/lib/gitlab/usage_data_counters/hll_redis_counter.rb b/lib/gitlab/usage_data_counters/hll_redis_counter.rb
index 92d23a053c0..40581bda81b 100644
--- a/lib/gitlab/usage_data_counters/hll_redis_counter.rb
+++ b/lib/gitlab/usage_data_counters/hll_redis_counter.rb
@@ -37,9 +37,18 @@ module Gitlab
].freeze
CATEGORIES_COLLECTED_FROM_METRICS_DEFINITIONS = %w[
+ ci_users
error_tracking
ide_edit
+ importer
+ incident_management_alerts
+ pipeline_authoring
+ secure
+ snippets
+ source_code
+ terraform
testing
+ work_items
].freeze
# Track event on entity_id
diff --git a/lib/gitlab/usage_data_counters/known_events/work_items.yml b/lib/gitlab/usage_data_counters/known_events/work_items.yml
index 5930e711aa2..0c9c6026c46 100644
--- a/lib/gitlab/usage_data_counters/known_events/work_items.yml
+++ b/lib/gitlab/usage_data_counters/known_events/work_items.yml
@@ -9,8 +9,3 @@
redis_slot: users
aggregation: weekly
feature_flag: track_work_items_activity
-- name: users_updating_weight_estimate
- category: work_items
- redis_slot: users
- aggregation: weekly
- feature_flag: track_work_items_activity
diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake
index 84de21ea102..5ed54bb6921 100644
--- a/lib/tasks/gitlab/db.rake
+++ b/lib/tasks/gitlab/db.rake
@@ -94,7 +94,7 @@ namespace :gitlab do
connection = Gitlab::Database.database_base_models['main'].connection
databases_loaded << configure_database(connection)
else
- Gitlab::Database.database_base_models.each do |name, model|
+ Gitlab::Database.database_base_models_with_gitlab_shared.each do |name, model|
next unless databases_with_tasks.any? { |db_with_tasks| db_with_tasks.name == name }
databases_loaded << configure_database(model.connection, database_name: name)
diff --git a/lib/tasks/gitlab/db/lock_writes.rake b/lib/tasks/gitlab/db/lock_writes.rake
index b57c2860fe3..3a083036781 100644
--- a/lib/tasks/gitlab/db/lock_writes.rake
+++ b/lib/tasks/gitlab/db/lock_writes.rake
@@ -11,6 +11,9 @@ namespace :gitlab do
schemas_for_connection = Gitlab::Database.gitlab_schemas_for_connection(connection)
Gitlab::Database::GitlabSchema.tables_to_schema.each do |table_name, schema_name|
+ # TODO: https://gitlab.com/gitlab-org/gitlab/-/issues/366834
+ next if schema_name == :gitlab_geo
+
if schemas_for_connection.include?(schema_name.to_sym)
drop_write_trigger(database_name, connection, table_name)
else
@@ -24,6 +27,9 @@ namespace :gitlab do
task unlock_writes: :environment do
Gitlab::Database::EachDatabase.each_database_connection do |connection, database_name|
Gitlab::Database::GitlabSchema.tables_to_schema.each do |table_name, schema_name|
+ # TODO: https://gitlab.com/gitlab-org/gitlab/-/issues/366834
+ next if schema_name == :gitlab_geo
+
drop_write_trigger(database_name, connection, table_name)
end
drop_write_trigger_function(connection)
diff --git a/spec/db/docs_spec.rb b/spec/db/docs_spec.rb
index 20746e107fb..ad3705c3dbe 100644
--- a/spec/db/docs_spec.rb
+++ b/spec/db/docs_spec.rb
@@ -4,8 +4,11 @@ require 'spec_helper'
RSpec.describe 'Database Documentation' do
context 'for each table' do
+ # TODO: https://gitlab.com/gitlab-org/gitlab/-/issues/366834
+ let(:database_base_models) { Gitlab::Database.database_base_models.select { |k, _| k != 'geo' } }
+
let(:all_tables) do
- Gitlab::Database.database_base_models.flat_map { |_, m| m.connection.tables }.sort.uniq
+ database_base_models.flat_map { |_, m| m.connection.tables }.sort.uniq
end
let(:metadata_required_fields) do
diff --git a/spec/lib/gitlab/database/each_database_spec.rb b/spec/lib/gitlab/database/each_database_spec.rb
index 8345cdfb8fb..2a6eb8f779d 100644
--- a/spec/lib/gitlab/database/each_database_spec.rb
+++ b/spec/lib/gitlab/database/each_database_spec.rb
@@ -4,9 +4,10 @@ require 'spec_helper'
RSpec.describe Gitlab::Database::EachDatabase do
describe '.each_database_connection', :add_ci_connection do
+ let(:database_base_models) { { main: ActiveRecord::Base, ci: Ci::ApplicationRecord }.with_indifferent_access }
+
before do
- allow(Gitlab::Database).to receive(:database_base_models)
- .and_return({ main: ActiveRecord::Base, ci: Ci::ApplicationRecord }.with_indifferent_access)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(database_base_models)
end
it 'yields each connection after connecting SharedModel' do
@@ -60,12 +61,20 @@ RSpec.describe Gitlab::Database::EachDatabase do
end
context 'when shared connections are not included' do
+ def clear_memoization(key)
+ Gitlab::Database.remove_instance_variable(key) if Gitlab::Database.instance_variable_defined?(key)
+ end
+
+ before do
+ allow(Gitlab::Database).to receive(:database_base_models).and_return(database_base_models)
+
+ # Clear the memoization because the return of Gitlab::Database#schemas_to_base_models depends stubbed value
+ clear_memoization(:@schemas_to_base_models)
+ clear_memoization(:@schemas_to_base_models_ee)
+ end
+
it 'only yields the unshared connections' do
- if Gitlab::Database.has_config?(:ci)
- expect(Gitlab::Database).to receive(:db_config_share_with).exactly(3).times.and_return(nil, 'main', 'main')
- else
- expect(Gitlab::Database).to receive(:db_config_share_with).twice.and_return(nil, 'main')
- end
+ expect(Gitlab::Database).to receive(:db_config_share_with).exactly(3).times.and_return(nil, 'main', 'main')
expect { |b| described_class.each_database_connection(include_shared: false, &b) }
.to yield_successive_args([ActiveRecord::Base.connection, 'main'])
@@ -79,7 +88,7 @@ RSpec.describe Gitlab::Database::EachDatabase do
let(:model2) { Class.new(Gitlab::Database::SharedModel) }
before do
- allow(Gitlab::Database).to receive(:database_base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared)
.and_return({ main: ActiveRecord::Base, ci: Ci::ApplicationRecord }.with_indifferent_access)
end
@@ -136,7 +145,7 @@ RSpec.describe Gitlab::Database::EachDatabase do
let(:ci_model) { Class.new(Ci::ApplicationRecord) }
before do
- allow(Gitlab::Database).to receive(:database_base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared)
.and_return({ main: ActiveRecord::Base, ci: Ci::ApplicationRecord }.with_indifferent_access)
allow(main_model).to receive_message_chain('connection_db_config.name').and_return('main')
diff --git a/spec/lib/gitlab/database/gitlab_schema_spec.rb b/spec/lib/gitlab/database/gitlab_schema_spec.rb
index 611b2fbad72..72950895022 100644
--- a/spec/lib/gitlab/database/gitlab_schema_spec.rb
+++ b/spec/lib/gitlab/database/gitlab_schema_spec.rb
@@ -3,26 +3,27 @@ require 'spec_helper'
RSpec.describe Gitlab::Database::GitlabSchema do
describe '.tables_to_schema' do
- subject { described_class.tables_to_schema }
-
it 'all tables have assigned a known gitlab_schema' do
- is_expected.to all(
- match([be_a(String), be_in([:gitlab_internal, :gitlab_shared, :gitlab_main, :gitlab_ci])])
+ expect(described_class.tables_to_schema).to all(
+ match([be_a(String), be_in(Gitlab::Database.schemas_to_base_models.keys.map(&:to_sym))])
)
end
# This being run across different databases indirectly also tests
# a general consistency of structure across databases
- Gitlab::Database.database_base_models.each do |db_config_name, db_class|
- let(:db_data_sources) { db_class.connection.data_sources }
-
+ Gitlab::Database.database_base_models.select { |k, _| k != 'geo' }.each do |db_config_name, db_class|
context "for #{db_config_name} using #{db_class}" do
+ let(:db_data_sources) { db_class.connection.data_sources }
+
+ # The Geo database does not share the same structure as all decomposed databases
+ subject { described_class.tables_to_schema.select { |_, v| v != :gitlab_geo } }
+
it 'new data sources are added' do
missing_tables = db_data_sources.to_set - subject.keys
expect(missing_tables).to be_empty, \
"Missing table(s) #{missing_tables.to_a} not found in #{described_class}.tables_to_schema. " \
- "Any new tables must be added to lib/gitlab/database/gitlab_schemas.yml."
+ "Any new tables must be added to #{described_class::GITLAB_SCHEMAS_FILE}."
end
it 'non-existing data sources are removed' do
@@ -30,7 +31,7 @@ RSpec.describe Gitlab::Database::GitlabSchema do
expect(extra_tables).to be_empty, \
"Extra table(s) #{extra_tables.to_a} found in #{described_class}.tables_to_schema. " \
- "Any removed or renamed tables must be removed from lib/gitlab/database/gitlab_schemas.yml."
+ "Any removed or renamed tables must be removed from #{described_class::GITLAB_SCHEMAS_FILE}."
end
end
end
diff --git a/spec/lib/gitlab/database/migrations/reestablished_connection_stack_spec.rb b/spec/lib/gitlab/database/migrations/reestablished_connection_stack_spec.rb
index d197f39be40..c6327de98d1 100644
--- a/spec/lib/gitlab/database/migrations/reestablished_connection_stack_spec.rb
+++ b/spec/lib/gitlab/database/migrations/reestablished_connection_stack_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe Gitlab::Database::Migrations::ReestablishedConnectionStack do
end
describe '#with_restored_connection_stack' do
- Gitlab::Database.database_base_models.each do |db_config_name, _|
+ Gitlab::Database.database_base_models_with_gitlab_shared.each do |db_config_name, _|
context db_config_name do
it_behaves_like "reconfigures connection stack", db_config_name do
it 'does restore connection hierarchy' do
diff --git a/spec/lib/gitlab/database/reindexing_spec.rb b/spec/lib/gitlab/database/reindexing_spec.rb
index 0c576505e07..976b9896dfa 100644
--- a/spec/lib/gitlab/database/reindexing_spec.rb
+++ b/spec/lib/gitlab/database/reindexing_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe Gitlab::Database::Reindexing do
include Database::DatabaseHelpers
describe '.invoke' do
- let(:databases) { Gitlab::Database.database_base_models }
+ let(:databases) { Gitlab::Database.database_base_models_with_gitlab_shared }
let(:databases_count) { databases.count }
it 'cleans up any leftover indexes' do
diff --git a/spec/lib/gitlab/database_spec.rb b/spec/lib/gitlab/database_spec.rb
index 064613074cd..452a662bdcb 100644
--- a/spec/lib/gitlab/database_spec.rb
+++ b/spec/lib/gitlab/database_spec.rb
@@ -337,7 +337,7 @@ RSpec.describe Gitlab::Database do
let(:model2) { Class.new(base_model) }
before do
- allow(described_class).to receive(:database_base_models)
+ allow(described_class).to receive(:database_base_models_using_load_balancing)
.and_return({ model1: model1, model2: model2 }.with_indifferent_access)
end
diff --git a/spec/lib/gitlab/diff/highlight_cache_spec.rb b/spec/lib/gitlab/diff/highlight_cache_spec.rb
index e643b58ee32..5350dda5fb2 100644
--- a/spec/lib/gitlab/diff/highlight_cache_spec.rb
+++ b/spec/lib/gitlab/diff/highlight_cache_spec.rb
@@ -3,7 +3,8 @@
require 'spec_helper'
RSpec.describe Gitlab::Diff::HighlightCache, :clean_gitlab_redis_cache do
- let(:merge_request) { create(:merge_request_with_diffs) }
+ let_it_be(:merge_request) { create(:merge_request_with_diffs) }
+
let(:diff_hash) do
{ ".gitignore-false-false-false" =>
[{ line_code: nil, rich_text: nil, text: "@@ -17,3 +17,4 @@ rerun.txt", type: "match", index: 0, old_pos: 17, new_pos: 17 },
@@ -229,10 +230,10 @@ RSpec.describe Gitlab::Diff::HighlightCache, :clean_gitlab_redis_cache do
end
describe 'metrics' do
- let(:transaction) { Gitlab::Metrics::WebTransaction.new({} ) }
+ let(:transaction) { Gitlab::Metrics::WebTransaction.new({}) }
before do
- allow(cache).to receive(:current_transaction).and_return(transaction)
+ allow(::Gitlab::Metrics::WebTransaction).to receive(:current).and_return(transaction)
end
it 'observes :gitlab_redis_diff_caching_memory_usage_bytes' do
@@ -241,6 +242,18 @@ RSpec.describe Gitlab::Diff::HighlightCache, :clean_gitlab_redis_cache do
cache.write_if_empty
end
+
+ it 'records hit ratio metrics' do
+ expect(transaction)
+ .to receive(:increment).with(:gitlab_redis_diff_caching_requests_total).exactly(5).times
+ expect(transaction)
+ .to receive(:increment).with(:gitlab_redis_diff_caching_hits_total).exactly(4).times
+
+ 5.times do
+ cache = described_class.new(merge_request.diffs)
+ cache.write_if_empty
+ end
+ end
end
describe '#key' do
diff --git a/spec/services/work_items/task_list_reference_removal_service_spec.rb b/spec/services/work_items/task_list_reference_removal_service_spec.rb
index 88fabe5fe40..91b7814ae92 100644
--- a/spec/services/work_items/task_list_reference_removal_service_spec.rb
+++ b/spec/services/work_items/task_list_reference_removal_service_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe WorkItems::TaskListReferenceRemovalService do
let_it_be(:developer) { create(:user) }
let_it_be(:project) { create(:project, :repository).tap { |project| project.add_developer(developer) } }
- let_it_be(:task) { create(:work_item, project: project) }
+ let_it_be(:task) { create(:work_item, project: project, title: 'Task title') }
let_it_be(:single_line_work_item, refind: true) do
create(:work_item, project: project, description: "- [ ] #{task.to_reference}+ single line")
end
@@ -82,7 +82,7 @@ RSpec.describe WorkItems::TaskListReferenceRemovalService do
let(:line_number_end) { 1 }
let(:work_item) { single_line_work_item }
- it_behaves_like 'successful work item task reference removal service', '- [ ] My title 1 single line'
+ it_behaves_like 'successful work item task reference removal service', '- [ ] Task title single line'
context 'when description does not contain a task' do
let_it_be(:no_matching_work_item) { create(:work_item, project: project, description: 'no matching task') }
@@ -103,7 +103,7 @@ RSpec.describe WorkItems::TaskListReferenceRemovalService do
context 'when task mardown spans multiple lines' do
it_behaves_like 'successful work item task reference removal service',
- "Any text\n\n* [ ] Item to be converted\n My title 1 second line\n third line\n* [x] task\n\nMore text"
+ "Any text\n\n* [ ] Item to be converted\n Task title second line\n third line\n* [x] task\n\nMore text"
end
context 'when updating the work item fails' do
diff --git a/spec/tasks/dev_rake_spec.rb b/spec/tasks/dev_rake_spec.rb
index 41728faa0e0..14a5ccfa323 100644
--- a/spec/tasks/dev_rake_spec.rb
+++ b/spec/tasks/dev_rake_spec.rb
@@ -23,7 +23,7 @@ RSpec.describe 'dev rake tasks' do
subject(:setup_task) { run_rake_task('dev:setup') }
- let(:connections) { Gitlab::Database.database_base_models.values.map(&:connection) }
+ let(:connections) { Gitlab::Database.database_base_models_with_gitlab_shared.values.map(&:connection) }
it 'sets up the development environment', :aggregate_failures do
expect(Rake::Task['gitlab:setup']).to receive(:invoke)
@@ -55,7 +55,7 @@ RSpec.describe 'dev rake tasks' do
end
let(:connections) do
- Gitlab::Database.database_base_models.values.filter_map do |model|
+ Gitlab::Database.database_base_models_with_gitlab_shared.values.filter_map do |model|
model.connection if Gitlab::Database.db_config_share_with(model.connection_db_config).nil?
end
end
diff --git a/spec/tasks/gitlab/db_rake_spec.rb b/spec/tasks/gitlab/db_rake_spec.rb
index d8199c09ca1..74bec406947 100644
--- a/spec/tasks/gitlab/db_rake_spec.rb
+++ b/spec/tasks/gitlab/db_rake_spec.rb
@@ -45,7 +45,7 @@ RSpec.describe 'gitlab:db namespace rake task', :silence_stdout do
before do
skip_unless_ci_uses_database_tasks
- allow(Gitlab::Database).to receive(:database_base_models).and_return(base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(base_models)
end
it 'marks the migration complete on each database' do
@@ -90,7 +90,7 @@ RSpec.describe 'gitlab:db namespace rake task', :silence_stdout do
let(:base_models) { { 'main' => main_model } }
before do
- allow(Gitlab::Database).to receive(:database_base_models).and_return(base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(base_models)
end
it 'prints a warning message' do
@@ -110,7 +110,7 @@ RSpec.describe 'gitlab:db namespace rake task', :silence_stdout do
let(:base_models) { { 'main' => main_model } }
before do
- allow(Gitlab::Database).to receive(:database_base_models).and_return(base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(base_models)
end
it 'prints an error and exits' do
@@ -136,6 +136,7 @@ RSpec.describe 'gitlab:db namespace rake task', :silence_stdout do
context 'when geo is not configured' do
before do
allow(ActiveRecord::Base).to receive_message_chain('configurations.configs_for').and_return([main_config])
+ allow(Gitlab::Database).to receive(:has_config?).with(:geo).and_return(false)
end
context 'when the schema is already loaded' do
@@ -260,7 +261,7 @@ RSpec.describe 'gitlab:db namespace rake task', :silence_stdout do
before do
skip_unless_ci_uses_database_tasks
- allow(Gitlab::Database).to receive(:database_base_models).and_return(base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(base_models)
end
context 'when geo is not configured' do
@@ -444,7 +445,7 @@ RSpec.describe 'gitlab:db namespace rake task', :silence_stdout do
before do
skip_unless_ci_uses_database_tasks
- allow(Gitlab::Database).to receive(:database_base_models).and_return(base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(base_models)
allow(main_model.connection).to receive(:table_exists?).with('schema_migrations').and_return(true)
allow(ci_model.connection).to receive(:table_exists?).with('schema_migrations').and_return(true)
@@ -574,7 +575,7 @@ RSpec.describe 'gitlab:db namespace rake task', :silence_stdout do
before do
skip_if_multiple_databases_not_setup
- allow(Gitlab::Database).to receive(:database_base_models).and_return(base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(base_models)
end
it 'delegates to Gitlab::Database::Reindexing without a specific database' do
diff --git a/spec/workers/loose_foreign_keys/cleanup_worker_spec.rb b/spec/workers/loose_foreign_keys/cleanup_worker_spec.rb
index 632e4fb3071..77190dc49d9 100644
--- a/spec/workers/loose_foreign_keys/cleanup_worker_spec.rb
+++ b/spec/workers/loose_foreign_keys/cleanup_worker_spec.rb
@@ -169,7 +169,7 @@ RSpec.describe LooseForeignKeys::CleanupWorker do
let(:expected_connection) { expected_connection_model.constantize.connection }
before do
- allow(Gitlab::Database).to receive(:database_base_models).and_return(database_base_models)
+ allow(Gitlab::Database).to receive(:database_base_models_with_gitlab_shared).and_return(database_base_models)
if database_base_models.has_key?(:ci)
Gitlab::Database::SharedModel.using_connection(database_base_models[:ci].connection) do