Projet

Général

Profil

Scénario #6022

La commande manage_station.py ne rend pas la main en cas de timeout

Ajouté par Damien THOMAS il y a plus de 10 ans. Mis à jour il y a plus de 8 ans.

Statut:
Terminé (Sprint)
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Début:
13/11/2015
Echéance:
20/11/2015
% réalisé:

100%

Temps estimé:
(Total: 1.00 h)
Temps passé:
0.08 h (Total: 0.58 h)
Points de scénarios:
2.0
Restant à faire (heures):
0.00 heure
Estimation basée sur la vélocité:
Release:
Liens avec la release:
Auto

Description

Bonjour,

EAD plante quand j'arrête les postes si j'ai ouvert une session administrateur local dessus à distance et que je l'intègre au domaine.

Si je me rend dans EAD pour éteindre les postes

outils -> machines

systématiquement EAD plante sur une requête trop longue


Sous-tâches

Tâche #14006: Arrêter le reactor en cas de timeoutFerméDaniel Dehennin


Demandes liées

Lié à Distribution EOLE - Tâche #13839: Étude demande 6022 Plantage EAD Fermé 02/11/2015
Lié à controle-vnc - Tâche #14089: Le service controle-vnc s'arrête lors de la connexion d'un utilisateur (EOLE 2.5.2) Fermé 19/11/2015

Historique

#1 Mis à jour par Joël Cuissinat il y a plus de 10 ans

  • Statut changé de Nouveau à A étudier
  • Version cible mis à Mises à jour 2.3.11

Rien dans /var/log/ead/ead-server par hasard ?

#2 Mis à jour par Joël Cuissinat il y a plus de 10 ans

  • Version cible changé de Mises à jour 2.3.11 à Mises à jour 2.3.12

#3 Mis à jour par Fabrice Barconnière il y a environ 10 ans

  • Version cible changé de Mises à jour 2.3.12 à Mises à jour 2.3.13

#4 Mis à jour par Joël Cuissinat il y a presque 10 ans

  • Version cible Mises à jour 2.3.13 supprimé

#5 Mis à jour par Emmanuel GARETTE il y a plus de 8 ans

<gnunux> ddtddt|2, donc je suis sur la machine A, je lance mstsc.exe sur la machine B, je vais dans l'EAD et j'étais la machine A c'est ca ?
<ddtddt|2> non
<ddtddt|2> je suis sur A
<ddtddt|2> je me connecte en admin à distance sur B avec mstsc.exe
<ddtddt|2> je me déconecte de B
<ddtddt|2> je lance EAD
<ddtddt|2> j'essais d'éteindre B
<ddtddt|2> B ne s"étteind pas et l'interface plante

#6 Mis à jour par Emmanuel GARETTE il y a plus de 8 ans

  • Statut changé de A étudier à Nouveau

J'ai reproduit sur XP.

Si je lance à la main :

