fix(artwork): never sweep files on transient DB errors during prune

This commit is contained in:
Deluan 2026-07-21 23:02:47 -04:00
parent db16b3de9a
commit 3e7685adc2
2 changed files with 25 additions and 1 deletions

View File

@ -2,6 +2,7 @@ package artwork
import (
"context"
"errors"
"time"
"github.com/navidrome/navidrome/core/artwork/originals"
@ -36,7 +37,7 @@ func Prune(ctx context.Context, ds model.DataStore, store *originals.Store) erro
removed, err := store.Sweep(func(hash string) bool {
_, err := repo.Get(hash)
return err == nil
return !errors.Is(err, model.ErrNotFound)
})
if err != nil {
return err

View File

@ -3,6 +3,7 @@ package artwork
import (
"bytes"
"context"
"errors"
"os"
"time"
@ -13,6 +14,14 @@ import (
. "github.com/onsi/gomega"
)
type flakyGetArtworkRepo struct {
*tests.MockArtworkRepo
}
func (f *flakyGetArtworkRepo) Get(string) (*model.Artwork, error) {
return nil, errors.New("db locked")
}
var _ = Describe("Prune", func() {
var ds *tests.MockDataStore
var store *originals.Store
@ -58,4 +67,18 @@ var _ = Describe("Prune", func() {
_, err := store.Open(h, "image/jpeg")
Expect(os.IsNotExist(err)).To(BeTrue())
})
It("never sweeps files on a transient DB error", func() {
ds.MockedArtwork = &flakyGetArtworkRepo{MockArtworkRepo: tests.CreateMockArtworkRepo()}
data := []byte("live-bytes")
h, _ := originals.Hash(bytes.NewReader(data))
Expect(store.Write(h, "image/jpeg", bytes.NewReader(data))).To(Succeed())
Expect(Prune(context.Background(), ds, store)).To(Succeed())
rc, err := store.Open(h, "image/jpeg")
Expect(err).ToNot(HaveOccurred())
rc.Close()
})
})