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

MEG - VSR problèmes de redémarrage de service #246

Closed
lecault opened this issue Jun 14, 2023 · 11 comments
Closed

MEG - VSR problèmes de redémarrage de service #246

lecault opened this issue Jun 14, 2023 · 11 comments
Assignees
Milestone

Comments

@lecault
Copy link
Collaborator

lecault commented Jun 14, 2023

J'ai des soucis pour redémarrer mon service. J'y arrive au bout d'un moment.

A spécifier...

@lecault lecault self-assigned this Jun 14, 2023
@Gaetanbrl
Copy link
Member

J'ai déjà parlé de ce problème rencontré avec gunicorn. De mon côté je constate qu'il ne démarre pas en raison de git qui est encore en train d'écrire.

Plusieurs restart permettent de démarrer le service prod.

C'est documenté ici :

https://github.com/jdev-org/mviewerstudio/blob/c852adce6d3b54ce3d4bda463c2639363b0ad981/docs/doc_tech/install_python.rst?plain=1#L272-L275

@Gaetanbrl
Copy link
Member

Gaetanbrl commented Jun 14, 2023

Il manque peut être des options au script du service gunicorn pour un stop / restart propre. A voir selon la doc gunicorn (@spelhate si tu as une idée ?)

https://docs.gunicorn.org/en/latest/deploy.html

@spelhate
Copy link
Collaborator

Peut être qu'il faut stopper le process git avant de restart ?

@spelhate
Copy link
Collaborator

spelhate commented Jun 14, 2023

Sinon en adaptant le service avec ce type de paramétrage :

[Unit]
Description=Your Daemon Name
StartLimitIntervalSec=60
StartLimitBurst=5


[Service]
ExecStart=/path/to/executable
Restart=on-failure
RestartSec=10s

[Install]
WantedBy=multi-user.target

@Gaetanbrl
Copy link
Member

On va regarder avec @pierrejego, merci pour les suggestions @spelhate

@lecault
Copy link
Collaborator Author

lecault commented Jun 22, 2023

Alors suite à un redémarrage infructueux, j'ai l'erreur ci-dessous. En redémarrant plusieurs fois, ça passe.

Le log en question :

[2023-06-22 15:02:18 +0200] [18381] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/.venv/lib/python3.9/site-packages/gunicorn/arbiter.py", line 589, in spawn_worker
    worker.init_process()
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/.venv/lib/python3.9/site-packages/gunicorn/workers/base.py", line 134, in init_process
    self.load_wsgi()
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/.venv/lib/python3.9/site-packages/gunicorn/workers/base.py", line 146, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/.venv/lib/python3.9/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/.venv/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 58, in load
    return self.load_wsgiapp()
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/.venv/lib/python3.9/site-packages/gunicorn/app/wsgiapp.py", line 48, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/.venv/lib/python3.9/site-packages/gunicorn/util.py", line 359, in import_app
    mod = importlib.import_module(module)
  File "/usr/local/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/mviewerstudio_backend/app.py", line 8, in <module>
    app.register.create_register_from_file_system()
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/mviewerstudio_backend/utils/register_utils.py", line 61, in create_register_from_file_system
    self._configs_files_to_register()
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/mviewerstudio_backend/utils/register_utils.py", line 98, in _configs_files_to_register
    self.update(config.as_dict())
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/mviewerstudio_backend/utils/register_utils.py", line 151, in update
    self.delete(config_dict["id"])
  File "/mnt/ext/var/geobretagne/dev/mviewerstudio/srv/python/mviewerstudio_backend/utils/register_utils.py", line 160, in delete
    register_json = json.load(register_file)
  File "/usr/local/lib/python3.9/json/__init__.py", line 293, in load
    return loads(fp.read(),
  File "/usr/local/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.9/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

@lecault lecault added this to the 4.1 milestone Aug 30, 2023
@lecault
Copy link
Collaborator Author

lecault commented Sep 6, 2023

Un retour d'expérience sur ce sujet.
Sur la version installée sur GéoBretagne, je n'arrivais pas à redémarrer le service avec les données existantes (4,5 organismes avec plusieurs applications).
Pour que ça marche :

  • Sauvegarde des dossiers /store et /prod
  • Vidage des dossiers
  • Relance du service OK
  • Recopie du contenu précédent

ça semble fonctionner.

@lecault lecault modified the milestones: 4.1, 4.2 Oct 11, 2024
@Gaetanbrl
Copy link
Member

Je remarque qu'au démarrage via gunicorn, le service semble faire 2x la création de l'app Flask. Cela créé peut être un problème d'accès aux fichiers Git encore ouvert (accès concurrents)...

@Gaetanbrl
Copy link
Member

Gaetanbrl commented Oct 31, 2024

J'ai facilement reproduis le comportement / erreurs via l'ajout de workers supplémentaires dans le fichier .service (daemon).

Chaque worker rejoue la création du register et le repositionnement de chaque application sur la derniere version (git reset --hard). Si un worker est en cours de reset et qu'un autre tente de faire la même opération, alors le second passe sur un .lock du premier et génère une erreur.

Pourtant d'un point de vue file-system, l'opération attendue sera bien faite par le worker qui a posé le lock.

Soit on utilise qu'un worker soit on gère l'erreur.

J'ai donc rajouté une gestion d'erreur pour le git lock.

Le lock rencontré apparaîtra dans le fichier de log (voir #300) mviewerstudio.log.

Suite à cette modification, je n'ai pas reproduis d'erreur au restart avc 3 workers.

Exemple :

Voici un extrait fichier de log qui montre un lock (donc une erreur générée par un worker) et également un succès (potentiellement d'un autre worker) :

image

@lecault
Copy link
Collaborator Author

lecault commented Nov 6, 2024

Depuis la PR #320 je n'ai pas eu de souci de redémarrage du service

@Gaetanbrl
Copy link
Member

Je clos, PR merge

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

No branches or pull requests

3 participants