server: Log additional information for discovery
discovery_error is called from both exception and normal
execution contexts.
In exception context print_exception prints the exception
class and message. Print the exception class and message
when invoked in normal context.
Resolves: openbmc/openbmc#2718
Change-Id: Ia6ab9c9d663161028f47e17af2f73bfe801af399
Signed-off-by: Brad Bishop <bradleyb@@fuzziesquirrel.com>
diff --git a/obmc/mapper/server.py b/obmc/mapper/server.py
index de5d65d..d18c609 100644
--- a/obmc/mapper/server.py
+++ b/obmc/mapper/server.py
@@ -270,11 +270,19 @@
we were attempting to introspect.'''
if owner in self.defer_signals:
+
+ # Safe to add a reference to the traceback here,
+ # since it cannot contain the discovery_error frame.
+ exctype, value, tb = sys.exc_info()
sys.stderr.write(
'{} discovery failure on {}\n'.format(
self.bus_map.get(owner, owner),
path))
- traceback.print_exception(*sys.exc_info(), file=sys.stderr)
+ if tb:
+ traceback.print_exception(exctype, value, tb, file=sys.stderr)
+ else:
+ sys.stderr.write('{}: {}\n'.format(e.__class__.__name__, e))
+
del self.defer_signals[owner]
del self.bus_map[owner]