summaryrefslogtreecommitdiff
path: root/db/fixtures/development/02_users.rb
diff options
context:
space:
mode:
Diffstat (limited to 'db/fixtures/development/02_users.rb')
-rw-r--r--db/fixtures/development/02_users.rb110
1 files changed, 107 insertions, 3 deletions
diff --git a/db/fixtures/development/02_users.rb b/db/fixtures/development/02_users.rb
index 76a00c18649..ceed0d6d12a 100644
--- a/db/fixtures/development/02_users.rb
+++ b/db/fixtures/development/02_users.rb
@@ -4,8 +4,8 @@ class Gitlab::Seeder::Users
include ActionView::Helpers::NumberHelper
RANDOM_USERS_COUNT = 20
+ MASS_NAMESPACES_COUNT = ENV['CI'] ? 1 : 100
MASS_USERS_COUNT = ENV['CI'] ? 10 : 1_000_000
-
attr_reader :opts
def initialize(opts = {})
@@ -15,6 +15,7 @@ class Gitlab::Seeder::Users
def seed!
Sidekiq::Testing.inline! do
create_mass_users!
+ create_mass_namespaces!
create_random_users!
end
end
@@ -26,20 +27,22 @@ class Gitlab::Seeder::Users
Gitlab::Seeder.with_mass_insert(MASS_USERS_COUNT, User) do
ActiveRecord::Base.connection.execute <<~SQL
- INSERT INTO users (username, name, email, confirmed_at, projects_limit, encrypted_password)
+ INSERT INTO users (username, name, email, state, confirmed_at, projects_limit, encrypted_password)
SELECT
'#{Gitlab::Seeder::MASS_INSERT_USER_START}' || seq,
'Seed user ' || seq,
'seed_user' || seq || '@example.com',
+ 'active',
to_timestamp(seq),
#{MASS_USERS_COUNT},
'#{encrypted_password}'
FROM generate_series(1, #{MASS_USERS_COUNT}) AS seq
+ ON CONFLICT DO NOTHING;
SQL
end
relation = User.where(admin: false)
- Gitlab::Seeder.with_mass_insert(relation.count, Namespace) do
+ Gitlab::Seeder.with_mass_insert(relation.count, 'user namespaces') do
ActiveRecord::Base.connection.execute <<~SQL
INSERT INTO namespaces (name, path, owner_id, type)
SELECT
@@ -48,6 +51,16 @@ class Gitlab::Seeder::Users
id,
'User'
FROM users WHERE NOT admin
+ ON CONFLICT DO NOTHING;
+ SQL
+ end
+
+ Gitlab::Seeder.with_mass_insert(relation.count, "User namespaces routes") do
+ ActiveRecord::Base.connection.execute <<~SQL
+ INSERT INTO routes (namespace_id, source_id, source_type, path, name)
+ SELECT id as namespace_id, id as source_id, 'Namespace', path, name
+ FROM namespaces WHERE type IS NULL OR type = 'User'
+ ON CONFLICT DO NOTHING;
SQL
end
@@ -74,6 +87,97 @@ class Gitlab::Seeder::Users
end
end
+ def create_mass_namespaces!
+ Gitlab::Seeder.with_mass_insert(MASS_NAMESPACES_COUNT, "root namespaces and subgroups 9 levels deep") do
+ ActiveRecord::Base.connection.execute <<~SQL
+ INSERT INTO namespaces (name, path, type)
+ SELECT
+ 'mass insert group level 0 - ' || seq,
+ '#{Gitlab::Seeder::MASS_INSERT_GROUP_START}_0_' || seq,
+ 'Group'
+ FROM generate_series(1, #{MASS_NAMESPACES_COUNT}) AS seq
+ ON CONFLICT DO NOTHING;
+ SQL
+
+ (1..9).each do |idx|
+ count = Namespace.where("path LIKE '#{Gitlab::Seeder::MASS_INSERT_PREFIX}%'").where(type: 'Group').count * 2
+ Gitlab::Seeder.log_message("Creating subgroups at level #{idx}: #{count}")
+ ActiveRecord::Base.connection.execute <<~SQL
+ INSERT INTO namespaces (name, path, type, parent_id)
+ SELECT
+ 'mass insert group level #{idx} - ' || seq,
+ '#{Gitlab::Seeder::MASS_INSERT_GROUP_START}_#{idx}_' || seq,
+ 'Group',
+ namespaces.id
+ FROM namespaces
+ CROSS JOIN generate_series(1, 2) AS seq
+ WHERE namespaces.type='Group' AND namespaces.path like '#{Gitlab::Seeder::MASS_INSERT_GROUP_START}_#{idx-1}_%'
+ ON CONFLICT DO NOTHING;
+ SQL
+ end
+
+ Gitlab::Seeder.log_message("creating routes.")
+ ActiveRecord::Base.connection.execute <<~SQL
+ WITH RECURSIVE cte(source_id, namespace_id, parent_id, path, height) AS (
+ (
+ SELECT ARRAY[batch.id], batch.id, batch.parent_id, batch.path, 1
+ FROM
+ "namespaces" as batch
+ WHERE
+ "batch"."type" = 'Group' AND "batch"."parent_id" is null
+ )
+ UNION
+ (
+ SELECT array_append(cte.source_id, n.id), n.id, n.parent_id, cte.path || '/' || n.path, cte.height+1
+ FROM
+ "namespaces" as n,
+ "cte"
+ WHERE
+ "n"."type" = 'Group'
+ AND "n"."parent_id" = "cte"."namespace_id"
+ )
+ )
+ INSERT INTO routes (namespace_id, source_id, source_type, path, name)
+ SELECT cte.namespace_id as namespace_id, cte.namespace_id as source_id, 'Namespace', cte.path, cte.path FROM cte
+ ON CONFLICT DO NOTHING;
+ SQL
+
+ Gitlab::Seeder.log_message("filling traversal ids.")
+ ActiveRecord::Base.connection.execute <<~SQL
+ WITH RECURSIVE cte(source_id, namespace_id, parent_id) AS (
+ (
+ SELECT ARRAY[batch.id], batch.id, batch.parent_id
+ FROM
+ "namespaces" as batch
+ WHERE
+ "batch"."type" = 'Group' AND "batch"."parent_id" is null
+ )
+ UNION
+ (
+ SELECT array_append(cte.source_id, n.id), n.id, n.parent_id
+ FROM
+ "namespaces" as n,
+ "cte"
+ WHERE
+ "n"."type" = 'Group'
+ AND "n"."parent_id" = "cte"."namespace_id"
+ )
+ )
+ UPDATE namespaces
+ SET traversal_ids = computed.source_id FROM (SELECT namespace_id, source_id FROM cte) AS computed
+ where computed.namespace_id = namespaces.id AND namespaces.path LIKE '#{Gitlab::Seeder::MASS_INSERT_PREFIX}%'
+ SQL
+
+ Gitlab::Seeder.log_message("creating namespace settings.")
+ ActiveRecord::Base.connection.execute <<~SQL
+ INSERT INTO namespace_settings(namespace_id, created_at, updated_at)
+ SELECT id, now(), now() FROM namespaces
+ ON CONFLICT DO NOTHING;
+ SQL
+ end
+ end
+
+
def random_password
@random_password ||= SecureRandom.hex.slice(0,16)
end