Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Vosmaer <jacob@gitlab.com>2019-02-05 20:15:22 +0300
committerPaul Okstad <pokstad@gitlab.com>2019-02-05 20:15:22 +0300
commit8ee388b54684b369e0e1a7000c4af5804c6716dc (patch)
treea405986c1783913d78a5729801bd2a9f9ea986b5
parent0471ab52e26f1526dec0e36b57c0058150444c01 (diff)
Use chunker in FindCommits
-rw-r--r--changelogs/unreleased/find-commits-use-chunker.yml5
-rw-r--r--internal/service/commit/find_commits.go42
2 files changed, 25 insertions, 22 deletions
diff --git a/changelogs/unreleased/find-commits-use-chunker.yml b/changelogs/unreleased/find-commits-use-chunker.yml
new file mode 100644
index 000000000..03e955273
--- /dev/null
+++ b/changelogs/unreleased/find-commits-use-chunker.yml
@@ -0,0 +1,5 @@
+---
+title: Use chunker in FindCommits
+merge_request: 1059
+author:
+type: other
diff --git a/internal/service/commit/find_commits.go b/internal/service/commit/find_commits.go
index bd7a178f5..8d4967873 100644
--- a/internal/service/commit/find_commits.go
+++ b/internal/service/commit/find_commits.go
@@ -13,6 +13,7 @@ import (
"gitlab.com/gitlab-org/gitaly/internal/git/catfile"
"gitlab.com/gitlab-org/gitaly/internal/git/log"
"gitlab.com/gitlab-org/gitaly/internal/helper"
+ "gitlab.com/gitlab-org/gitaly/internal/helper/chunk"
)
const commitsPerPage int = 20
@@ -115,40 +116,37 @@ func (g *GetCommits) Commit() (*gitalypb.GitCommit, error) {
return commit, nil
}
+type findCommitsSender struct {
+ stream gitalypb.CommitService_FindCommitsServer
+ commits []*gitalypb.GitCommit
+}
+
+func (s *findCommitsSender) Reset() { s.commits = nil }
+func (s *findCommitsSender) Append(it chunk.Item) {
+ s.commits = append(s.commits, it.(*gitalypb.GitCommit))
+}
+func (s *findCommitsSender) Send() error {
+ return s.stream.Send(&gitalypb.FindCommitsResponse{Commits: s.commits})
+}
+
func streamPaginatedCommits(getCommits *GetCommits, commitsPerPage int, stream gitalypb.CommitService_FindCommitsServer) error {
- var commitPage []*gitalypb.GitCommit
+ chunker := chunk.New(&findCommitsSender{stream: stream})
for getCommits.Scan() {
commit, err := getCommits.Commit()
if err != nil {
return err
}
- commitPage = append(commitPage, commit)
- if len(commitPage) == commitsPerPage {
- if err := stream.Send(
- &gitalypb.FindCommitsResponse{
- Commits: commitPage,
- },
- ); err != nil {
- return fmt.Errorf("error when sending stream response: %v", err)
- }
- commitPage = nil
+
+ if err := chunker.Send(commit); err != nil {
+ return err
}
}
if getCommits.Err() != nil {
return fmt.Errorf("get commits: %v", getCommits.Err())
}
- // send the last page
- if len(commitPage) > 0 {
- if err := stream.Send(
- &gitalypb.FindCommitsResponse{
- Commits: commitPage,
- },
- ); err != nil {
- return fmt.Errorf("error when sending stream response: %v", err)
- }
- }
- return nil
+
+ return chunker.Flush()
}
func getLogCommandFlags(req *gitalypb.FindCommitsRequest) []string {