[Erp5-report] r24538 - /erp5/trunk/products/TIDStorage/bin/server.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Nov 10 11:12:48 CET 2008
Author: vincent
Date: Mon Nov 10 11:12:47 2008
New Revision: 24538
URL: http://svn.erp5.org?rev=24538&view=rev
Log:
Logfile handling was overcomplicated.
Modified:
erp5/trunk/products/TIDStorage/bin/server.py
Modified: erp5/trunk/products/TIDStorage/bin/server.py
URL: http://svn.erp5.org/erp5/trunk/products/TIDStorage/bin/server.py?rev=24538&r1=24537&r2=24538&view=diff
==============================================================================
--- erp5/trunk/products/TIDStorage/bin/server.py [utf8] (original)
+++ erp5/trunk/products/TIDStorage/bin/server.py [utf8] Mon Nov 10 11:12:47 2008
@@ -497,70 +497,13 @@
can_bootstrap = False
server.server_close()
-log_file_set = sets.Set()
-
-class LogFile:
- """
- Loggin-to-file class.
- Allows rotating file.
- Can be used as stdout/stderr file: no write from any thread is lost during
- rotation. There is an unavoidable (?) race condition if anything gets
- raised by the rotating thread between "self._to_buffer = False" completion
- and following log flush.
- """
- _file = None
-
- def __init__(self, file_name):
- self._lock = threading.RLock()
- self._file_name = file_name
- self._to_buffer = False
- self._buffer = []
- self._open()
- log_file_set.add(self)
-
- def _open(self):
- self._file = open(self._file_name, 'a', 0)
-
- def write(self, value):
- self._lock.acquire()
- try:
- if self._to_buffer:
- self._buffer.append(value)
- else:
- self._file.write(value)
- finally:
- self._lock.release()
-
- def close():
- self._lock.acquire()
- try:
- log_file_set.remove(self)
- self._file.close()
- self._file = None
- finally:
- self._lock.release()
-
- def rotate(self):
- self._lock.acquire()
- try:
- self._to_buffer = True
- self._file.close()
- self._open()
- # XXX: race condition below if rotating stderr: Any exception thrown
- # here will be out-of-order in resulting log.
- self._to_buffer = False
- self.write(''.join(self._buffer))
- # End of race condition.
- finally:
- self._lock.release()
+def openLog():
+ return open(options.logfile_name, 'a', 0)
def HUPHandler(signal_number, stack):
- rotate_count = 0
- log('Rotating logfiles...')
- for log_file in log_file_set:
- rotate_count += 1
- log_file.rotate()
- log('Logfiles rotated (%i).' % (rotate_count, ))
+ log('Rotating logfile...')
+ sys.stdout = sys.stderr = openLog()
+ log('Logfile rotated')
def USR1Handler(signal_number, stack):
log(repr(tid_storage))
@@ -736,7 +679,7 @@
if options.fork:
os.chdir('/')
os.umask(027)
- logfile = LogFile(options.logfile_name)
+ logfile = openLog()
pidfile = open(options.pidfile_name, 'w')
pid = os.fork()
if pid == 0:
@@ -748,15 +691,8 @@
os.close(1)
os.close(2)
sys.stdout = sys.stderr = logfile
- try:
- main(options.address, options.port)
- except:
- # Log exception before returning.
- log('Exception caught outside of "main". Previous log entries might ' \
- 'be out of order because of this exception.\n%s' % (
- ''.join(traceback.format_exception(*sys.exc_info())), ))
- else:
- log('Exited normaly.')
+ main(options.address, options.port)
+ log('Exiting.')
else:
pidfile.write(str(pid))
pidfile.close()
More information about the Erp5-report
mailing list