Skip to content

La validation de compte ne fonctionne pas dans le docker #250

Description

@christophe-ramet

/!\ Ce problème pourrait se produire sur un installation non dockerisé aussi /!\

Quand on essaye de lancer la validation d'un compte depuis un UsersHub déployé grace au docker, après un certain temps, on recoit une 500 avec un timeout du worker.

Dans le code de Usershub sources/UsersHub/app/temp_users/routes.py, la methode validate réalise un post vers Usershub.

@routes.route("/validate/<token>/<int:id_application>", methods=["GET"])
@fnauth.check_auth(6)
def validate(token, id_application):
    [...]
    url_validate = (
        current_app.config["URL_APPLICATION"] + "/api_register/valid_temp_user"
    )
    r = req_lib.post(url=url_validate, json=data_to_post, cookies=request.cookies)
    [...]

Si on lance Gunicorn avec plusieurs worker, ce qu'il se passe :

  • Le premier (et seul) worker recoit la demande de validation, il fait une requette à usershub et attends qu'elle termine.
  • Le second worker traite la demande de validation et reponds au premier.

Le problème est que par défaut Gunicorn ne se lance qu'avec un seul worker. Donc personne ne peux traiter la deuxième requette et l'application se trouve donc bloquer jusqu'au timeout.

Solutions :

1 Quickfix

Le quickfix, que tout le monde peut applicer sur son installation est de surcharger la commande lancé par le docker pour lancer plusieurs workers :

    command:
    - gunicorn
    - app.app:create_app()
    - --bind=0.0.0.0:5001
    - --workers=2
    - --access-logfile=-
    - --error-logfile=-
    - --reload
    - --reload-extra-file=config/config.py

2 Solution pérenne

À terme il faut faire en sorte d'appeller la fonction valid_temp_user au lieu d'appeller la route (quite à la modifier).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions