Bug #7534
ajouter un lock sur hobo_deploy
0%
Description
suite à #7205, reste l'idée d'un lock général sur hobo_deploy
« en gros:
--- a/hobo/agent/worker/services.py +++ b/hobo/agent/worker/services.py @@ -107,4 +107,5 @@ def deploy(environment): if service_obj.check_timestamp(hobo_timestamp): logger.debug('skipping uptodate site: %r', service_obj) continue - service_obj.execute(environment) + with lock(service): + service_obj.execute(environment)
», Fred dixit.
Fichiers
Demandes liées
Historique
Mis à jour par Thomas Noël il y a presque 9 ans
- Lié à Bug #7205: problème de "lock" pendant un déploiement (crash agent deploiement authentic2) ajouté
Mis à jour par Thomas Noël il y a presque 9 ans
- Sujet changé de ajoter un lock sur hobo_deploy à ajouter un lock sur hobo_deploy
Mis à jour par Thomas Noël il y a presque 9 ans
je proposerais bien l'utilisation de http://pythonhosted.org/lockfile/lockfile.html avec un lock.acquire(10) (package dispo en wheezy et +)
Mis à jour par Thomas Noël il y a presque 9 ans
- Fichier 0001-agent-use-lock-on-hobo-deploy-wait-for-10s-7534.patch 0001-agent-use-lock-on-hobo-deploy-wait-for-10s-7534.patch ajouté
Pas si joli, parce qu'on ne peut pas faire with lock(timeout=10)
et que je voulais quand même attendre quand un lock est posé.
J'ai pas encore testé, j'envoie ici pour vous faire lire et avoir un éventuel ack de principe.
Mis à jour par Thomas Noël il y a presque 9 ans
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Mis à jour par Serghei Mihai il y a presque 9 ans
Je pensais plutôt à l'idée de checker dans execute
si un process hobo_deploy
en cours existe:
--- a/hobo/agent/worker/services.py +++ b/hobo/agent/worker/services.py @@ -51,6 +51,14 @@ class BaseService(object): return False def execute(self, environment): + args = ['pgrep', '-f', '"%s hobo_deploy %s -"' % + (self.service_manage_cmd, self.base_url)] + check = subprocess.Popen(args) + pid = check.stdout.read() + pid.stdout.close() + check.wait() + if pid: + return cmd_process = subprocess.Popen(self.service_manage_cmd + ' hobo_deploy ' + self.base_url + ' -', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) stdout = cmd_process.communicate(input=json.dumps(environment))
Ça gere les cas ou un hobo_deploy
a été lancé à la main(chose qui ne devrait pas arriver normalement)
Mis à jour par Frédéric Péters il y a presque 9 ans
Je ne suis pas fan (ça m'arrive fréquemment de lancer un hobo_deploy en pointant vers un fichier, et ce pgrep passerait à côté de ça).
Mis à jour par Thomas Noël il y a presque 9 ans
Le code de mon lock est pas élégant, mais comparé à un pgrep lancé en subprocess.Popen, c'est du Botticelli.
Pour moi, les hobo_deploy lancés à la main ne sont pas un soucis. D'abord parce que ça ne devrait pas arriver, hobo devrait être assez doué pour qu'on ai jamais à le faire. Ensuite parce que si quelqu'un le fait, il doit savoir ce qu'il est en train de faire (un peu comme quand on lance à la main un truc croné, il faut faire attention à ne pas le faire en concurrence avec le cron).
J'ai dit.
Mis à jour par Frédéric Péters il y a presque 9 ans
Je n'avais pas vu le patch de Thomas… Comme je disais, je ne suis pas fan du pgrep, et c'était un euphémisme. Cela étant dit, en fait, le lock, maintenant que j'y pense, il aurait plutôt une place au début de la commande hobo_deploy elle-même, non ?
Mis à jour par Thomas Noël il y a presque 9 ans
Si. C'est parce que j'ai bêtement suivi l'idée du sujet du ticket.
Mis à jour par Thomas Noël il y a presque 8 ans
- Statut changé de En cours à Fermé
je crois bien que ça a été corrigé d'une autre façon... de toute façon, je ferme ce ticket qui a quitté les radars depuis longtemps
Mis à jour par Frédéric Péters il y a presque 8 ans
- Statut changé de Fermé à En cours
Nope, je réouvre. (c'est "corrigé" parce qu'on tourne avec un seul worker rabbitmq, ce qui est pas terrible comme "solution").
Mis à jour par Frédéric Péters il y a presque 8 ans
- Patch proposed changé de Non à Oui
Et je mets "patch proposed" pour y revenir.
Mis à jour par Frédéric Péters il y a environ 5 ans
- Statut changé de En cours à Information nécessaire
À rebaser (et à l'occasion réécrire avec try/finally), ou à rejeter.
Mis à jour par Thomas Noël il y a plus d'un an
- Assigné à
Thomas Noëlsupprimé - Planning mis à Non
Frédéric Péters a écrit :
À rebaser (et à l'occasion réécrire avec try/finally), ou à rejeter.
Ça me parait toujours intéressant mais je vais juste rejeter mon assignation (je ne pourrais pas y passer de temps)