New submission from Yateen V. Joshi <yjo...@starentnetworks.com>:

I am running an in house application that uses multiprocessing logger. 
This application ftp's files from a remote host and keep them on a local
disk. Here is the scenario - 
While pulling the files, I make the local disk full (100%). The application 
hangs, it can not log further. Apart from other exceptions, following are 
prominent ones. If I further create cleanup the disk, the application does not 
proceed. It 
remains hung. I have to restart the application. 

  File 
"/export/home/yateen/ess/3rdparty/python/solaris/lib/python2.6/logging/__init__.py",
 line 1059, in error
    self._log(ERROR, msg, args, **kwargs)
  File 
"/export/home/yateen/ess/3rdparty/python/solaris/lib/python2.6/logging/__init__.py",
 line 1141, in _log
    self.handle(record)
  File 
"/export/home/yateen/ess/3rdparty/python/solaris/lib/python2.6/logging/__init__.py",
 line 1151, in handle
    self.callHandlers(record)
  File 
"/export/home/yateen/ess/3rdparty/python/solaris/lib/python2.6/logging/__init__.py",
 line 1188, in callHandlers
    hdlr.handle(record)
  File 
"/export/home/yateen/ess/3rdparty/python/solaris/lib/python2.6/logging/__init__.py",
 line 671, in handle
    self.release()
  File "build/bdist.solaris-2.10-sun4u/egg/cloghandler.py", line 189, in release
    self.stream.flush()


I tried looking into the logging module's code and could not find IOError 
exception handling there. After going through
various situations, and trial-errors (I am not a python Guru), I found 
following fix working - 
method handle(record), file logging/__init__.py, line#670
original code - 
        rv = self.filter(record)
        if rv:
            self.acquire()
            try:
                self.emit(record)
            finally:
                self.release()
                             
        return rv

Modified code - 
        rv = self.filter(record)
        if rv:
            self.acquire()
            try:
                self.emit(record)
            finally:
                try:
                  self.release()
                except (IOError, OSError):
                  pass
        return rv

What this tells is if there is an error in locks handling, simply leave it and 
proceed. With this fix, when the disk is 
cleaned up, application proceeds properly. 

What I want to know if this is an appropriate fix? Can I go ahead with it?

Thanks,
Yateen..

----------
components: Extension Modules
messages: 97504
nosy: yateenjoshi
severity: normal
status: open
title: python logger does not handle IOError Exception
type: behavior
versions: Python 2.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue7664>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to