Arreglada race condition de get_discs_of_artist

Ademas hice algo inteligente y agrege logs a la funcion, es mas facil
ver que carajo paso
This commit is contained in:
Daniel Cortes
2020-06-10 05:28:00 -04:00
parent 2a639f557f
commit 1d4c5f28ac

View File

@@ -5,6 +5,7 @@ correspondientes con lo que debe entregar la api, se encarga de casos como
traducción.
"""
import json
import logging
from math import ceil
from country_list import countries_for_language
@@ -14,6 +15,9 @@ from fetcher import jobs
from utils import get_redis_connection
_log = logging.getLogger('fetcher_medium')
_log.addHandler(logging.NullHandler())
###
# Utility code
###
@@ -209,13 +213,27 @@ def get_discs_of_artist(mbid, limit, page):
# Si es que coinciden significa que se cargaron todos los discos, pero si no, quizás aun no
# terminan de guardarse, por lo que salto el código de obtención y voy directo a musicbrainz
with get_redis_connection() as redis:
_log.debug('Intentando encontrar en cache los discos de %s', mbid)
key_releases = f'artist:{mbid}:release_groups'
if key_releases in redis:
if int(redis.get(f'{key_releases}:count')) == redis.zcard(key_releases):
mb_discs = [get_disc(mbid) for mbid in redis.zrange(key_releases, offset, limit)]
total = redis.zcard(key_releases)
release_ids = redis.zrange(key_releases, offset, limit)
keys = [f'release_group:{mbid}' for mbid in release_ids]
if redis.exists(*keys) == len(release_ids):
_log.debug('Encontrados los discos de %s', mbid)
mb_discs = [get_disc(mbid) for mbid in release_ids]
total = redis.zcard(key_releases)
else:
_log.debug('Aun no se cargan todas las release_groups de %s', mbid)
else:
_log.debug('La cantidad de release_groups que hay almacenadas para %s no coinciden '
'con las totales', key_releases)
else:
_log.debug('%s no se encontraba en redis, saltando código', key_releases)
if len(mb_discs) == 0:
_log.debug('Cargar desde musicbrainz las releases de %s', mbid)
# Si es que no había ningún disco, enviar a cargar al artista, quizás nunca se a guardado
# en cache antes
jobs.load_artist_on_cache.delay(mbid)
@@ -224,6 +242,7 @@ def get_discs_of_artist(mbid, limit, page):
includes=['artist-credits'],
limit=limit, offset=offset)
if 'error' in mb_discs_browse:
_log.error('Error al hacer browse %s', mb_discs_browse)
return mb_discs_browse
mb_discs = mb_discs_browse.get('release_groups')