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 10 ans
- Assigné à mis à Emmanuel GARETTE
#2 Mis à jour par Emmanuel GARETTE il y a plus de 10 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 10 ans
- Assigné à
Emmanuel GARETTEsupprimé
#4 Mis à jour par Klaas TJEBBES il y a plus de 10 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 10 ans
- Assigné à mis à Klaas TJEBBES
#6 Mis à jour par Emmanuel GARETTE il y a plus de 10 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 10 ans
- Statut changé de Nouveau à En cours
#8 Mis à jour par Klaas TJEBBES il y a plus de 10 ans
- Statut changé de En cours à Résolu
#9 Mis à jour par Gérald Schwartzmann il y a plus de 10 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 10 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 10 ans
- Statut changé de Résolu à En cours
#12 Mis à jour par Gérald Schwartzmann il y a plus de 10 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 environ 10 ans
- Temps estimé changé de 0.00 h à 2.00 h