fix(server/m7-353): log retry-missing errors + tighten 404 test + cover EnrichRetryMissing
This commit is contained in:
@@ -144,7 +144,10 @@ func (e *Enricher) EnrichRetryMissing(ctx context.Context, limit int) (int, erro
|
|||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
return processed, ctx.Err()
|
return processed, ctx.Err()
|
||||||
}
|
}
|
||||||
_ = e.EnrichAlbum(ctx, r.ID)
|
if err := e.EnrichAlbum(ctx, r.ID); err != nil {
|
||||||
|
e.logger.Warn("coverart: retry-missing entry failed",
|
||||||
|
"album_id", uuidString(r.ID), "err", err)
|
||||||
|
}
|
||||||
processed++
|
processed++
|
||||||
}
|
}
|
||||||
return processed, nil
|
return processed, nil
|
||||||
|
|||||||
@@ -164,7 +164,9 @@ func TestEnrichAlbum_MBCAA404_RecordsNone(t *testing.T) {
|
|||||||
|
|
||||||
f := NewFetcher(FetcherConfig{BaseURL: upstream.URL, UserAgent: "test", MinPeriod: 0, HTTPClient: upstream.Client()})
|
f := NewFetcher(FetcherConfig{BaseURL: upstream.URL, UserAgent: "test", MinPeriod: 0, HTTPClient: upstream.Client()})
|
||||||
e := NewEnricher(pool, discardLogger(), f, true)
|
e := NewEnricher(pool, discardLogger(), f, true)
|
||||||
_ = e.EnrichAlbum(context.Background(), id)
|
if err := e.EnrichAlbum(context.Background(), id); err != nil {
|
||||||
|
t.Fatalf("enrich: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
row, err := dbq.New(pool).GetAlbumWithFirstTrackPath(context.Background(), id)
|
row, err := dbq.New(pool).GetAlbumWithFirstTrackPath(context.Background(), id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -267,3 +269,62 @@ func TestRetryAlbum_DeletesMbcaaFileAndRefetches(t *testing.T) {
|
|||||||
t.Errorf("source after retry = %v, want 'mbcaa'", row.CoverArtSource)
|
t.Errorf("source after retry = %v, want 'mbcaa'", row.CoverArtSource)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEnrichRetryMissing_DrainsNullAndNone(t *testing.T) {
|
||||||
|
pool := newPool(t)
|
||||||
|
// Three albums:
|
||||||
|
// id1: NULL source, has sidecar → drains, becomes 'sidecar'.
|
||||||
|
// id2: 'none' source, has sidecar → cleared then drained, becomes 'sidecar'.
|
||||||
|
// id3: 'sidecar' source already → NOT touched.
|
||||||
|
id1, dir1 := seedAlbumWithTrack(t, pool, "RM1", "A", "")
|
||||||
|
if err := os.WriteFile(filepath.Join(dir1, "cover.jpg"), []byte("c1"), 0o644); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id2, dir2 := seedAlbumWithTrack(t, pool, "RM2", "B", "")
|
||||||
|
if err := os.WriteFile(filepath.Join(dir2, "cover.jpg"), []byte("c2"), 0o644); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
none := "none"
|
||||||
|
if err := dbq.New(pool).SetAlbumCover(context.Background(), dbq.SetAlbumCoverParams{
|
||||||
|
ID: id2, Column2: "", CoverArtSource: &none,
|
||||||
|
}); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id3, dir3 := seedAlbumWithTrack(t, pool, "RM3", "C", "")
|
||||||
|
if err := os.WriteFile(filepath.Join(dir3, "cover.jpg"), []byte("c3"), 0o644); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
sidecar := "sidecar"
|
||||||
|
preservedPath := filepath.Join(dir3, "cover.jpg")
|
||||||
|
if err := dbq.New(pool).SetAlbumCover(context.Background(), dbq.SetAlbumCoverParams{
|
||||||
|
ID: id3, Column2: preservedPath, CoverArtSource: &sidecar,
|
||||||
|
}); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
e := NewEnricher(pool, discardLogger(), nil, false)
|
||||||
|
processed, err := e.EnrichRetryMissing(context.Background(), 100)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("retry missing: %v", err)
|
||||||
|
}
|
||||||
|
if processed != 2 {
|
||||||
|
t.Errorf("processed = %d, want 2 (id1 NULL + id2 'none'; id3 already 'sidecar' not touched)", processed)
|
||||||
|
}
|
||||||
|
|
||||||
|
q := dbq.New(pool)
|
||||||
|
for _, c := range []struct {
|
||||||
|
id pgtype.UUID
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{id1, "sidecar"},
|
||||||
|
{id2, "sidecar"},
|
||||||
|
{id3, "sidecar"},
|
||||||
|
} {
|
||||||
|
row, _ := q.GetAlbumWithFirstTrackPath(context.Background(), c.id)
|
||||||
|
if row.CoverArtSource == nil || *row.CoverArtSource != c.want {
|
||||||
|
t.Errorf("album %v source = %v, want %q", c.id, row.CoverArtSource, c.want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user