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:
@@ -5,6 +5,7 @@ correspondientes con lo que debe entregar la api, se encarga de casos como
|
|||||||
traducción.
|
traducción.
|
||||||
"""
|
"""
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
from math import ceil
|
from math import ceil
|
||||||
|
|
||||||
from country_list import countries_for_language
|
from country_list import countries_for_language
|
||||||
@@ -14,6 +15,9 @@ from fetcher import jobs
|
|||||||
from utils import get_redis_connection
|
from utils import get_redis_connection
|
||||||
|
|
||||||
|
|
||||||
|
_log = logging.getLogger('fetcher_medium')
|
||||||
|
_log.addHandler(logging.NullHandler())
|
||||||
|
|
||||||
###
|
###
|
||||||
# Utility code
|
# 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
|
# 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
|
# terminan de guardarse, por lo que salto el código de obtención y voy directo a musicbrainz
|
||||||
with get_redis_connection() as redis:
|
with get_redis_connection() as redis:
|
||||||
|
_log.debug('Intentando encontrar en cache los discos de %s', mbid)
|
||||||
key_releases = f'artist:{mbid}:release_groups'
|
key_releases = f'artist:{mbid}:release_groups'
|
||||||
if key_releases in redis:
|
if key_releases in redis:
|
||||||
if int(redis.get(f'{key_releases}:count')) == redis.zcard(key_releases):
|
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)]
|
release_ids = redis.zrange(key_releases, offset, limit)
|
||||||
total = redis.zcard(key_releases)
|
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:
|
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
|
# Si es que no había ningún disco, enviar a cargar al artista, quizás nunca se a guardado
|
||||||
# en cache antes
|
# en cache antes
|
||||||
jobs.load_artist_on_cache.delay(mbid)
|
jobs.load_artist_on_cache.delay(mbid)
|
||||||
@@ -224,6 +242,7 @@ def get_discs_of_artist(mbid, limit, page):
|
|||||||
includes=['artist-credits'],
|
includes=['artist-credits'],
|
||||||
limit=limit, offset=offset)
|
limit=limit, offset=offset)
|
||||||
if 'error' in mb_discs_browse:
|
if 'error' in mb_discs_browse:
|
||||||
|
_log.error('Error al hacer browse %s', mb_discs_browse)
|
||||||
return mb_discs_browse
|
return mb_discs_browse
|
||||||
|
|
||||||
mb_discs = mb_discs_browse.get('release_groups')
|
mb_discs = mb_discs_browse.get('release_groups')
|
||||||
|
|||||||
Reference in New Issue
Block a user