Tâche #14184
Distribution EOLE - Scénario #14084: Assistance aux utilisateurs (49-51)
Traceback "unable to load tdb" dans les logs de controle-vnc
Description
Traceback obtenu sur Scribe "2.5.2" lors de la validation de #14089.
Une partie des instructions a tout de même été appliquée côté client (l'élève a ses montages mais pas son nom sur le fond d'écran).
2015/12/02 15:23:06 [Broker,1,10.1.2.50] Appel de la fonction remote_logon par 10.1.2.50 2015/12/02 15:23:08 [Broker,1,10.1.2.50] Peer will receive following PB traceback: 2015/12/02 15:23:08 [Broker,1,10.1.2.50] Unhandled Error Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/twisted/spread/banana.py", line 153, in gotItem self.callExpressionReceived(item) File "/usr/lib/python2.7/dist-packages/twisted/spread/banana.py", line 116, in callExpressionReceived self.expressionReceived(obj) File "/usr/lib/python2.7/dist-packages/twisted/spread/pb.py", line 565, in expressionReceived method(*sexp[1:]) File "/usr/lib/python2.7/dist-packages/twisted/spread/pb.py", line 877, in proto_message self._recvMessage(self.localObjectForID, requestID, objectID, message, answerRequired, netArgs, netKw) --- <exception caught here> --- File "/usr/lib/python2.7/dist-packages/twisted/spread/pb.py", line 891, in _recvMessage netResult = object.remoteMessageReceived(self, message, netArgs, netKw) File "/usr/share/eole/controlevnc/controle_vnc_serveur.py", line 67, in remoteMessageReceived return pb.Root.remoteMessageReceived(self, broker, message, args, kw) File "/usr/lib/python2.7/dist-packages/twisted/spread/flavors.py", line 114, in remoteMessageReceived state = method(*args, **kw) File "/usr/share/eole/controlevnc/controle_vnc_serveur.py", line 329, in remote_logon return gest_sessions.Logon().logon(self.ip, os_type, self.blocage) File "/usr/share/eole/controlevnc/gest_sessions.py", line 34, in logon Connexions().get_infos(self.ip, os_type) File "/usr/share/eole/controlevnc/connexions.py", line 354, in get_infos sessions = self.get_sessions(only=ip) File "/usr/share/eole/controlevnc/connexions.py", line 350, in get_sessions self.sessions = Session(only) File "/usr/share/eole/controlevnc/connexions.py", line 129, in __init__ raise Exception('unable to load tdb file, may be locked') exceptions.Exception: unable to load tdb file, may be locked
Demandes liées
Révisions associées
remplacement de l'utilisation de TDB par "net status sessions parseable" REF #14184
retour à l'utilisation de TDB mais ouverture permanente REF #14184
Historique
#1 Mis à jour par Scrum Master il y a plus de 8 ans
- Assigné à mis à Emmanuel GARETTE
#2 Mis à jour par Emmanuel GARETTE il y a plus de 8 ans
- Tâche parente mis à #14084
Le fichier tdb est lu à la place de "net status sessions". Normalement il y a une boucle pour limiter les problèmes de lock sur le fichier.
Visiblement cela n'est pas suffisant.
Il faudrait peut etre lancer "net status sessions" dans ce cas.
#3 Mis à jour par Emmanuel GARETTE il y a plus de 8 ans
- Assigné à
Emmanuel GARETTEsupprimé
#4 Mis à jour par Klaas TJEBBES il y a plus de 8 ans
Le problème semble se poser régulièrement en production, en corse, sur leur tests 2.5.1 et Windows 10, la plupart des ouvertures de sessions remontent cette erreur.
#5 Mis à jour par Klaas TJEBBES il y a plus de 8 ans
- Assigné à mis à Klaas TJEBBES
#6 Mis à jour par Emmanuel GARETTE il y a plus de 8 ans
Contrairement à ce qui est écrit, le problème ne vient pas d'un lock, mais du fait que le fichier est déjà ouvert.
Il n'est pas possible d'ouvrir 2 fois le même fichier dans un même processus.
Soit il manque un "close", soit il y a plusieurs demande d'ouverture du même fichier en même temps (ce qui est le plus probable).
#7 Mis à jour par Klaas TJEBBES il y a plus de 8 ans
- Statut changé de Nouveau à En cours
#8 Mis à jour par Klaas TJEBBES il y a plus de 8 ans
- Statut changé de En cours à Résolu
#9 Mis à jour par Gérald Schwartzmann il y a plus de 8 ans
Rien dans le logs
root@scribe:~# tail -f /var/log/controle-vnc/main.log 2015/12/22 12:09:04 [-] twistd 13.2.0 (/usr/bin/python 2.7.6) starting up. 2015/12/22 12:09:04 [-] reactor class: twisted.internet.epollreactor.EPollReactor. 2015/12/22 12:09:04 [-] Site starting on 8790 2015/12/22 12:09:04 [-] Starting factory <twisted.web.server.Site instance at 0x7fad3a635b00> 2015/12/22 12:09:04 [-] PBServerFactory starting on 8789 2015/12/22 12:09:04 [-] Starting factory <twisted.spread.pb.PBServerFactory instance at 0x7fad3a635cf8> 2015/12/22 12:09:04 [-] Site starting on 8788 2015/12/22 12:09:04 [-] Starting factory <twisted.web.server.Site instance at 0x7fad3a5e9e18> 2015/12/22 12:09:04 [-] Site starting on 8792 2015/12/22 12:09:04 [-] Starting factory <twisted.web.server.Site instance at 0x7fad3a5ef1b8>
Version du paquet controle-vnc-server : 2.5.2-8
root@scribe:~# locate cliscribe.py /usr/share/eole/controlevnc/cliscribe.py root@scribe:~# dpkg -S /usr/share/eole/controlevnc/cliscribe.py controle-vnc-server: /usr/share/eole/controlevnc/cliscribe.py root@scribe:~# apt-cache policy controle-vnc-server controle-vnc-server: Installé : 2.5.2-8 Candidat : 2.5.2-8 Table de version : *** 2.5.2-8 0 500 http://test-eole.ac-dijon.fr/eole/ eole-2.5-unstable/main amd64 Packages 100 /var/lib/dpkg/status root@scribe:~#
cliscribe.py contient bien la première modification :
# self.timeout_delay = tmout # gestion du timeout # self.setmytimeout(tmout)
mais pas la deuxième :
def logon(self, ret=None, logon_dict=None): # appel de la remote_fonction self.test_port()
connexions.py contient bien les différentes modifications :
class Session: def __init__(self, only=None): """lit le contenu de sessionid.tdb only: get session information only for one IP """ cnt = 0 max_cnt = 10 for cnt in range(max_cnt): try: self._init_sessions(only) break except: TDB_HANDLER.reopen() if cnt == max_cnt-1: # pour voir ce qui plante self._init_sessions(only) time.sleep(0.2)
def _init_sessions(self, only): self.sessions = [] sessions = {} for key in TDB_HANDLER.iterkeys(): #key must endswith \x00 data = TDB_HANDLER.get(key) if data is None: continue #(tid, ) = struct.unpack("<L", data[4:8]) tret = []
#10 Mis à jour par Gérald Schwartzmann il y a plus de 8 ans
- Temps estimé mis à 0.00 h
- Restant à faire (heures) mis à 0.0
#11 Mis à jour par Gérald Schwartzmann il y a plus de 8 ans
- Statut changé de Résolu à En cours
#12 Mis à jour par Gérald Schwartzmann il y a plus de 8 ans
- Statut changé de En cours à Fermé
- % réalisé changé de 0 à 100
def logon(self, ret=None, logon_dict=None): # appel de la remote_fonction self.test_port()
self.test_port() doit bien être décommenté, juste que le dernier commit n'a pas de ref donc pas visible sur la forge.
#13 Mis à jour par Joël Cuissinat il y a plus de 8 ans
- Temps estimé changé de 0.00 h à 2.00 h