2022-07-08 21:45:12 +02:00
|
|
|
// Copyright 2022 The Gitea Authors. All rights reserved.
|
2022-11-27 19:20:29 +01:00
|
|
|
// SPDX-License-Identifier: MIT
|
2022-07-08 21:45:12 +02:00
|
|
|
|
|
|
|
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.UniqueQueue
|
|
|
|
|
|
|
|
// 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
|
|
|
|
}
|
|
|
|
|
|
|
|
// StartSyncMirrors starts a go routine to sync the mirrors
|
|
|
|
func StartSyncMirrors(queueHandle func(data ...queue.Data) []queue.Data) {
|
|
|
|
if !setting.Mirror.Enabled {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
mirrorQueue = queue.CreateUniqueQueue("mirror", queueHandle, new(SyncRequest))
|
|
|
|
|
|
|
|
go graceful.GetManager().RunWithShutdownFns(mirrorQueue.Run)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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,
|
|
|
|
})
|
|
|
|
}
|