Skip to content
代码片段 群组 项目
提交 2aa0b877 编辑于 作者: Marius Bobin's avatar Marius Bobin 提交者: Simon Tomlinson
浏览文件

Enable partitioned query analyzers for ci_builds

上级 784401ac
No related branches found
No related tags found
无相关合并请求
显示
35 个添加26 个删除
......@@ -53,7 +53,7 @@ def artifacts_available?
end
class CiBuild < ::Ci::ApplicationRecord # rubocop:disable Style/Documentation
self.table_name = 'ci_builds'
self.table_name = 'p_ci_builds'
self.inheritance_column = :_type_disabled
self.primary_key = :id
......
......@@ -6,7 +6,7 @@
let(:namespaces) { table(:namespaces) }
let(:projects) { table(:projects) }
let(:pipelines) { table(:ci_pipelines, database: :ci) }
let(:builds) { table(:ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:builds) { table(:p_ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:security_scans) { table(:security_scans) }
let(:namespace) { namespaces.create!(name: "foo", path: "bar") }
......
......@@ -37,7 +37,7 @@
let(:vulnerability_state_transitions) { table(:vulnerability_state_transitions) }
let(:security_scans) { table(:security_scans) }
let(:security_findings) { table(:security_findings) }
let(:ci_builds) { table(:ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:ci_builds) { table(:p_ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:ci_job_artifacts) { table(:ci_job_artifacts, database: :ci) }
let(:ci_pipelines) { table(:ci_pipelines, database: :ci) }
......
......@@ -3,7 +3,8 @@
require 'spec_helper'
RSpec.describe Gitlab::BackgroundMigration::PurgeStaleSecurityScans,
:suppress_gitlab_schemas_validate_connection, schema: 20220407163559 do
:suppress_partitioning_routing_analyzer, :suppress_gitlab_schemas_validate_connection,
schema: 20220407163559 do
let(:namespaces) { table(:namespaces) }
let(:projects) { table(:projects) }
let(:pipelines) { table(:ci_pipelines) }
......
......@@ -31,7 +31,7 @@
let(:vulnerability_feedback) { table(:vulnerability_feedback) }
let(:security_scans) { table(:security_scans) }
let(:security_findings) { table(:security_findings) }
let(:ci_builds) { table(:ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:ci_builds) { table(:p_ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:ci_pipelines) { table(:ci_pipelines, database: :ci) }
let(:ci_job_artifacts) { table(:ci_job_artifacts, database: :ci) }
......
......@@ -8,7 +8,7 @@ module Ci
class PartitioningRoutingAnalyzer < Database::QueryAnalyzers::Base
RoutingTableNotUsedError = Class.new(QueryAnalyzerError)
ENABLED_TABLES = %w[ci_builds_metadata].freeze
ENABLED_TABLES = %w[ci_builds ci_builds_metadata].freeze
class << self
def enabled?
......
......@@ -7,7 +7,7 @@
describe '#perform' do
let(:job_artifact) { table(:ci_job_artifacts, database: :ci) }
let(:jobs) { table(:ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:jobs) { table(:p_ci_builds, database: :ci) { |model| model.primary_key = :id } }
let(:test_worker) do
described_class.new(
......
......@@ -31,7 +31,7 @@
# establish connection
ApplicationRecord.connection.select_one("SELECT 1 FROM projects LIMIT 1")
Ci::ApplicationRecord.connection.select_one("SELECT 1 FROM ci_builds LIMIT 1")
Ci::ApplicationRecord.connection.select_one("SELECT 1 FROM p_ci_builds LIMIT 1")
end
expect(new_handler).not_to eq(original_handler), "is reconnected"
......
......@@ -35,7 +35,7 @@
},
"for query accessing gitlab_ci and gitlab_main" => {
model: ApplicationRecord,
sql: "SELECT 1 FROM projects LEFT JOIN ci_builds ON ci_builds.project_id=projects.id",
sql: "SELECT 1 FROM projects LEFT JOIN p_ci_builds ON p_ci_builds.project_id=projects.id",
expectations: {
gitlab_schemas: "gitlab_ci,gitlab_main_cell",
db_config_name: "main"
......@@ -43,7 +43,7 @@
},
"for query accessing gitlab_ci and gitlab_main the gitlab_schemas is always ordered" => {
model: ApplicationRecord,
sql: "SELECT 1 FROM ci_builds LEFT JOIN projects ON ci_builds.project_id=projects.id",
sql: "SELECT 1 FROM p_ci_builds LEFT JOIN projects ON p_ci_builds.project_id=projects.id",
expectations: {
gitlab_schemas: "gitlab_ci,gitlab_main_cell",
db_config_name: "main"
......@@ -51,7 +51,7 @@
},
"for query accessing CI database" => {
model: Ci::ApplicationRecord,
sql: "SELECT 1 FROM ci_builds",
sql: "SELECT 1 FROM p_ci_builds",
expectations: {
gitlab_schemas: "gitlab_ci",
db_config_name: "ci"
......
......@@ -26,14 +26,14 @@
},
"for query accessing gitlab_ci and gitlab_main" => {
model: ApplicationRecord,
sql: "SELECT 1 FROM projects LEFT JOIN ci_builds ON ci_builds.project_id=projects.id",
expect_error: /The query tried to access \["projects", "ci_builds"\]/,
sql: "SELECT 1 FROM projects LEFT JOIN p_ci_builds ON p_ci_builds.project_id=projects.id",
expect_error: /The query tried to access \["projects", "p_ci_builds"\]/,
setup: -> (_) { skip_if_shared_database(:ci) }
},
"for query accessing gitlab_ci and gitlab_main the gitlab_schemas is always ordered" => {
model: ApplicationRecord,
sql: "SELECT 1 FROM ci_builds LEFT JOIN projects ON ci_builds.project_id=projects.id",
expect_error: /The query tried to access \["ci_builds", "projects"\]/,
sql: "SELECT 1 FROM p_ci_builds LEFT JOIN projects ON p_ci_builds.project_id=projects.id",
expect_error: /The query tried to access \["p_ci_builds", "projects"\]/,
setup: -> (_) { skip_if_shared_database(:ci) }
},
"for query accessing main table from CI database" => {
......@@ -44,13 +44,13 @@
},
"for query accessing CI database" => {
model: Ci::ApplicationRecord,
sql: "SELECT 1 FROM ci_builds",
sql: "SELECT 1 FROM p_ci_builds",
expect_error: nil
},
"for query accessing CI table from main database" => {
model: ::ApplicationRecord,
sql: "SELECT 1 FROM ci_builds",
expect_error: /The query tried to access \["ci_builds"\]/,
sql: "SELECT 1 FROM p_ci_builds",
expect_error: /The query tried to access \["p_ci_builds"\]/,
setup: -> (_) { skip_if_shared_database(:ci) }
},
"for query accessing unknown gitlab_schema" => {
......@@ -89,7 +89,7 @@
it "throws an error when trying to access a table that belongs to the gitlab_ci schema from the main database" do
expect do
ApplicationRecord.connection.execute("select * from ci_builds limit 1")
ApplicationRecord.connection.execute("select * from p_ci_builds limit 1")
end.to raise_error(Gitlab::Database::QueryAnalyzers::GitlabSchemasValidateConnection::CrossSchemaAccessError)
end
end
......
......@@ -4,20 +4,21 @@
require_migration!
RSpec.describe ScheduleFixingSecurityScanStatuses,
:suppress_gitlab_schemas_validate_connection, feature_category: :vulnerability_management do
:suppress_gitlab_schemas_validate_connection, :suppress_partitioning_routing_analyzer,
feature_category: :vulnerability_management do
let!(:namespaces) { table(:namespaces) }
let!(:projects) { table(:projects) }
let!(:pipelines) { table(:ci_pipelines) }
let!(:builds) { table(:ci_builds) }
let!(:pipelines) { table(:ci_pipelines, database: :ci) }
let!(:builds) { table(:ci_builds, database: :ci) { |model| model.primary_key = :id } }
let!(:security_scans) { table(:security_scans) }
let!(:namespace) { namespaces.create!(name: "foo", path: "bar") }
let!(:project) { projects.create!(namespace_id: namespace.id, project_namespace_id: namespace.id) }
let!(:pipeline) do
pipelines.create!(project_id: project.id, ref: 'master', sha: 'adf43c3a', status: 'success', partition_id: 1)
pipelines.create!(project_id: project.id, ref: 'master', sha: 'adf43c3a', status: 'success', partition_id: 100)
end
let!(:ci_build) { builds.create!(commit_id: pipeline.id, retried: false, type: 'Ci::Build', partition_id: 1) }
let!(:ci_build) { builds.create!(commit_id: pipeline.id, retried: false, type: 'Ci::Build', partition_id: 100) }
let!(:security_scan_1) { security_scans.create!(build_id: ci_build.id, scan_type: 1, created_at: 91.days.ago) }
let!(:security_scan_2) { security_scans.create!(build_id: ci_build.id, scan_type: 2) }
......
# frozen_string_literal: true
RSpec.configure do |config|
config.around(:each, :suppress_partitioning_routing_analyzer) do |example|
Gitlab::Database::QueryAnalyzers::Ci::PartitioningRoutingAnalyzer.with_suppressed(&example)
end
end
......@@ -55,7 +55,7 @@
end
it 'create a class based on the CI base model' do
klass = helper.table(:ci_builds, database: :ci)
klass = helper.table(:p_ci_builds, database: :ci) { |model| model.primary_key = :id }
expect(klass.connection_specification_name).to eq('Ci::ApplicationRecord')
end
end
......@@ -66,7 +66,7 @@
end
it 'creates a class based on main base model' do
klass = helper.table(:ci_builds, database: :ci)
klass = helper.table(:p_ci_builds, database: :ci) { |model| model.primary_key = :id }
expect(klass.connection_specification_name).to eq('ActiveRecord::Base')
end
end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册