root@amonecole:~# /usr/bin/ssh -q -o LogLevel=ERROR -o StrictHostKeyChecking=no root@192.0.2.52 /usr/share/eole/controlevnc/manage_stations.py -s 10.3.2.54 -t 0
"Erreur , Traceback (failure with no frames): <class 'cliscribe.TimeoutError'>: Callback timed out\n" 
Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 287, in addCallbacks
    self._runCallbacks()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 545, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 426, in _continueFiring
    callable(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 621, in disconnectAll
    failure.Failure(main.CONNECTION_LOST))
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 84, in callWithLogger
    return callWithContext({"system": lp}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 69, in callWithContext
    return context.call({ILogContext: newCtx}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 118, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 81, in callWithContext
    return func(*args,**kw)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 434, in connectionLost
    self.connector.connectionLost(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1063, in connectionLost
    self.factory.clientConnectionLost(self, reason)
  File "/usr/lib/python2.7/dist-packages/twisted/spread/pb.py", line 1146, in clientConnectionLost
    self._failAll(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/spread/pb.py", line 1133, in _failAll
    d.errback(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 391, in errback
    self._startRunCallbacks(fail)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 451, in _startRunCallbacks
    raise AlreadyCalledError
twisted.internet.defer.AlreadyCalledError: 
Extinction de 10.3.2.54

Dans l'EAD cela n'a pas l'air de s'arrêter :

root@amonecole:~# ps auxf|grep manage_st
root     31968  0.0  0.0   9424   900 pts/0    S+   17:30   0:00          \_ grep --color=auto manage_st
root     31281  0.0  0.6 196792 20300 ?        Ssl  17:23   0:00      |       \_ python /usr/share/eole/controlevnc/manage_stations.py -s 10.3.2.54 -t 0
root     31268  0.0  0.0  41524  2796 ?        S    17:23   0:00  \_ /usr/bin/ssh -q -o LogLevel=ERROR -o StrictHostKeyChecking=no root@192.0.2.52 /usr/share/eole/controlevnc/manage_stations.py -s 10.3.2.54 -t 0
root@amonecole:~# date
jeudi 22 octobre 2015, 17:32:18 (UTC+0200)

En python ca s'arrête bien aussi :

root@amonecole:/usr/share/ead2# python
Python 2.7.3 (default, Jun 22 2015, 19:33:41) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyeole.process import system_out
>>> get_client_scribe_script = "/usr/share/eole/controlevnc/manage_stations.py" 
>>> user = '10.3.2.54'
>>> a, b, err = system_out([get_client_scribe_script, '-s', user, '-t', '0'], container='fichier')
>>> print a
0
>>> print b
Extinction de 10.3.2.54

>>> print err
"Erreur , Traceback (failure with no frames): <class 'cliscribe.TimeoutError'>: Callback timed out\n" 
Unhandled Error
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 287, in addCallbacks
    self._runCallbacks()
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 545, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 426, in _continueFiring
    callable(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 621, in disconnectAll
    failure.Failure(main.CONNECTION_LOST))
--- <exception caught here> ---
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 84, in callWithLogger
    return callWithContext({"system": lp}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/log.py", line 69, in callWithContext
    return context.call({ILogContext: newCtx}, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 118, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/usr/lib/python2.7/dist-packages/twisted/python/context.py", line 81, in callWithContext
    return func(*args,**kw)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 434, in connectionLost
    self.connector.connectionLost(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 1063, in connectionLost
    self.factory.clientConnectionLost(self, reason)
  File "/usr/lib/python2.7/dist-packages/twisted/spread/pb.py", line 1146, in clientConnectionLost
    self._failAll(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/spread/pb.py", line 1133, in _failAll
    d.errback(reason)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 391, in errback
    self._startRunCallbacks(fail)
  File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 451, in _startRunCallbacks
    raise AlreadyCalledError
twisted.internet.defer.AlreadyCalledError: 

>>> 

#7 Mis à jour par Emmanuel GARETTE il y a plus de 8 ans

  • Tracker changé de Anomalie à Demande

La commande peut mettre trop de temps. Une solution simple serait d'exécuter la commande dans "at".

#8 Mis à jour par Scrum Master il y a plus de 8 ans

  • Assigné à mis à Emmanuel GARETTE

#9 Mis à jour par Scrum Master il y a plus de 8 ans

  • Tâche parente mis à #13757

#10 Mis à jour par Scrum Master il y a plus de 8 ans

  • Assigné à Emmanuel GARETTE supprimé

#11 Mis à jour par Scrum Master il y a plus de 8 ans

  • Tâche parente #13757 supprimé

#12 Mis à jour par Scrum Master il y a plus de 8 ans

  • Tracker changé de Tâche à Demande
  • Version cible Sprint 2015 45-47 - Équipe MENESR supprimé

Etude de la demande

#13 Mis à jour par Scrum Master il y a plus de 8 ans

  • Assigné à mis à developpeurs_eole

#14 Mis à jour par Daniel Dehennin il y a plus de 8 ans

Le problème est double :

  • Il n’y a aucune gestion des timeout sur les appels de commande dans ead.
  • La commande manage_station.py ne s’arrête jamais si la commande distante est bloquante

Ce deuxième point n’est pas résolu par la gestion actuelle du timeout, en effet :

Cela conduit a la levée d’exception AlreadyCalledError.

Pour que la commande ne soit plus bloquante, il faut :

  1. Ne plus tester si callback() a bien été appelé sur l’objet Deferred car c’est toujours le cas
  2. Sauvegarder l’exception de timeout dans l’objet ClientScribe et arrêter le reactor sans exécuter les callback() et errback()
  3. Lever l’exception si elle est définie avant de sortir du script

#15 Mis à jour par Daniel Dehennin il y a plus de 8 ans

  • Tracker changé de Demande à Scénario
  • Echéance mis à 20/11/2015
  • Assigné à developpeurs_eole supprimé
  • Version cible mis à Sprint 2015 45-47 - Équipe MENESR
  • Début mis à 02/11/2015
  • Release mis à EOLE 2.5.2
  • Points de scénarios mis à 2.0

Passage sur le sprint pour appliquer le commit.

#16 Mis à jour par Daniel Dehennin il y a plus de 8 ans

  • Projet changé de ead à controle-vnc
  • Sujet changé de Plantage de EAD à La commande manage_station.py ne rend pas la main en cas de timeout

#17 Mis à jour par Joël Cuissinat il y a plus de 8 ans

  • Statut changé de Nouveau à Terminé (Sprint)

Formats disponibles : Atom PDF