diff options
| author | Sean McGivern <sean@gitlab.com> | 2017-08-18 12:33:29 +0100 |
|---|---|---|
| committer | Sean McGivern <sean@gitlab.com> | 2017-09-29 11:00:19 +0100 |
| commit | 917194153f066556e0ebff92f9c1486144948535 (patch) | |
| tree | 47d3bd5cd0a9bce591bea4cd97be8bf23315e2ee /lib | |
| parent | ccfe6860079c6c75ab5a1f831cd62af0e355331e (diff) | |
| download | gitlab-ce-917194153f066556e0ebff92f9c1486144948535.tar.gz | |
Insert at most 1,000 rows at once in MR diff background migration
We were hitting the statement timeout for very large MR diffs. Now we insert at
most 1,000 rows to `merge_request_diff_commits` in a single statement, or 100
rows to `merge_request_diff_files`.
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits.rb | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits.rb b/lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits.rb index 3fde1b09efb..6f1fd0a333d 100644 --- a/lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits.rb +++ b/lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits.rb @@ -8,6 +8,7 @@ module Gitlab end BUFFER_ROWS = 1000 + DIFF_FILE_BUFFER_ROWS = 100 def perform(start_id, stop_id) merge_request_diffs = MergeRequestDiff @@ -26,7 +27,7 @@ module Gitlab if diff_ids.length > BUFFER_ROWS || commit_rows.length > BUFFER_ROWS || - file_rows.length > BUFFER_ROWS + file_rows.length > DIFF_FILE_BUFFER_ROWS flush_buffers! end @@ -46,8 +47,13 @@ module Gitlab def flush_buffers! if diff_ids.any? MergeRequestDiff.transaction do - Gitlab::Database.bulk_insert('merge_request_diff_commits', commit_rows) - Gitlab::Database.bulk_insert('merge_request_diff_files', file_rows) + commit_rows.each_slice(BUFFER_ROWS).each do |commit_rows_slice| + Gitlab::Database.bulk_insert('merge_request_diff_commits', commit_rows_slice) + end + + file_rows.each_slice(DIFF_FILE_BUFFER_ROWS).each do |file_rows_slice| + Gitlab::Database.bulk_insert('merge_request_diff_files', file_rows_slice) + end MergeRequestDiff.where(id: diff_ids).update_all(st_commits: nil, st_diffs: nil) end |
