Backport #19217 If a mirror fails to be synchronised it should be pushed to the bottom of the queue of the awaiting mirrors to be synchronised. At present if there LIMIT number of broken mirrors they can effectively prevent all other mirrors from being synchronized as their last_updated time will remain earlier than other mirrors. Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
540541caa2
commit
2ec2935f78
2 changed files with 11 additions and 0 deletions
|
@ -6,6 +6,7 @@
|
||||||
package repo
|
package repo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
@ -115,6 +116,13 @@ func UpdateMirror(m *Mirror) error {
|
||||||
return updateMirror(db.GetEngine(db.DefaultContext), m)
|
return updateMirror(db.GetEngine(db.DefaultContext), m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TouchMirror updates the mirror updatedUnix
|
||||||
|
func TouchMirror(ctx context.Context, m *Mirror) error {
|
||||||
|
m.UpdatedUnix = timeutil.TimeStampNow()
|
||||||
|
_, err := db.GetEngine(ctx).ID(m.ID).Cols("updated_unix").Update(m)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// DeleteMirrorByRepoID deletes a mirror by repoID
|
// DeleteMirrorByRepoID deletes a mirror by repoID
|
||||||
func DeleteMirrorByRepoID(repoID int64) error {
|
func DeleteMirrorByRepoID(repoID int64) error {
|
||||||
_, err := db.GetEngine(db.DefaultContext).Delete(&Mirror{RepoID: repoID})
|
_, err := db.GetEngine(db.DefaultContext).Delete(&Mirror{RepoID: repoID})
|
||||||
|
|
|
@ -387,6 +387,9 @@ func SyncPullMirror(ctx context.Context, repoID int64) bool {
|
||||||
log.Trace("SyncMirrors [repo: %-v]: Running Sync", m.Repo)
|
log.Trace("SyncMirrors [repo: %-v]: Running Sync", m.Repo)
|
||||||
results, ok := runSync(ctx, m)
|
results, ok := runSync(ctx, m)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
if err = repo_model.TouchMirror(ctx, m); err != nil {
|
||||||
|
log.Error("SyncMirrors [repo: %-v]: failed to TouchMirror: %v", m.Repo, err)
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue