Projet

Général

Profil

Bug #7534

ajouter un lock sur hobo_deploy

Ajouté par Thomas Noël il y a presque 9 ans. Mis à jour il y a plus d'un an.

Statut:
Information nécessaire
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
11 juin 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Hobo - Bug #7205: problème de "lock" pendant un déploiement (crash agent deploiement authentic2)Fermé12 mai 2015

Actions

Historique

#1

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é
#2

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
#3

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 +)

#4

Mis à jour par Thomas Noël il y a presque 9 ans

  • Assigné à mis à Thomas Noël
#5

Mis à jour par Thomas Noël il y a presque 9 ans

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.

#6

Mis à jour par Thomas Noël il y a presque 9 ans

  • Statut changé de Nouveau à En cours
  • Patch proposed changé de Non à Oui
#7

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)

#8

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).

#9

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.

#10

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 ?

#11

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.

#12

Mis à jour par Frédéric Péters il y a plus de 8 ans

  • Patch proposed changé de Oui à Non
#13

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

#14

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").

#15

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.

#16

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.

#17

Mis à jour par Thomas Noël il y a plus d'un an

  • Assigné à Thomas Noël supprimé
  • 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)

Formats disponibles : Atom PDF