-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use batch database operations instead of one by one to optimze api pu…
…lls (#32680) Resolve #31492 The response time for the Pull Requests API has improved significantly, dropping from over `2000ms` to about `350ms` on my local machine. It's about `6` times faster. A key area for further optimization lies in batch-fetching data for `apiPullRequest.ChangedFiles, apiPullRequest.Additions, and apiPullRequest.Deletions`. Tests `TestAPIViewPulls` does exist and new tests added. - This PR also fixes some bugs in `GetDiff` functions. - This PR also fixes data inconsistent in test data. For a pull request, the head branch's reference should be equal to the reference in `pull/xxx/head`.
- Loading branch information
Showing
15 changed files
with
566 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
// Copyright 2024 The Gitea Authors. All rights reserved. | ||
// SPDX-License-Identifier: MIT | ||
|
||
package issues_test | ||
|
||
import ( | ||
"testing" | ||
|
||
"code.gitea.io/gitea/models/db" | ||
issues_model "code.gitea.io/gitea/models/issues" | ||
"code.gitea.io/gitea/models/unittest" | ||
|
||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func TestPullRequestList_LoadAttributes(t *testing.T) { | ||
assert.NoError(t, unittest.PrepareTestDatabase()) | ||
|
||
prs := []*issues_model.PullRequest{ | ||
unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 1}), | ||
unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}), | ||
} | ||
assert.NoError(t, issues_model.PullRequestList(prs).LoadAttributes(db.DefaultContext)) | ||
for _, pr := range prs { | ||
assert.NotNil(t, pr.Issue) | ||
assert.Equal(t, pr.IssueID, pr.Issue.ID) | ||
} | ||
|
||
assert.NoError(t, issues_model.PullRequestList([]*issues_model.PullRequest{}).LoadAttributes(db.DefaultContext)) | ||
} | ||
|
||
func TestPullRequestList_LoadReviewCommentsCounts(t *testing.T) { | ||
assert.NoError(t, unittest.PrepareTestDatabase()) | ||
|
||
prs := []*issues_model.PullRequest{ | ||
unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 1}), | ||
unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}), | ||
} | ||
reviewComments, err := issues_model.PullRequestList(prs).LoadReviewCommentsCounts(db.DefaultContext) | ||
assert.NoError(t, err) | ||
assert.Len(t, reviewComments, 2) | ||
for _, pr := range prs { | ||
assert.EqualValues(t, reviewComments[pr.IssueID], 1) | ||
} | ||
} | ||
|
||
func TestPullRequestList_LoadReviews(t *testing.T) { | ||
assert.NoError(t, unittest.PrepareTestDatabase()) | ||
|
||
prs := []*issues_model.PullRequest{ | ||
unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 1}), | ||
unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}), | ||
} | ||
reviewList, err := issues_model.PullRequestList(prs).LoadReviews(db.DefaultContext) | ||
assert.NoError(t, err) | ||
// 1, 7, 8, 9, 10, 22 | ||
assert.Len(t, reviewList, 6) | ||
assert.EqualValues(t, 1, reviewList[0].ID) | ||
assert.EqualValues(t, 7, reviewList[1].ID) | ||
assert.EqualValues(t, 8, reviewList[2].ID) | ||
assert.EqualValues(t, 9, reviewList[3].ID) | ||
assert.EqualValues(t, 10, reviewList[4].ID) | ||
assert.EqualValues(t, 22, reviewList[5].ID) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.