@@ -, +, @@
---
.../ucs-3.2-0/doc/changelog/changelog-3.2.xml | 4 ++++
.../univention-management-console/debian/changelog | 1 +
.../management/console/protocol/modserver.py | 21 +++++++++++++-------
3 files changed, 19 insertions(+), 7 deletions(-)
--- a/branches/ucs-3.2/ucs-3.2-0/doc/changelog/changelog-3.2.xml
+++ a/branches/ucs-3.2/ucs-3.2-0/doc/changelog/changelog-3.2.xml
@@ -710,6 +710,10 @@
The command dh-umc-module-build no longer prints a warning message for a failed import and aborts on errors when building UMC module packages (Bug 31123, Bug 32814).
+
+
+ UMC modules now handle the server restart more gracefully (Bug #32814).
+
--- a/branches/ucs-3.2/ucs-3.2-0/management/univention-management-console/debian/changelog
+++ a/branches/ucs-3.2/ucs-3.2-0/management/univention-management-console/debian/changelog
@@ -2,6 +2,7 @@ univention-management-console (6.0.16-1) unstable; urgency=low
* Remove warning (Bug #31123)
* Abort on error (Bug #32814)
+ * Handle connection close (Bug #32818)
-- Philipp Hahn Tue, 08 Oct 2013 10:25:50 +0200
--- a/branches/ucs-3.2/ucs-3.2-0/management/univention-management-console/src/univention/management/console/protocol/modserver.py
+++ a/branches/ucs-3.2/ucs-3.2-0/management/univention-management-console/src/univention/management/console/protocol/modserver.py
@@ -51,6 +51,9 @@ _ = NullTranslation( 'univention.management.console' ).translate
import locale
import notifier
import notifier.threads as threads
+from socket import error as SocketError
+import errno
+
class ModuleServer( Server ):
"""Implements an UMC module server
@@ -98,7 +101,7 @@ class ModuleServer( Server ):
self.__handler = self.__module.Instance()
self.__handler.signal_connect( 'success', notifier.Callback( self._reply, True ) )
self.__handler.signal_connect( 'failure', notifier.Callback( self._reply, True ) )
- except Exception, e:
+ except Exception:
import traceback
traceback.print_exc()
sys.exit( 5 )
@@ -126,10 +129,14 @@ class ModuleServer( Server ):
notifier.timer_remove( self.__timer )
self.__timer == None
- data = socket.recv( RECV_BUFFER_SIZE )
+ try:
+ data = socket.recv( RECV_BUFFER_SIZE )
+ except SocketError, ex:
+ MODULE.error('Failed connection: %s' % (errno.errorcode.get(ex.errno, ex.errno),))
+ data = None
# connection closed?
- if not len( data ):
+ if not data:
socket.close()
# remove socket from notifier
return False
@@ -143,7 +150,7 @@ class ModuleServer( Server ):
self.__buffer = msg.parse( self.__buffer )
MODULE.info( "Received request %s" % msg.id )
self.handle( msg )
- except IncompleteMessageError, e:
+ except IncompleteMessageError:
MODULE.info( 'Failed to parse incomplete message' )
except ( ParseError, UnknownCommandError ), e:
MODULE.error( 'Failed to parse message: %s' % str( e ) )
@@ -220,7 +227,7 @@ class ModuleServer( Server ):
if 'acls' in msg.options and 'commands' in msg.options and 'credentials' in msg.options:
try:
self.__handler.init()
- except BaseException, e:
+ except BaseException:
import traceback, sys
resp.status = MODULE_ERR
exc_info = sys.exc_info()
@@ -272,8 +279,8 @@ class ModuleServer( Server ):
length = len( self.__queue )
try:
ret = self.__comm.send( self.__queue )
- except socket.error, e:
- if e[0] == 11:
+ except SocketError, ex:
+ if ex.errno == errno.EWOULDBLOCK:
return True
raise
--