[Neo-report] r2123 gregory - in /trunk/neo: ./ master/ storage/

nobody at svn.erp5.org nobody at svn.erp5.org
Mon May 24 12:25:47 CEST 2010


Author: gregory
Date: Mon May 24 12:25:44 2010
New Revision: 2123

Log:
Catch exceptions at higher to log informations pre-mortem.

- Unify log methods among classes.
- Define log() on event manager

Modified:
    trunk/neo/event.py
    trunk/neo/master/app.py
    trunk/neo/master/transactions.py
    trunk/neo/node.py
    trunk/neo/storage/app.py
    trunk/neo/storage/transactions.py

Modified: trunk/neo/event.py
==============================================================================
--- trunk/neo/event.py [iso-8859-1] (original)
+++ trunk/neo/event.py [iso-8859-1] Mon May 24 12:25:44 2010
@@ -16,7 +16,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
 from time import time
-
+from neo import logging
 from neo.epoll import Epoll
 from neo.profiling import profiler_decorator
 
@@ -183,5 +183,15 @@
             self.writer_set.remove(fd)
             self.epoll.modify(fd, fd in self.reader_set, 0)
 
+    def log(self):
+        logging.info('Event Manager:')
+        logging.info('  Readers: %r', [x for x in self.reader_set])
+        logging.info('  Writers: %r', [x for x in self.writer_set])
+        logging.info('  Connections:')
+        pending_set = set(self._pending_processing)
+        for fd, conn in self.connection_dict.items():
+            logging.info('    %r: %r (pending=%r)', fd, conn, conn in pending_set)
+
+
 # Default to EpollEventManager.
 EventManager = EpollEventManager

Modified: trunk/neo/master/app.py
==============================================================================
--- trunk/neo/master/app.py [iso-8859-1] (original)
+++ trunk/neo/master/app.py [iso-8859-1] Mon May 24 12:25:44 2010
@@ -96,6 +96,17 @@
         registerLiveDebugger()
 
     def run(self):
+        try:
+            self._run()
+        except:
+            logging.info('\nPre-mortem informations:')
+            self.em.log()
+            self.nm.log()
+            self.pt.log()
+            self.tm.log()
+            raise
+
+    def _run(self):
         """Make sure that the status is sane and start a loop."""
         bootstrap = True
 

Modified: trunk/neo/master/transactions.py
==============================================================================
--- trunk/neo/master/transactions.py [iso-8859-1] (original)
+++ trunk/neo/master/transactions.py [iso-8859-1] Mon May 24 12:25:44 2010
@@ -241,3 +241,11 @@
         # discard node entry
         del self._node_dict[node]
 
+    def log(self):
+        logging.info('Transactions:')
+        for node, tid_dict in self._node_dict.items():
+            if not len(tid_dict):
+                continue
+            logging.info('  %r: %r', dump(node.getUUID()), [dump(x) for x in
+                    tid_dict.keys()])
+

Modified: trunk/neo/node.py
==============================================================================
--- trunk/neo/node.py [iso-8859-1] (original)
+++ trunk/neo/node.py [iso-8859-1] Mon May 24 12:25:44 2010
@@ -475,12 +475,12 @@
         self.log()
 
     def log(self):
-        logging.debug('Node manager : %d nodes' % len(self._node_set))
+        logging.info('Node manager : %d nodes' % len(self._node_set))
         for node in sorted(list(self._node_set)):
             uuid = dump(node.getUUID()) or '-' * 32
             address = node.getAddress() or ''
             if address:
                 address = '%s:%d' % address
-            logging.debug(' * %32s | %8s | %22s | %s' % (
+            logging.info(' * %32s | %8s | %22s | %s' % (
                 uuid, node.getType(), address, node.getState()))
 

Modified: trunk/neo/storage/app.py
==============================================================================
--- trunk/neo/storage/app.py [iso-8859-1] (original)
+++ trunk/neo/storage/app.py [iso-8859-1] Mon May 24 12:25:44 2010
@@ -145,6 +145,18 @@
         self.pt.update(ptid, new_cell_list, self.nm)
 
     def run(self):
+        try:
+            self._run()
+        except:
+            logging.info('\nPre-mortem informations:')
+            self.em.log()
+            self.nm.log()
+            self.pt.log()
+            self.tm.log()
+            self.logQueuedEvents()
+            raise
+
+    def _run(self):
         """Make sure that the status is sane and start a loop."""
         if len(self.name) == 0:
             raise RuntimeError, 'cluster name must be non-empty'
@@ -301,6 +313,15 @@
             conn.setPeerId(msg_id)
             some_callable(conn, *args, **kwargs)
 
+    def logQueuedEvents(self):
+        if self.event_queue is None:
+            return
+        logging.info("Pending events:")
+        for event, _msg_id, _conn, args, _kwargs in self.event_queue:
+            oid, serial, _compression, _checksum, data, tid, time = args
+            logging.info('  %r: %r:%r by %r -> %r (%r)', event.__name__, dump(oid),
+                    dump(serial), dump(tid), data, time)
+
     def shutdown(self, erase=False):
         """Close all connections and exit"""
         for c in self.em.getConnectionList():

Modified: trunk/neo/storage/transactions.py
==============================================================================
--- trunk/neo/storage/transactions.py [iso-8859-1] (original)
+++ trunk/neo/storage/transactions.py [iso-8859-1] Mon May 24 12:25:44 2010
@@ -280,3 +280,13 @@
     def loadLocked(self, oid):
         return oid in self._load_lock_dict
 
+    def log(self):
+        logging.info("Transactions: %r",
+                [dump(x) for x in self._transaction_dict.keys()])
+        logging.info('  Read locks:')
+        for oid, tid in self._load_lock_dict.items():
+            logging.info('    %r by %r', dump(oid), dump(tid))
+        logging.info('  Write locks:')
+        for oid, tid in self._store_lock_dict.items():
+            logging.info('    %r by %r', dump(oid), dump(tid))
+





More information about the Neo-report mailing list