From aa678b80985c5dcb92cef15e19bd963c47a647db Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 5 Sep 2023 18:07:57 +0800 Subject: Move indexer notification to service layer (#26906) Extract from #22266 --- modules/notification/indexer/indexer.go | 123 -------------------------------- modules/notification/notification.go | 2 - routers/init.go | 8 +-- services/indexer/indexer.go | 20 ++++++ services/indexer/notify.go | 123 ++++++++++++++++++++++++++++++++ 5 files changed, 145 insertions(+), 131 deletions(-) delete mode 100644 modules/notification/indexer/indexer.go create mode 100644 services/indexer/indexer.go create mode 100644 services/indexer/notify.go diff --git a/modules/notification/indexer/indexer.go b/modules/notification/indexer/indexer.go deleted file mode 100644 index a18c66edb5..0000000000 --- a/modules/notification/indexer/indexer.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// SPDX-License-Identifier: MIT - -package indexer - -import ( - "context" - - issues_model "code.gitea.io/gitea/models/issues" - repo_model "code.gitea.io/gitea/models/repo" - user_model "code.gitea.io/gitea/models/user" - code_indexer "code.gitea.io/gitea/modules/indexer/code" - issue_indexer "code.gitea.io/gitea/modules/indexer/issues" - stats_indexer "code.gitea.io/gitea/modules/indexer/stats" - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/notification/base" - "code.gitea.io/gitea/modules/repository" - "code.gitea.io/gitea/modules/setting" -) - -type indexerNotifier struct { - base.NullNotifier -} - -var _ base.Notifier = &indexerNotifier{} - -// NewNotifier create a new indexerNotifier notifier -func NewNotifier() base.Notifier { - return &indexerNotifier{} -} - -func (r *indexerNotifier) NotifyAdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { - r.NotifyMigrateRepository(ctx, doer, u, repo) -} - -func (r *indexerNotifier) NotifyCreateIssueComment(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, - issue *issues_model.Issue, comment *issues_model.Comment, mentions []*user_model.User, -) { - issue_indexer.UpdateIssueIndexer(issue.ID) -} - -func (r *indexerNotifier) NotifyNewIssue(ctx context.Context, issue *issues_model.Issue, mentions []*user_model.User) { - issue_indexer.UpdateIssueIndexer(issue.ID) -} - -func (r *indexerNotifier) NotifyNewPullRequest(ctx context.Context, pr *issues_model.PullRequest, mentions []*user_model.User) { - if err := pr.LoadIssue(ctx); err != nil { - log.Error("LoadIssue: %v", err) - return - } - issue_indexer.UpdateIssueIndexer(pr.Issue.ID) -} - -func (r *indexerNotifier) NotifyUpdateComment(ctx context.Context, doer *user_model.User, c *issues_model.Comment, oldContent string) { - if err := c.LoadIssue(ctx); err != nil { - log.Error("LoadIssue: %v", err) - return - } - issue_indexer.UpdateIssueIndexer(c.Issue.ID) -} - -func (r *indexerNotifier) NotifyDeleteComment(ctx context.Context, doer *user_model.User, comment *issues_model.Comment) { - if err := comment.LoadIssue(ctx); err != nil { - log.Error("LoadIssue: %v", err) - return - } - issue_indexer.UpdateIssueIndexer(comment.Issue.ID) -} - -func (r *indexerNotifier) NotifyDeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) { - issue_indexer.DeleteRepoIssueIndexer(ctx, repo.ID) - if setting.Indexer.RepoIndexerEnabled { - code_indexer.UpdateRepoIndexer(repo) - } -} - -func (r *indexerNotifier) NotifyMigrateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { - issue_indexer.UpdateRepoIndexer(ctx, repo.ID) - if setting.Indexer.RepoIndexerEnabled && !repo.IsEmpty { - code_indexer.UpdateRepoIndexer(repo) - } - if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { - log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) - } -} - -func (r *indexerNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { - if !opts.RefFullName.IsBranch() { - return - } - - if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch { - code_indexer.UpdateRepoIndexer(repo) - } - if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { - log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) - } -} - -func (r *indexerNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { - if !opts.RefFullName.IsBranch() { - return - } - - if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch { - code_indexer.UpdateRepoIndexer(repo) - } - if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { - log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) - } -} - -func (r *indexerNotifier) NotifyIssueChangeContent(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldContent string) { - issue_indexer.UpdateIssueIndexer(issue.ID) -} - -func (r *indexerNotifier) NotifyIssueChangeTitle(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldTitle string) { - issue_indexer.UpdateIssueIndexer(issue.ID) -} - -func (r *indexerNotifier) NotifyIssueChangeRef(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldRef string) { - issue_indexer.UpdateIssueIndexer(issue.ID) -} diff --git a/modules/notification/notification.go b/modules/notification/notification.go index 1e22c043a9..093113dcbe 100644 --- a/modules/notification/notification.go +++ b/modules/notification/notification.go @@ -14,7 +14,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/notification/action" "code.gitea.io/gitea/modules/notification/base" - "code.gitea.io/gitea/modules/notification/indexer" "code.gitea.io/gitea/modules/notification/ui" "code.gitea.io/gitea/modules/repository" ) @@ -30,7 +29,6 @@ func RegisterNotifier(notifier base.Notifier) { // NewContext registers notification handlers func NewContext() { RegisterNotifier(ui.NewNotifier()) - RegisterNotifier(indexer.NewNotifier()) RegisterNotifier(action.NewNotifier()) } diff --git a/routers/init.go b/routers/init.go index 020fff31c0..ad7da70718 100644 --- a/routers/init.go +++ b/routers/init.go @@ -15,9 +15,6 @@ import ( "code.gitea.io/gitea/modules/eventsource" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/highlight" - code_indexer "code.gitea.io/gitea/modules/indexer/code" - issue_indexer "code.gitea.io/gitea/modules/indexer/issues" - stats_indexer "code.gitea.io/gitea/modules/indexer/stats" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/markup/external" @@ -41,6 +38,7 @@ import ( "code.gitea.io/gitea/services/auth/source/oauth2" "code.gitea.io/gitea/services/automerge" "code.gitea.io/gitea/services/cron" + indexer_service "code.gitea.io/gitea/services/indexer" "code.gitea.io/gitea/services/mailer" mailer_incoming "code.gitea.io/gitea/services/mailer/incoming" markup_service "code.gitea.io/gitea/services/markup" @@ -143,9 +141,7 @@ func InitWebInstalled(ctx context.Context) { mustInit(repo_service.Init) // Booting long running goroutines. - issue_indexer.InitIssueIndexer(false) - code_indexer.Init() - mustInit(stats_indexer.Init) + mustInit(indexer_service.Init) mirror_service.InitSyncMirrors() mustInit(webhook.Init) diff --git a/services/indexer/indexer.go b/services/indexer/indexer.go new file mode 100644 index 0000000000..d5f31d99ea --- /dev/null +++ b/services/indexer/indexer.go @@ -0,0 +1,20 @@ +// Copyright 2023 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package indexer + +import ( + code_indexer "code.gitea.io/gitea/modules/indexer/code" + issue_indexer "code.gitea.io/gitea/modules/indexer/issues" + stats_indexer "code.gitea.io/gitea/modules/indexer/stats" + "code.gitea.io/gitea/modules/notification" +) + +// Init initialize the repo indexer +func Init() error { + notification.RegisterNotifier(NewNotifier()) + + issue_indexer.InitIssueIndexer(false) + code_indexer.Init() + return stats_indexer.Init() +} diff --git a/services/indexer/notify.go b/services/indexer/notify.go new file mode 100644 index 0000000000..a18c66edb5 --- /dev/null +++ b/services/indexer/notify.go @@ -0,0 +1,123 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// SPDX-License-Identifier: MIT + +package indexer + +import ( + "context" + + issues_model "code.gitea.io/gitea/models/issues" + repo_model "code.gitea.io/gitea/models/repo" + user_model "code.gitea.io/gitea/models/user" + code_indexer "code.gitea.io/gitea/modules/indexer/code" + issue_indexer "code.gitea.io/gitea/modules/indexer/issues" + stats_indexer "code.gitea.io/gitea/modules/indexer/stats" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/notification/base" + "code.gitea.io/gitea/modules/repository" + "code.gitea.io/gitea/modules/setting" +) + +type indexerNotifier struct { + base.NullNotifier +} + +var _ base.Notifier = &indexerNotifier{} + +// NewNotifier create a new indexerNotifier notifier +func NewNotifier() base.Notifier { + return &indexerNotifier{} +} + +func (r *indexerNotifier) NotifyAdoptRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { + r.NotifyMigrateRepository(ctx, doer, u, repo) +} + +func (r *indexerNotifier) NotifyCreateIssueComment(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, + issue *issues_model.Issue, comment *issues_model.Comment, mentions []*user_model.User, +) { + issue_indexer.UpdateIssueIndexer(issue.ID) +} + +func (r *indexerNotifier) NotifyNewIssue(ctx context.Context, issue *issues_model.Issue, mentions []*user_model.User) { + issue_indexer.UpdateIssueIndexer(issue.ID) +} + +func (r *indexerNotifier) NotifyNewPullRequest(ctx context.Context, pr *issues_model.PullRequest, mentions []*user_model.User) { + if err := pr.LoadIssue(ctx); err != nil { + log.Error("LoadIssue: %v", err) + return + } + issue_indexer.UpdateIssueIndexer(pr.Issue.ID) +} + +func (r *indexerNotifier) NotifyUpdateComment(ctx context.Context, doer *user_model.User, c *issues_model.Comment, oldContent string) { + if err := c.LoadIssue(ctx); err != nil { + log.Error("LoadIssue: %v", err) + return + } + issue_indexer.UpdateIssueIndexer(c.Issue.ID) +} + +func (r *indexerNotifier) NotifyDeleteComment(ctx context.Context, doer *user_model.User, comment *issues_model.Comment) { + if err := comment.LoadIssue(ctx); err != nil { + log.Error("LoadIssue: %v", err) + return + } + issue_indexer.UpdateIssueIndexer(comment.Issue.ID) +} + +func (r *indexerNotifier) NotifyDeleteRepository(ctx context.Context, doer *user_model.User, repo *repo_model.Repository) { + issue_indexer.DeleteRepoIssueIndexer(ctx, repo.ID) + if setting.Indexer.RepoIndexerEnabled { + code_indexer.UpdateRepoIndexer(repo) + } +} + +func (r *indexerNotifier) NotifyMigrateRepository(ctx context.Context, doer, u *user_model.User, repo *repo_model.Repository) { + issue_indexer.UpdateRepoIndexer(ctx, repo.ID) + if setting.Indexer.RepoIndexerEnabled && !repo.IsEmpty { + code_indexer.UpdateRepoIndexer(repo) + } + if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { + log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) + } +} + +func (r *indexerNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { + if !opts.RefFullName.IsBranch() { + return + } + + if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch { + code_indexer.UpdateRepoIndexer(repo) + } + if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { + log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) + } +} + +func (r *indexerNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { + if !opts.RefFullName.IsBranch() { + return + } + + if setting.Indexer.RepoIndexerEnabled && opts.RefFullName.BranchName() == repo.DefaultBranch { + code_indexer.UpdateRepoIndexer(repo) + } + if err := stats_indexer.UpdateRepoIndexer(repo); err != nil { + log.Error("stats_indexer.UpdateRepoIndexer(%d) failed: %v", repo.ID, err) + } +} + +func (r *indexerNotifier) NotifyIssueChangeContent(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldContent string) { + issue_indexer.UpdateIssueIndexer(issue.ID) +} + +func (r *indexerNotifier) NotifyIssueChangeTitle(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldTitle string) { + issue_indexer.UpdateIssueIndexer(issue.ID) +} + +func (r *indexerNotifier) NotifyIssueChangeRef(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldRef string) { + issue_indexer.UpdateIssueIndexer(issue.ID) +} -- cgit v1.2.3