diff options
| author | Andreas Brandl <abrandl@gitlab.com> | 2018-03-06 20:09:01 +0100 |
|---|---|---|
| committer | Andreas Brandl <abrandl@gitlab.com> | 2018-03-16 13:35:25 +0100 |
| commit | 754272e392c0da088200a1b56156600973f63267 (patch) | |
| tree | 21fdb2f633deff884d39d89f7672f230f1d6c143 /db/migrate | |
| parent | a0abb904782970de456dae5539ad5de2afef0e05 (diff) | |
| download | gitlab-ce-754272e392c0da088200a1b56156600973f63267.tar.gz | |
Atomic generation of internal ids for issues.
Diffstat (limited to 'db/migrate')
| -rw-r--r-- | db/migrate/20180305095250_create_internal_ids_table.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/db/migrate/20180305095250_create_internal_ids_table.rb b/db/migrate/20180305095250_create_internal_ids_table.rb new file mode 100644 index 00000000000..19c1904bb43 --- /dev/null +++ b/db/migrate/20180305095250_create_internal_ids_table.rb @@ -0,0 +1,35 @@ +class CreateInternalIdsTable < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + create_table :internal_ids do |t| + t.references :project + t.integer :usage, null: false + t.integer :last_value, null: false + end + + unless index_exists?(:internal_ids, [:usage, :project_id]) + add_index :internal_ids, [:usage, :project_id], unique: true + end + + unless foreign_key_exists?(:internal_ids, :project_id) + add_concurrent_foreign_key :internal_ids, :projects, column: :project_id, on_delete: :cascade + end + end + + def down + drop_table :internal_ids + end + + private + + def foreign_key_exists?(table, column) + foreign_keys(table).any? do |key| + key.options[:column] == column.to_s + end + end +end |
