Start tracking pool repositories
This commit is contained in:
parent
f760c1cd17
commit
270155d655
9 changed files with 80 additions and 0 deletions
22
app/models/pool_repository.rb
Normal file
22
app/models/pool_repository.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class PoolRepository < ActiveRecord::Base
|
||||
POOL_PREFIX = '@pools'
|
||||
|
||||
belongs_to :shard
|
||||
validates :shard, presence: true
|
||||
|
||||
# For now, only pool repositories are tracked in the database. However, we may
|
||||
# want to add other repository types in the future
|
||||
self.table_name = 'repositories'
|
||||
|
||||
has_many :pool_member_projects, class_name: 'Project', foreign_key: :pool_repository_id
|
||||
|
||||
def shard_name
|
||||
shard&.name
|
||||
end
|
||||
|
||||
def shard_name=(name)
|
||||
self.shard = Shard.by_name(name)
|
||||
end
|
||||
end
|
|
@ -124,6 +124,7 @@ class Project < ActiveRecord::Base
|
|||
alias_attribute :title, :name
|
||||
|
||||
# Relations
|
||||
belongs_to :pool_repository
|
||||
belongs_to :creator, class_name: 'User'
|
||||
belongs_to :group, -> { where(type: 'Group') }, foreign_key: 'namespace_id'
|
||||
belongs_to :namespace
|
||||
|
|
5
changelogs/unreleased/52300-pool-repositories.yml
Normal file
5
changelogs/unreleased/52300-pool-repositories.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Start tracking shards and pool repositories in the database
|
||||
merge_request: 22482
|
||||
author:
|
||||
type: other
|
|
@ -1,3 +1,4 @@
|
|||
return unless Shard.connected?
|
||||
return if Gitlab::Database.read_only?
|
||||
|
||||
Shard.populate!
|
||||
|
|
15
db/migrate/20181019032408_add_repositories_table.rb
Normal file
15
db/migrate/20181019032408_add_repositories_table.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddRepositoriesTable < ActiveRecord::Migration
|
||||
DOWNTIME = false
|
||||
|
||||
def change
|
||||
create_table :repositories, id: :bigserial do |t|
|
||||
t.references :shard, null: false, index: true, foreign_key: { on_delete: :restrict }
|
||||
t.string :disk_path, null: false, index: { unique: true }
|
||||
end
|
||||
|
||||
add_column :projects, :pool_repository_id, :bigint
|
||||
add_index :projects, :pool_repository_id, where: 'pool_repository_id IS NOT NULL'
|
||||
end
|
||||
end
|
|
@ -0,0 +1,22 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddProjectsPoolRepositoryIdForeignKey < ActiveRecord::Migration
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
add_concurrent_foreign_key(
|
||||
:projects,
|
||||
:repositories,
|
||||
column: :pool_repository_id,
|
||||
on_delete: :nullify
|
||||
)
|
||||
end
|
||||
|
||||
def down
|
||||
remove_foreign_key(:projects, column: :pool_repository_id)
|
||||
end
|
||||
end
|
12
db/schema.rb
12
db/schema.rb
|
@ -1703,6 +1703,7 @@ ActiveRecord::Schema.define(version: 20181101144347) do
|
|||
t.integer "jobs_cache_index"
|
||||
t.boolean "pages_https_only", default: true
|
||||
t.boolean "remote_mirror_available_overridden"
|
||||
t.integer "pool_repository_id", limit: 8
|
||||
end
|
||||
|
||||
add_index "projects", ["ci_id"], name: "index_projects_on_ci_id", using: :btree
|
||||
|
@ -1719,6 +1720,7 @@ ActiveRecord::Schema.define(version: 20181101144347) do
|
|||
add_index "projects", ["path"], name: "index_projects_on_path", using: :btree
|
||||
add_index "projects", ["path"], name: "index_projects_on_path_trigram", using: :gin, opclasses: {"path"=>"gin_trgm_ops"}
|
||||
add_index "projects", ["pending_delete"], name: "index_projects_on_pending_delete", using: :btree
|
||||
add_index "projects", ["pool_repository_id"], name: "index_projects_on_pool_repository_id", where: "(pool_repository_id IS NOT NULL)", using: :btree
|
||||
add_index "projects", ["repository_storage", "created_at"], name: "idx_project_repository_check_partial", where: "(last_repository_check_at IS NULL)", using: :btree
|
||||
add_index "projects", ["repository_storage"], name: "index_projects_on_repository_storage", using: :btree
|
||||
add_index "projects", ["runners_token"], name: "index_projects_on_runners_token", using: :btree
|
||||
|
@ -1851,6 +1853,14 @@ ActiveRecord::Schema.define(version: 20181101144347) do
|
|||
add_index "remote_mirrors", ["last_successful_update_at"], name: "index_remote_mirrors_on_last_successful_update_at", using: :btree
|
||||
add_index "remote_mirrors", ["project_id"], name: "index_remote_mirrors_on_project_id", using: :btree
|
||||
|
||||
create_table "repositories", id: :bigserial, force: :cascade do |t|
|
||||
t.integer "shard_id", null: false
|
||||
t.string "disk_path", null: false
|
||||
end
|
||||
|
||||
add_index "repositories", ["disk_path"], name: "index_repositories_on_disk_path", unique: true, using: :btree
|
||||
add_index "repositories", ["shard_id"], name: "index_repositories_on_shard_id", using: :btree
|
||||
|
||||
create_table "repository_languages", id: false, force: :cascade do |t|
|
||||
t.integer "project_id", null: false
|
||||
t.integer "programming_language_id", null: false
|
||||
|
@ -2456,6 +2466,7 @@ ActiveRecord::Schema.define(version: 20181101144347) do
|
|||
add_foreign_key "project_import_data", "projects", name: "fk_ffb9ee3a10", on_delete: :cascade
|
||||
add_foreign_key "project_mirror_data", "projects", on_delete: :cascade
|
||||
add_foreign_key "project_statistics", "projects", on_delete: :cascade
|
||||
add_foreign_key "projects", "repositories", column: "pool_repository_id", name: "fk_6e5c14658a", on_delete: :nullify
|
||||
add_foreign_key "prometheus_metrics", "projects", on_delete: :cascade
|
||||
add_foreign_key "protected_branch_merge_access_levels", "protected_branches", name: "fk_8a3072ccb3", on_delete: :cascade
|
||||
add_foreign_key "protected_branch_push_access_levels", "protected_branches", name: "fk_9ffc86a3d9", on_delete: :cascade
|
||||
|
@ -2467,6 +2478,7 @@ ActiveRecord::Schema.define(version: 20181101144347) do
|
|||
add_foreign_key "push_event_payloads", "events", name: "fk_36c74129da", on_delete: :cascade
|
||||
add_foreign_key "releases", "projects", name: "fk_47fe2a0596", on_delete: :cascade
|
||||
add_foreign_key "remote_mirrors", "projects", on_delete: :cascade
|
||||
add_foreign_key "repositories", "shards", on_delete: :restrict
|
||||
add_foreign_key "repository_languages", "projects", on_delete: :cascade
|
||||
add_foreign_key "resource_label_events", "issues", on_delete: :cascade
|
||||
add_foreign_key "resource_label_events", "labels", on_delete: :nullify
|
||||
|
|
|
@ -92,6 +92,7 @@ excluded_attributes:
|
|||
- :path
|
||||
- :namespace_id
|
||||
- :creator_id
|
||||
- :pool_repository_id
|
||||
- :import_url
|
||||
- :import_status
|
||||
- :avatar
|
||||
|
|
|
@ -299,6 +299,7 @@ project:
|
|||
- ci_cd_settings
|
||||
- import_export_upload
|
||||
- repository_languages
|
||||
- pool_repository
|
||||
award_emoji:
|
||||
- awardable
|
||||
- user
|
||||
|
|
Loading…
Reference in a new issue