BigW Consortium Gitlab
1. These changes bring down page load time for 100 issues from more than a minute to about 1.5 seconds. 2. This entire commit is composed of these types of performance enhancements: - Cache relevant data in `IssueMetrics` wherever possible. - Cache relevant data in `MergeRequestMetrics` wherever possible. - Preload metrics 3. Given these improvements, we now only need to make 4 SQL calls: - Load all issues - Load all merge requests - Load all metrics for the issues - Load all metrics for the merge requests 4. A list of all the data points that are now being pre-calculated: a. The first time an issue is mentioned in a commit - In `GitPushService`, find all issues mentioned by the given commit using `ReferenceExtractor`. Set the `first_mentioned_in_commit_at` flag for each of them. - There seems to be a (pre-existing) bug here - files (and therefore commits) created using the Web CI don't have cross-references created, and issues are not closed even when the commit title is "Fixes #xx". b. The first time a merge request is deployed to production When a `Deployment` is created, find all merge requests that were merged in before the deployment, and set the `first_deployed_to_production_at` flag for each of them. c. The start / end time for a merge request pipeline Hook into the `Pipeline` state machine. When the `status` moves to `running`, find the merge requests whose tip commit matches the pipeline, and record the `latest_build_started_at` time for each of them. When the `status` moves to `success`, record the `latest_build_finished_at` time. d. The merge requests that close an issue - This was a big cause of the performance problems we were having with Cycle Analytics. We need to use `ReferenceExtractor` to make this calculation, which is slow when we have to run it on a large number of merge requests. - When a merge request is created, updated, or refreshed, find the issues it closes, and create an instance of `MergeRequestsClosingIssues`, which acts as a join model between merge requests and issues. - If a `MergeRequestsClosingIssues` instance links a merge request and an issue, that issue closes that merge request. 5. The `Queries` module was changed into a class, so we can cache the results of `issues` and `merge_requests_closing_issues` across various cycle analytics stages. 6. The code added in this commit is untested. Tests will be added in the next commit.
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
ci | Loading commit data... | |
concerns | Loading commit data... | |
cycle_analytics | Loading commit data... | |
hooks | Loading commit data... | |
issue | Loading commit data... | |
members | Loading commit data... | |
merge_request | Loading commit data... | |
network | Loading commit data... | |
project_services | Loading commit data... | |
protected_branch | Loading commit data... | |
.gitkeep | Loading commit data... | |
ability.rb | Loading commit data... | |
abuse_report.rb | Loading commit data... | |
appearance.rb | Loading commit data... | |
application_setting.rb | Loading commit data... | |
audit_event.rb | Loading commit data... | |
award_emoji.rb | Loading commit data... | |
blob.rb | Loading commit data... | |
board.rb | Loading commit data... | |
broadcast_message.rb | Loading commit data... | |
commit.rb | Loading commit data... | |
commit_range.rb | Loading commit data... | |
commit_status.rb | Loading commit data... | |
compare.rb | Loading commit data... | |
cycle_analytics.rb | Loading commit data... | |
deploy_key.rb | Loading commit data... | |
deploy_keys_project.rb | Loading commit data... | |
deployment.rb | Loading commit data... | |
diff_note.rb | Loading commit data... | |
discussion.rb | Loading commit data... | |
email.rb | Loading commit data... | |
environment.rb | Loading commit data... | |
event.rb | Loading commit data... | |
external_issue.rb | Loading commit data... | |
forked_project_link.rb | Loading commit data... | |
generic_commit_status.rb | Loading commit data... | |
global_label.rb | Loading commit data... | |
global_milestone.rb | Loading commit data... | |
group.rb | Loading commit data... | |
identity.rb | Loading commit data... | |
issue.rb | Loading commit data... | |
key.rb | Loading commit data... | |
label.rb | Loading commit data... | |
label_link.rb | Loading commit data... | |
legacy_diff_note.rb | Loading commit data... | |
lfs_object.rb | Loading commit data... | |
lfs_objects_project.rb | Loading commit data... | |
list.rb | Loading commit data... | |
member.rb | Loading commit data... | |
merge_request.rb | Loading commit data... | |
merge_request_diff.rb | Loading commit data... | |
merge_requests_closing_issues.rb | Loading commit data... | |
milestone.rb | Loading commit data... | |
namespace.rb | Loading commit data... | |
note.rb | Loading commit data... | |
notification_setting.rb | Loading commit data... | |
oauth_access_token.rb | Loading commit data... | |
personal_access_token.rb | Loading commit data... | |
personal_snippet.rb | Loading commit data... | |
project.rb | Loading commit data... | |
project_feature.rb | Loading commit data... | |
project_group_link.rb | Loading commit data... | |
project_import_data.rb | Loading commit data... | |
project_snippet.rb | Loading commit data... | |
project_team.rb | Loading commit data... | |
project_wiki.rb | Loading commit data... | |
protected_branch.rb | Loading commit data... | |
release.rb | Loading commit data... | |
repository.rb | Loading commit data... | |
security_event.rb | Loading commit data... | |
sent_notification.rb | Loading commit data... | |
service.rb | Loading commit data... | |
snippet.rb | Loading commit data... | |
spam_log.rb | Loading commit data... | |
subscription.rb | Loading commit data... | |
todo.rb | Loading commit data... | |
tree.rb | Loading commit data... | |
u2f_registration.rb | Loading commit data... | |
user.rb | Loading commit data... | |
user_agent_detail.rb | Loading commit data... | |
users_star_project.rb | Loading commit data... | |
wiki_page.rb | Loading commit data... |