| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // Copyright 2022 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package mirror
-
- import (
- "code.gitea.io/gitea/modules/graceful"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/queue"
- "code.gitea.io/gitea/modules/setting"
- )
-
- var mirrorQueue *queue.WorkerPoolQueue[*SyncRequest]
-
- // SyncType type of sync request
- type SyncType int
-
- const (
- // PullMirrorType for pull mirrors
- PullMirrorType SyncType = iota
- // PushMirrorType for push mirrors
- PushMirrorType
- )
-
- // SyncRequest for the mirror queue
- type SyncRequest struct {
- Type SyncType
- ReferenceID int64 // RepoID for pull mirror, MirrorID for push mirror
- }
-
- func queueHandler(items ...*SyncRequest) []*SyncRequest {
- for _, req := range items {
- doMirrorSync(graceful.GetManager().ShutdownContext(), req)
- }
- return nil
- }
-
- // StartSyncMirrors starts a go routine to sync the mirrors
- func StartSyncMirrors() {
- if !setting.Mirror.Enabled {
- return
- }
- mirrorQueue = queue.CreateUniqueQueue(graceful.GetManager().ShutdownContext(), "mirror", queueHandler)
- if mirrorQueue == nil {
- log.Fatal("Unable to create mirror queue")
- }
- go graceful.GetManager().RunWithCancel(mirrorQueue)
- }
-
- // AddPullMirrorToQueue adds repoID to mirror queue
- func AddPullMirrorToQueue(repoID int64) {
- addMirrorToQueue(PullMirrorType, repoID)
- }
-
- // AddPushMirrorToQueue adds the push mirror to the queue
- func AddPushMirrorToQueue(mirrorID int64) {
- addMirrorToQueue(PushMirrorType, mirrorID)
- }
-
- func addMirrorToQueue(syncType SyncType, referenceID int64) {
- if !setting.Mirror.Enabled {
- return
- }
- go func() {
- if err := PushToQueue(syncType, referenceID); err != nil {
- log.Error("Unable to push sync request for to the queue for pull mirror repo[%d]. Error: %v", referenceID, err)
- }
- }()
- }
-
- // PushToQueue adds the sync request to the queue
- func PushToQueue(mirrorType SyncType, referenceID int64) error {
- return mirrorQueue.Push(&SyncRequest{
- Type: mirrorType,
- ReferenceID: referenceID,
- })
- }
|