Commit 6e641789 authored by James Lopez's avatar James Lopez

Fix null pipeline problem

parent 4c8d2232
...@@ -136,9 +136,18 @@ module Gitlab ...@@ -136,9 +136,18 @@ module Gitlab
return if tree_hash[relation_key].blank? return if tree_hash[relation_key].blank?
tree_array = [tree_hash[relation_key]].flatten tree_array = [tree_hash[relation_key]].flatten
null_iid_pipelines = []
# Avoid keeping a possible heavy object in memory once we are done with it # Avoid keeping a possible heavy object in memory once we are done with it
while relation_item = tree_array.shift while relation_item = (tree_array.shift || null_iid_pipelines.shift)
if nil_iid_pipeline?(relation_key, relation_item) && tree_array.any?
# Move pipelines with NULL IIDs to the end
# so they don't clash with existing IIDs.
null_iid_pipelines << relation_item
next
end
# The transaction at this level is less speedy than one single transaction # The transaction at this level is less speedy than one single transaction
# But we can't have it in the upper level or GC won't get rid of the AR objects # But we can't have it in the upper level or GC won't get rid of the AR objects
# after we save the batch. # after we save the batch.
...@@ -201,6 +210,10 @@ module Gitlab ...@@ -201,6 +210,10 @@ module Gitlab
def excluded_keys_for_relation(relation) def excluded_keys_for_relation(relation)
reader.attributes_finder.find_excluded_keys(relation) reader.attributes_finder.find_excluded_keys(relation)
end end
def nil_iid_pipeline?(relation_key, relation_item)
relation_key == 'pipelines' && relation_item['iid'].nil?
end
end end
end end
end end
...@@ -86,7 +86,6 @@ module Gitlab ...@@ -86,7 +86,6 @@ module Gitlab
case @relation_name case @relation_name
when :merge_request_diff_files then setup_diff when :merge_request_diff_files then setup_diff
when :notes then setup_note when :notes then setup_note
when 'Ci::Pipeline' then setup_pipeline
end end
update_user_references update_user_references
...@@ -94,6 +93,8 @@ module Gitlab ...@@ -94,6 +93,8 @@ module Gitlab
update_group_references update_group_references
remove_duplicate_assignees remove_duplicate_assignees
setup_pipeline if @relation_name == 'Ci::Pipeline'
reset_tokens! reset_tokens!
remove_encrypted_attributes! remove_encrypted_attributes!
end end
......
...@@ -6143,7 +6143,7 @@ ...@@ -6143,7 +6143,7 @@
"id": 36, "id": 36,
"project_id": 5, "project_id": 5,
"ref": "master", "ref": "master",
"sha": "be93687618e4b132087f430a4d8fc3a609c9b77c", "sha": "sha-notes",
"before_sha": null, "before_sha": null,
"push_data": null, "push_data": null,
"created_at": "2016-03-22T15:20:35.755Z", "created_at": "2016-03-22T15:20:35.755Z",
...@@ -6353,6 +6353,7 @@ ...@@ -6353,6 +6353,7 @@
}, },
{ {
"id": 38, "id": 38,
"iid": 1,
"project_id": 5, "project_id": 5,
"ref": "master", "ref": "master",
"sha": "5f923865dde3436854e9ceb9cdb7815618d4e849", "sha": "5f923865dde3436854e9ceb9cdb7815618d4e849",
......
...@@ -59,7 +59,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do ...@@ -59,7 +59,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
end end
it 'creates a valid pipeline note' do it 'creates a valid pipeline note' do
expect(Ci::Pipeline.first.notes).not_to be_empty expect(Ci::Pipeline.find_by_sha('sha-notes').notes).not_to be_empty
end end
it 'restores pipelines with missing ref' do it 'restores pipelines with missing ref' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment