Scénario #10144
to many open files avec l'utilisation de mkstemp
Statut:
Terminé (Sprint)
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
Début:
24/12/2014
Echéance:
23/01/2015
% réalisé:
100%
Temps estimé:
(Total: 6.00 h)
Temps passé:
(Total: 2.33 h)
Points de scénarios:
1.0
Restant à faire (heures):
0.00 heure
Estimation basée sur la vélocité:
Description
Lors d'un import annuel des élèves, trop de stdout d'ouvert on provoqué une erreur de type Too many open files sur un amon ecole en 2.3
2014-11-21 22:50:55 - ERROR
Traceback (most recent call last):
File "/usr/share/ead2/backend/bin/importation.py", line 405, in do_import_eleve
writer.write_eleve(storage=self.store, connexion=connexion, etab=etab)
File "/usr/lib/pymodules/python2.6/scribe/importation/writer.py", line 505, in write_eleve
_maj_eleve(eleve, user, login, etab)
File "/usr/lib/pymodules/python2.6/scribe/importation/writer.py", line 458, in _maj_eleve
user._change_classe(login, classe, etab)
File "/usr/lib/pymodules/python2.6/scribe/eleves.py", line 175, in _change_classe
self._inscription(user, new_classe, sync=False, etab=new_etab)
File "/usr/lib/pymodules/python2.6/scribe/eleves.py", line 187, in _inscription
User._inscription(self, login, groupe, sync=sync, etab=etab)
File "/usr/lib/pymodules/python2.6/scribe/eoleuser.py", line 374, in _inscription
tool.launch_smbldap_tool(cmd, num_etab, etabgroup)
File "/usr/lib/pymodules/python2.6/scribe/eoletools.py", line 470, in launch_smbldap_tool
res = system_out(cmd, container='fichier', env=env)
File "/usr/lib/pymodules/python2.6/pyeole/process.py", line 85, in system_out
cmd = _gen_container_cmd(cmd, container, context, env, pty)
File "/usr/lib/pymodules/python2.6/pyeole/process.py", line 26, in _gen_container_cmd
if not test_conteneur(container, ip_address):
File "/usr/lib/pymodules/python2.6/pyeole/process.py", line 155, in test_conteneur
if not system_out(cmd)[1].strip().lower().endswith(' is running'):
File "/usr/lib/pymodules/python2.6/pyeole/process.py", line 100, in system_out
env=env)
File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1039, in _execute_child
errpipe_read, errpipe_write = os.pipe()
OSError: [Errno 24] Too many open files
2014-11-21 22:50:55 - DEBUG suppression du lock eoleimport
L'ajout du paramètre close_fds=True à subprocess.Popen dans system_out de process.py a pu résoudre le problème, l'import passe sans problème dès que ce paramètre est fixé.
cf la doc officielle python : https://docs.python.org/2/library/subprocess.html#popen-constructor
Sous-tâches
Historique
#1 Mis à jour par Gwenael Remond il y a environ 11 ans
la solution proposée n'est pas la bonne. L'erreur provient en fait d'un mauvais usage de tempfile.mkstemp()
cf le billet de logilab sur la nécessité d'utiliser os.remove(temp_path)
http://www.logilab.org/blogentry/17873
dans /usr/share/pyshared/script/eoletools.py
from os import system, makedirs, unlink, close #(ajout de close)
fd, tempfile = mkstemp(suffix='.temp', dir='%s%s' % (conteneurs.get('container_path_fichier', ''), confdir))
# ligne 456
close(fd)
# ligne 471, dans
if tempfile is not None:
#2 Mis à jour par Luc Bourdot il y a environ 11 ans
- Tracker changé de Anomalie à Scénario
- Echéance mis à 22/01/2015
- Version cible mis à sprint 2015 2-4
#3 Mis à jour par Fabrice Barconnière il y a environ 11 ans
- Sujet changé de to many open files avec system_out à to many open files avec l'utilisation de mkstemp
#4 Mis à jour par Klaas TJEBBES il y a environ 11 ans
- Points de scénarios mis à 1.0
#5 Mis à jour par Joël Cuissinat il y a environ 11 ans
- Statut changé de Nouveau à Terminé (Sprint)