Use mutex for batch fingerprint submissions

This commit is contained in:
InfiniteStash 2026-05-02 09:35:56 +02:00
parent afd2a5d5b8
commit 9690928b76

View file

@ -4,6 +4,7 @@ import (
"context"
"fmt"
"strconv"
"sync"
"time"
"github.com/stashapp/stash/internal/manager"
@ -14,6 +15,8 @@ import (
"github.com/stashapp/stash/pkg/stashbox"
)
var fingerprintSubmissionMu sync.Mutex
func (r *mutationResolver) SubmitStashBoxFingerprints(ctx context.Context, input StashBoxFingerprintSubmissionInput) (bool, error) {
b, err := resolveStashBox(input.StashBoxIndex, input.StashBoxEndpoint) //nolint:staticcheck
if err != nil {
@ -303,7 +306,13 @@ func (r *mutationResolver) SubmitFingerprintSubmissions(ctx context.Context, sta
if len(submissions) > 40 {
// Submit async to avoid timeouts for large batches
go r.submitFingerprintBatch(client, submissions, sceneMap)
if !fingerprintSubmissionMu.TryLock() {
return false, fmt.Errorf("fingerprint submission already in progress")
}
go func() {
defer fingerprintSubmissionMu.Unlock()
r.submitFingerprintBatch(client, submissions, sceneMap)
}()
} else {
r.submitFingerprintBatch(client, submissions, sceneMap)
}