Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics_spec.rb')
-rw-r--r--spec/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics_spec.rb76
1 files changed, 71 insertions, 5 deletions
diff --git a/spec/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics_spec.rb b/spec/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics_spec.rb
index 86e74cf5177..b8c1ecd9089 100644
--- a/spec/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics_spec.rb
+++ b/spec/lib/gitlab/database/query_analyzers/gitlab_schemas_metrics_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe Gitlab::Database::QueryAnalyzers::GitlabSchemasMetrics, query_ana
process_sql(ActiveRecord::Base, "SELECT 1 FROM projects")
end
- context 'properly observes all queries', :add_ci_connection do
+ context 'properly observes all queries', :add_ci_connection, :request_store do
using RSpec::Parameterized::TableSyntax
where do
@@ -28,7 +28,8 @@ RSpec.describe Gitlab::Database::QueryAnalyzers::GitlabSchemasMetrics, query_ana
expectations: {
gitlab_schemas: "gitlab_main",
db_config_name: "main"
- }
+ },
+ setup: nil
},
"for query accessing gitlab_ci and gitlab_main" => {
model: ApplicationRecord,
@@ -36,7 +37,8 @@ RSpec.describe Gitlab::Database::QueryAnalyzers::GitlabSchemasMetrics, query_ana
expectations: {
gitlab_schemas: "gitlab_ci,gitlab_main",
db_config_name: "main"
- }
+ },
+ setup: nil
},
"for query accessing gitlab_ci and gitlab_main the gitlab_schemas is always ordered" => {
model: ApplicationRecord,
@@ -44,7 +46,8 @@ RSpec.describe Gitlab::Database::QueryAnalyzers::GitlabSchemasMetrics, query_ana
expectations: {
gitlab_schemas: "gitlab_ci,gitlab_main",
db_config_name: "main"
- }
+ },
+ setup: nil
},
"for query accessing CI database" => {
model: Ci::ApplicationRecord,
@@ -53,6 +56,62 @@ RSpec.describe Gitlab::Database::QueryAnalyzers::GitlabSchemasMetrics, query_ana
gitlab_schemas: "gitlab_ci",
db_config_name: "ci"
}
+ },
+ "for query accessing CI database with re-use and disabled sharing" => {
+ model: Ci::ApplicationRecord,
+ sql: "SELECT 1 FROM ci_builds",
+ expectations: {
+ gitlab_schemas: "gitlab_ci",
+ db_config_name: "ci",
+ ci_dedicated_primary_connection: true
+ },
+ setup: ->(_) do
+ skip_if_multiple_databases_not_setup
+ stub_env('GITLAB_LOAD_BALANCING_REUSE_PRIMARY_ci', 'main')
+ stub_feature_flags(force_no_sharing_primary_model: true)
+ end
+ },
+ "for query accessing CI database with re-use and enabled sharing" => {
+ model: Ci::ApplicationRecord,
+ sql: "SELECT 1 FROM ci_builds",
+ expectations: {
+ gitlab_schemas: "gitlab_ci",
+ db_config_name: "ci",
+ ci_dedicated_primary_connection: false
+ },
+ setup: ->(_) do
+ skip_if_multiple_databases_not_setup
+ stub_env('GITLAB_LOAD_BALANCING_REUSE_PRIMARY_ci', 'main')
+ stub_feature_flags(force_no_sharing_primary_model: false)
+ end
+ },
+ "for query accessing CI database without re-use and disabled sharing" => {
+ model: Ci::ApplicationRecord,
+ sql: "SELECT 1 FROM ci_builds",
+ expectations: {
+ gitlab_schemas: "gitlab_ci",
+ db_config_name: "ci",
+ ci_dedicated_primary_connection: true
+ },
+ setup: ->(_) do
+ skip_if_multiple_databases_not_setup
+ stub_env('GITLAB_LOAD_BALANCING_REUSE_PRIMARY_ci', nil)
+ stub_feature_flags(force_no_sharing_primary_model: true)
+ end
+ },
+ "for query accessing CI database without re-use and enabled sharing" => {
+ model: Ci::ApplicationRecord,
+ sql: "SELECT 1 FROM ci_builds",
+ expectations: {
+ gitlab_schemas: "gitlab_ci",
+ db_config_name: "ci",
+ ci_dedicated_primary_connection: true
+ },
+ setup: ->(_) do
+ skip_if_multiple_databases_not_setup
+ stub_env('GITLAB_LOAD_BALANCING_REUSE_PRIMARY_ci', nil)
+ stub_feature_flags(force_no_sharing_primary_model: false)
+ end
}
}
end
@@ -63,8 +122,15 @@ RSpec.describe Gitlab::Database::QueryAnalyzers::GitlabSchemasMetrics, query_ana
end
it do
+ stub_env('GITLAB_LOAD_BALANCING_REUSE_PRIMARY_ci', nil)
+
+ instance_eval(&setup) if setup
+
+ allow(::Ci::ApplicationRecord.load_balancer).to receive(:configuration)
+ .and_return(Gitlab::Database::LoadBalancing::Configuration.for_model(::Ci::ApplicationRecord))
+
expect(described_class.schemas_metrics).to receive(:increment)
- .with(expectations).and_call_original
+ .with({ ci_dedicated_primary_connection: anything }.merge(expectations)).and_call_original
process_sql(model, sql)
end