Projet

Général

Profil

Scénario #10144

to many open files avec l'utilisation de mkstemp

Ajouté par Gwenael Remond il y a plus de 9 ans. Mis à jour il y a environ 9 ans.

Statut:
Terminé (Sprint)
Priorité:
Normal
Assigné à:
-
Catégorie:
-
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

Tâche #10185: Rechercher et corriger les utilisations de mkstempFerméGwenael Remond

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)

Formats disponibles : Atom PDF