Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimizar proceso de creación/actualización de usuarios y resolver race condition #271

Merged
merged 1 commit into from
Sep 23, 2024

Conversation

TextC0de
Copy link
Collaborator

Este PR aborda un problema crítico de race condition en la creación de usuarios y mejora significativamente el performance general de nuestro sistema de gestión de usuarios.

Problema actual:

Actualmente, cuando se realizan múltiples llamadas concurrentes a endpoints autenticados (por ejemplo, usando await Promise.all([...])) para un usuario que se está autenticando por primera vez, puede ocurrir una race condition. Esto resulta en un error de clave duplicada:

(error) 🚨 APPLICATION ERROR of: duplicate key value violates unique constraint "users_email_unique" Internal Server Error

Este error se produce porque múltiples procesos intentan crear el mismo usuario simultáneamente, violando la restricción de unicidad en el email.

Cambios propuestos:

  1. Reemplazar updateUserProfileInfo con upsertUserProfileInfo:

    • Esta nueva función maneja tanto la creación como las actualizaciones de usuarios en una sola operación atómica.
    • Elimina la necesidad de verificar la existencia del usuario antes de decidir si crear o actualizar.
  2. Implementar una operación upsert utilizando onConflictDoUpdate:

    • Esto previene las race conditions durante intentos concurrentes de creación de usuarios.
    • Si un usuario ya existe, la operación se convierte automáticamente en una actualización, evitando así el error de clave duplicada.

Beneficios:

  • Eliminación de errores: Resuelve la race condition que causaba errores de usuarios duplicados.
  • Mejora de performance: Reduce el número de operaciones de base de datos necesarias. Además esta es una operación critica dado que esta operación se realiza en cada request.

Copy link

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 79.86% 13654 / 17097
🔵 Statements 79.86% 13654 / 17097
🔵 Functions 75.14% 381 / 507
🔵 Branches 80.75% 999 / 1237
File CoverageNo changed files found.
Generated in workflow #1167

@TextC0de TextC0de enabled auto-merge (squash) September 17, 2024 13:52
@TextC0de TextC0de merged commit 4ea4e4b into main Sep 23, 2024
6 checks passed
@TextC0de TextC0de deleted the textcode/feat-user-profile-upsert branch September 23, 2024 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants