1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-09-01 07:26:37 +00:00

Merge same repo once and check fs object is valid (#578)

Co-authored-by: 杨赫然 <heran.yang@seafile.com>
This commit is contained in:
feiniks
2022-09-28 16:43:07 +08:00
committed by GitHub
parent 550e75cb0b
commit 04350f2b99
8 changed files with 127 additions and 46 deletions

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"path/filepath"
"strings"
"sync"
"time"
"math/rand"
@@ -21,6 +22,9 @@ const mergeVirtualRepoWorkerNumber = 5
var mergeVirtualRepoPool *workerpool.WorkPool
var runningRepo = make(map[string]struct{})
var runningRepoMutex sync.Mutex
func virtualRepoInit() {
mergeVirtualRepoPool = workerpool.CreateWorkerPool(mergeVirtualRepo, mergeVirtualRepoWorkerNumber)
}
@@ -36,10 +40,23 @@ func mergeVirtualRepo(args ...interface{}) error {
}
if virtual {
runningRepoMutex.Lock()
if _, ok := runningRepo[repoID]; ok {
log.Debugf("a task for repo %s is already running", repoID)
go mergeVirtualRepoPool.AddTask(repoID)
runningRepoMutex.Unlock()
return nil
}
runningRepo[repoID] = struct{}{}
runningRepoMutex.Unlock()
err := mergeRepo(repoID)
if err != nil {
log.Printf("%v", err)
}
runningRepoMutex.Lock()
delete(runningRepo, repoID)
runningRepoMutex.Unlock()
go updateSizePool.AddTask(repoID)
@@ -55,11 +72,23 @@ func mergeVirtualRepo(args ...interface{}) error {
if id == excludeRepo {
continue
}
runningRepoMutex.Lock()
if _, ok := runningRepo[id]; ok {
log.Debugf("a task for repo %s is already running", id)
go mergeVirtualRepoPool.AddTask(id)
runningRepoMutex.Unlock()
continue
}
runningRepo[id] = struct{}{}
runningRepoMutex.Unlock()
err := mergeRepo(id)
if err != nil {
log.Printf("%v", err)
}
runningRepoMutex.Lock()
delete(runningRepo, id)
runningRepoMutex.Unlock()
}
go updateSizePool.AddTask(repoID)