Replace sync.Map
with normal maps (#18584)
* Replace `sync.Map` with normal maps - These maps aren't being used in any kind of concurrent read/write and thus don't need `sync.Map` and can instead use normal maps. - Special thanks to dachary. - Added in: https://github.com/go-gitea/gitea/pull/6290 * Remove unannounced feature
This commit is contained in:
parent
e2bbbc4876
commit
cafd19c1a3
1 changed files with 20 additions and 35 deletions
|
@ -12,7 +12,6 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"code.gitea.io/gitea/models"
|
"code.gitea.io/gitea/models"
|
||||||
|
@ -42,9 +41,9 @@ type GiteaLocalUploader struct {
|
||||||
repoOwner string
|
repoOwner string
|
||||||
repoName string
|
repoName string
|
||||||
repo *repo_model.Repository
|
repo *repo_model.Repository
|
||||||
labels sync.Map
|
labels map[string]*models.Label
|
||||||
milestones sync.Map
|
milestones map[string]int64
|
||||||
issues sync.Map
|
issues map[int64]*models.Issue
|
||||||
gitRepo *git.Repository
|
gitRepo *git.Repository
|
||||||
prHeadCache map[string]struct{}
|
prHeadCache map[string]struct{}
|
||||||
userMap map[int64]int64 // external user id mapping to user id
|
userMap map[int64]int64 // external user id mapping to user id
|
||||||
|
@ -59,6 +58,9 @@ func NewGiteaLocalUploader(ctx context.Context, doer *user_model.User, repoOwner
|
||||||
doer: doer,
|
doer: doer,
|
||||||
repoOwner: repoOwner,
|
repoOwner: repoOwner,
|
||||||
repoName: repoName,
|
repoName: repoName,
|
||||||
|
labels: make(map[string]*models.Label),
|
||||||
|
milestones: make(map[string]int64),
|
||||||
|
issues: make(map[int64]*models.Issue),
|
||||||
prHeadCache: make(map[string]struct{}),
|
prHeadCache: make(map[string]struct{}),
|
||||||
userMap: make(map[int64]int64),
|
userMap: make(map[int64]int64),
|
||||||
prCache: make(map[int64]*models.PullRequest),
|
prCache: make(map[int64]*models.PullRequest),
|
||||||
|
@ -201,7 +203,7 @@ func (g *GiteaLocalUploader) CreateMilestones(milestones ...*base.Milestone) err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, ms := range mss {
|
for _, ms := range mss {
|
||||||
g.milestones.Store(ms.Name, ms.ID)
|
g.milestones[ms.Name] = ms.ID
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -223,7 +225,7 @@ func (g *GiteaLocalUploader) CreateLabels(labels ...*base.Label) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, lb := range lbs {
|
for _, lb := range lbs {
|
||||||
g.labels.Store(lb.Name, lb)
|
g.labels[lb.Name] = lb
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -333,19 +335,13 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
|
||||||
for _, issue := range issues {
|
for _, issue := range issues {
|
||||||
var labels []*models.Label
|
var labels []*models.Label
|
||||||
for _, label := range issue.Labels {
|
for _, label := range issue.Labels {
|
||||||
lb, ok := g.labels.Load(label.Name)
|
lb, ok := g.labels[label.Name]
|
||||||
if ok {
|
if ok {
|
||||||
labels = append(labels, lb.(*models.Label))
|
labels = append(labels, lb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var milestoneID int64
|
milestoneID := g.milestones[issue.Milestone]
|
||||||
if issue.Milestone != "" {
|
|
||||||
milestone, ok := g.milestones.Load(issue.Milestone)
|
|
||||||
if ok {
|
|
||||||
milestoneID = milestone.(int64)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if issue.Created.IsZero() {
|
if issue.Created.IsZero() {
|
||||||
if issue.Closed != nil {
|
if issue.Closed != nil {
|
||||||
|
@ -404,7 +400,7 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, is := range iss {
|
for _, is := range iss {
|
||||||
g.issues.Store(is.Index, is)
|
g.issues[is.Index] = is
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -416,16 +412,14 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
|
||||||
cms := make([]*models.Comment, 0, len(comments))
|
cms := make([]*models.Comment, 0, len(comments))
|
||||||
for _, comment := range comments {
|
for _, comment := range comments {
|
||||||
var issue *models.Issue
|
var issue *models.Issue
|
||||||
issueInter, ok := g.issues.Load(comment.IssueIndex)
|
issue, ok := g.issues[comment.IssueIndex]
|
||||||
if !ok {
|
if !ok {
|
||||||
var err error
|
var err error
|
||||||
issue, err = models.GetIssueByIndex(g.repo.ID, comment.IssueIndex)
|
issue, err = models.GetIssueByIndex(g.repo.ID, comment.IssueIndex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
g.issues.Store(comment.IssueIndex, issue)
|
g.issues[comment.IssueIndex] = issue
|
||||||
} else {
|
|
||||||
issue = issueInter.(*models.Issue)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if comment.Created.IsZero() {
|
if comment.Created.IsZero() {
|
||||||
|
@ -487,7 +481,7 @@ func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, pr := range gprs {
|
for _, pr := range gprs {
|
||||||
g.issues.Store(pr.Issue.Index, pr.Issue)
|
g.issues[pr.Issue.Index] = pr.Issue
|
||||||
pull.AddToTaskQueue(pr)
|
pull.AddToTaskQueue(pr)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
@ -496,19 +490,13 @@ func (g *GiteaLocalUploader) CreatePullRequests(prs ...*base.PullRequest) error
|
||||||
func (g *GiteaLocalUploader) newPullRequest(pr *base.PullRequest) (*models.PullRequest, error) {
|
func (g *GiteaLocalUploader) newPullRequest(pr *base.PullRequest) (*models.PullRequest, error) {
|
||||||
var labels []*models.Label
|
var labels []*models.Label
|
||||||
for _, label := range pr.Labels {
|
for _, label := range pr.Labels {
|
||||||
lb, ok := g.labels.Load(label.Name)
|
lb, ok := g.labels[label.Name]
|
||||||
if ok {
|
if ok {
|
||||||
labels = append(labels, lb.(*models.Label))
|
labels = append(labels, lb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var milestoneID int64
|
milestoneID := g.milestones[pr.Milestone]
|
||||||
if pr.Milestone != "" {
|
|
||||||
milestone, ok := g.milestones.Load(pr.Milestone)
|
|
||||||
if ok {
|
|
||||||
milestoneID = milestone.(int64)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// download patch file
|
// download patch file
|
||||||
err := func() error {
|
err := func() error {
|
||||||
|
@ -700,18 +688,15 @@ func (g *GiteaLocalUploader) CreateReviews(reviews ...*base.Review) error {
|
||||||
cms := make([]*models.Review, 0, len(reviews))
|
cms := make([]*models.Review, 0, len(reviews))
|
||||||
for _, review := range reviews {
|
for _, review := range reviews {
|
||||||
var issue *models.Issue
|
var issue *models.Issue
|
||||||
issueInter, ok := g.issues.Load(review.IssueIndex)
|
issue, ok := g.issues[review.IssueIndex]
|
||||||
if !ok {
|
if !ok {
|
||||||
var err error
|
var err error
|
||||||
issue, err = models.GetIssueByIndex(g.repo.ID, review.IssueIndex)
|
issue, err = models.GetIssueByIndex(g.repo.ID, review.IssueIndex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
g.issues.Store(review.IssueIndex, issue)
|
g.issues[review.IssueIndex] = issue
|
||||||
} else {
|
|
||||||
issue = issueInter.(*models.Issue)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if review.CreatedAt.IsZero() {
|
if review.CreatedAt.IsZero() {
|
||||||
review.CreatedAt = time.Unix(int64(issue.CreatedUnix), 0)
|
review.CreatedAt = time.Unix(int64(issue.CreatedUnix), 0)
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue