Optimize GetArtists: parallel artist processing, batch album upserts, batch download lookups, retry on metadata calls

This commit is contained in:
Alexander
2026-05-10 00:06:58 +02:00
parent 6320f37240
commit f5e2f764b5
4 changed files with 152 additions and 27 deletions
+34
View File
@@ -117,6 +117,40 @@ func (s *MetadataService) PersistAlbum(ctx context.Context, album *metadataPb.Al
s.PersistAlbumForArtist(ctx, album, "", state)
}
func (s *MetadataService) PersistAlbumsForArtist(ctx context.Context, metadataAlbums []*metadataPb.Album, artistDBID string, state database.MonitorState) {
if len(metadataAlbums) == 0 || artistDBID == "" {
return
}
dbAlbums := make([]*database.Album, 0, len(metadataAlbums))
for _, album := range metadataAlbums {
var genres []string
for _, g := range album.GetGenres() {
genres = append(genres, g.GetName())
}
labelName := ""
if album.GetLabel() != nil {
labelName = album.GetLabel().GetName()
}
dbAlbums = append(dbAlbums, &database.Album{
ExternalID: album.GetId(),
ArtistID: artistDBID,
Title: album.GetTitle(),
AlbumType: album.GetAlbumType(),
TotalTracks: int(album.GetTotalTracks()),
TotalDiscs: int(album.GetTotalDiscs()),
Label: labelName,
Genres: genres,
CoverURL: album.GetCoverUrl(),
MonitorState: state,
})
}
if err := s.albums.CreateBatch(ctx, dbAlbums); err != nil {
log.Warn().Err(err).Int("count", len(dbAlbums)).Msg("failed to batch persist albums")
}
}
func (s *MetadataService) PersistAlbumForArtist(ctx context.Context, album *metadataPb.Album, artistDBID string, state database.MonitorState) {
if artistDBID == "" {
if len(album.GetArtists()) > 0 {