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 plus de 9 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 plus de 9 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 plus de 9 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 plus de 9 ans
- Points de scénarios mis à 1.0
#5 Mis à jour par Joël Cuissinat il y a plus de 9 ans
- Statut changé de Nouveau à Terminé (Sprint)