Skip to content
Snippets Groups Projects
Verified Commit b33b7be5 authored by Yorick Peterse's avatar Yorick Peterse
Browse files

Handle NULL migration errors in migration helpers

This ensures that whenever changing the NULL constraint of a column
fails we still drop the column.
parent 65df6bcb
No related branches found
No related tags found
No related merge requests found
Loading
@@ -126,6 +126,8 @@ module Gitlab
Loading
@@ -126,6 +126,8 @@ module Gitlab
begin begin
transaction do transaction do
update_column_in_batches(table, column, default) update_column_in_batches(table, column, default)
change_column_null(table, column, false) unless allow_null
end end
# We want to rescue _all_ exceptions here, even those that don't inherit # We want to rescue _all_ exceptions here, even those that don't inherit
# from StandardError. # from StandardError.
Loading
@@ -134,8 +136,6 @@ module Gitlab
Loading
@@ -134,8 +136,6 @@ module Gitlab
   
raise error raise error
end end
change_column_null(table, column, false) unless allow_null
end end
end end
end end
Loading
Loading
Loading
@@ -120,6 +120,19 @@ describe Gitlab::Database::MigrationHelpers, lib: true do
Loading
@@ -120,6 +120,19 @@ describe Gitlab::Database::MigrationHelpers, lib: true do
model.add_column_with_default(:projects, :foo, :integer, default: 10) model.add_column_with_default(:projects, :foo, :integer, default: 10)
end.to raise_error(RuntimeError) end.to raise_error(RuntimeError)
end end
it 'removes the added column whenever changing a column NULL constraint fails' do
expect(model).to receive(:change_column_null).
with(:projects, :foo, false).
and_raise(RuntimeError)
expect(model).to receive(:remove_column).
with(:projects, :foo)
expect do
model.add_column_with_default(:projects, :foo, :integer, default: 10)
end.to raise_error(RuntimeError)
end
end end
   
context 'inside a transaction' do context 'inside a transaction' do
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment