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 'db/fixtures/development/03_project.rb')
-rw-r--r--db/fixtures/development/03_project.rb113
1 files changed, 63 insertions, 50 deletions
diff --git a/db/fixtures/development/03_project.rb b/db/fixtures/development/03_project.rb
index e879db84e68..ae9a17b637c 100644
--- a/db/fixtures/development/03_project.rb
+++ b/db/fixtures/development/03_project.rb
@@ -53,14 +53,56 @@ class Gitlab::Seeder::Projects
public: 1 # 1m projects = 5m total
}
+ BATCH_SIZE = 100_000
+
def seed!
Sidekiq::Testing.inline! do
create_real_projects!
create_large_projects!
- create_mass_projects!
end
end
+ def self.insert_project_namespaces_sql(type:, range:)
+ <<~SQL
+ INSERT INTO namespaces (name, path, parent_id, owner_id, type, visibility_level, created_at, updated_at)
+ SELECT
+ 'Seed project ' || seq || ' ' || ('{#{Gitlab::Seeder::Projects.visibility_per_user}}'::text[])[seq] AS project_name,
+ '#{Gitlab::Seeder::MASS_INSERT_PROJECT_START}' || ('{#{Gitlab::Seeder::Projects.visibility_per_user}}'::text[])[seq] || '_' || seq AS namespace_path,
+ n.id AS parent_id,
+ n.owner_id AS owner_id,
+ 'Project' AS type,
+ ('{#{Gitlab::Seeder::Projects.visibility_level_per_user}}'::int[])[seq] AS visibility_level,
+ NOW() AS created_at,
+ NOW() AS updated_at
+ FROM namespaces n
+ CROSS JOIN generate_series(1, #{Gitlab::Seeder::Projects.projects_per_user_count}) AS seq
+ WHERE type='#{type}' AND path LIKE '#{Gitlab::Seeder::MASS_INSERT_PREFIX}%'
+ AND n.id BETWEEN #{range.first} AND #{range.last}
+ ON CONFLICT DO NOTHING;
+ SQL
+ end
+
+ def self.insert_projects_sql(type:, range:)
+ <<~SQL
+ INSERT INTO projects (name, path, creator_id, namespace_id, project_namespace_id, visibility_level, created_at, updated_at)
+ SELECT
+ n.name AS project_name,
+ n.path AS project_path,
+ n.owner_id AS creator_id,
+ n.parent_id AS namespace_id,
+ n.id AS project_namespace_id,
+ n.visibility_level AS visibility_level,
+ NOW() AS created_at,
+ NOW() AS updated_at
+ FROM namespaces n
+ WHERE type = 'Project' AND n.parent_id IN (
+ SELECT id FROM namespaces n1 WHERE type='#{type}'
+ AND path LIKE '#{Gitlab::Seeder::MASS_INSERT_PREFIX}%' AND n1.id BETWEEN #{range.first} AND #{range.last}
+ )
+ ON CONFLICT DO NOTHING;
+ SQL
+ end
+
private
def create_real_projects!
@@ -156,55 +198,26 @@ class Gitlab::Seeder::Projects
end
end
- def create_mass_projects!
- projects_per_user_count = MASS_PROJECTS_COUNT_PER_USER.values.sum
- visibility_per_user = ['private'] * MASS_PROJECTS_COUNT_PER_USER.fetch(:private) +
- ['internal'] * MASS_PROJECTS_COUNT_PER_USER.fetch(:internal) +
- ['public'] * MASS_PROJECTS_COUNT_PER_USER.fetch(:public)
- visibility_level_per_user = visibility_per_user.map { |visibility| Gitlab::VisibilityLevel.level_value(visibility) }
-
- visibility_per_user = visibility_per_user.join(',')
- visibility_level_per_user = visibility_level_per_user.join(',')
-
- Gitlab::Seeder.with_mass_insert(User.count * projects_per_user_count, "Projects and relations") do
- ActiveRecord::Base.connection.execute <<~SQL
- INSERT INTO projects (name, path, creator_id, namespace_id, visibility_level, created_at, updated_at)
- SELECT
- 'Seed project ' || seq || ' ' || ('{#{visibility_per_user}}'::text[])[seq] AS project_name,
- '#{Gitlab::Seeder::MASS_INSERT_PROJECT_START}' || ('{#{visibility_per_user}}'::text[])[seq] || '_' || seq AS project_path,
- u.id AS user_id,
- n.id AS namespace_id,
- ('{#{visibility_level_per_user}}'::int[])[seq] AS visibility_level,
- NOW() AS created_at,
- NOW() AS updated_at
- FROM users u
- CROSS JOIN generate_series(1, #{projects_per_user_count}) AS seq
- JOIN namespaces n ON n.owner_id=u.id
- SQL
-
- ActiveRecord::Base.connection.execute <<~SQL
- INSERT INTO project_features (project_id, merge_requests_access_level, issues_access_level, wiki_access_level,
- pages_access_level)
- SELECT
- id,
- #{ProjectFeature::ENABLED} AS merge_requests_access_level,
- #{ProjectFeature::ENABLED} AS issues_access_level,
- #{ProjectFeature::ENABLED} AS wiki_access_level,
- #{ProjectFeature::ENABLED} AS pages_access_level
- FROM projects ON CONFLICT (project_id) DO NOTHING;
- SQL
-
- ActiveRecord::Base.connection.execute <<~SQL
- INSERT INTO routes (source_id, source_type, name, path)
- SELECT
- p.id,
- 'Project',
- u.name || ' / ' || p.name,
- u.username || '/' || p.path
- FROM projects p JOIN users u ON u.id=p.creator_id
- ON CONFLICT (source_type, source_id) DO NOTHING;
- SQL
- end
+ def self.projects_per_user_count
+ MASS_PROJECTS_COUNT_PER_USER.values.sum
+ end
+
+ def self.visibility_per_user_array
+ ['private'] * MASS_PROJECTS_COUNT_PER_USER.fetch(:private) +
+ ['internal'] * MASS_PROJECTS_COUNT_PER_USER.fetch(:internal) +
+ ['public'] * MASS_PROJECTS_COUNT_PER_USER.fetch(:public)
+ end
+
+ def self.visibility_level_per_user_map
+ visibility_per_user_array.map { |visibility| Gitlab::VisibilityLevel.level_value(visibility) }
+ end
+
+ def self.visibility_per_user
+ visibility_per_user_array.join(',')
+ end
+
+ def self.visibility_level_per_user
+ visibility_level_per_user_map.join(',')
end
end