Closed mjuez closed 7 years ago
También se calculan mal las estadísticas de los usuarios sobre:
La función map
de javascript es síncrona por defecto, sin embargo, si la función lambda utilizada para procesar cada uno de los elementos es asíncrona provoca que la función map
también lo sea.
Esta situación se daba en la línea 68 del fichero AbstractPersistenceService. El comportamiento deseado es que la función createOrUpdateMultiple
sea una función asíncrona async
que si se llama con await
el flujo del programa se detenga hasta que se complete la función.
Para que ocurra dicho comportamiento, si dentro de la función se realizan operaciones asíncronas se debe indicar que el programa espere a que se completen dichas operaciones, y en este caso faltaba el await en la función (aquí asíncrona) map
:
Incorrecto:
entities.map(async (entity) => { ...
Correcto:
await entities.map(async (entity) => { ...
Esto provocaba que la tarea que obtiene revisiones y actualiza las estadísticas de la pull request, comenzara a contar cuantas revisiones había asociadas a una pull request antes de que todas las revisiones se almacenaran en base de datos, por que aunque en la tarea se especificaba que se debía esperar a que todas las entidades fueran almacenadas, la función que almacenaba todas las entidades no tenía el comportamiento esperado y se resolvía antes de tiempo.
En el momento de obtener datos de GitHub, tareas como la de obtención de revisiones o la de obtención de usuarios hacen un cálculo de estadísticas.
Durante la obtención de las revisiones de una pull request se actualiza la pull request añadiendo un contador de revisiones (GitHub no lo ofrece), pero dicho contador es calculado de forma incorrecta. Por ejemplo el repositorio
elastic/elasticsearch
cuenta con 7695 revisiones, si sumamos el número de revisiones de todas las pull request, obtenemos únicamente 103.