Start tracking pool repositories

This commit is contained in:
Nick Thomas 2018-10-19 04:44:41 +01:00
parent f760c1cd17
commit 270155d655
No known key found for this signature in database
GPG key ID: 2A313A47AFADACE9
9 changed files with 80 additions and 0 deletions

View 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

View file

@ -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

View file

@ -0,0 +1,5 @@
---
title: Start tracking shards and pool repositories in the database
merge_request: 22482
author:
type: other

View file

@ -1,3 +1,4 @@
return unless Shard.connected?
return if Gitlab::Database.read_only?
Shard.populate!

View 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

View file

@ -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

View file

@ -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

View file

@ -92,6 +92,7 @@ excluded_attributes:
- :path
- :namespace_id
- :creator_id
- :pool_repository_id
- :import_url
- :import_status
- :avatar

View file

@ -299,6 +299,7 @@ project:
- ci_cd_settings
- import_export_upload
- repository_languages
- pool_repository
award_emoji:
- awardable
- user