handle top-level exceptions as documented
Also let install failures be handled at this level.
This commit is contained in:
parent
c77d6b402a
commit
4de9668a17
|
@ -93,17 +93,6 @@ class InstallController(SubiquityController):
|
|||
def tpath(self, *path):
|
||||
return os.path.join(self.model.target, *path)
|
||||
|
||||
def curtin_error(self):
|
||||
kw = {}
|
||||
if sys.exc_info()[0] is not None:
|
||||
log.exception("curtin_error")
|
||||
# send traceback.format_exc() to journal?
|
||||
if self.tb_extractor.traceback:
|
||||
kw["Traceback"] = "\n".join(self.tb_extractor.traceback)
|
||||
self.app.fatal_error = self.app.make_apport_report(
|
||||
ErrorReportKind.INSTALL_FAIL, "install failed", **kw)
|
||||
self.app.update_state(ApplicationState.ERROR)
|
||||
|
||||
def logged_command(self, cmd):
|
||||
return ['systemd-cat', '--level-prefix=false',
|
||||
'--identifier=' + self.app.log_syslog_id] + cmd
|
||||
|
@ -258,7 +247,12 @@ class InstallController(SubiquityController):
|
|||
|
||||
self.app.update_state(ApplicationState.DONE)
|
||||
except Exception:
|
||||
self.curtin_error()
|
||||
kw = {}
|
||||
if self.tb_extractor.traceback:
|
||||
kw["Traceback"] = "\n".join(self.tb_extractor.traceback)
|
||||
self.app.make_apport_report(
|
||||
ErrorReportKind.INSTALL_FAIL, "install failed", **kw)
|
||||
raise
|
||||
|
||||
async def drain_curtin_events(self, *, context):
|
||||
waited = 0.0
|
||||
|
|
|
@ -245,6 +245,20 @@ class SubiquityServer(Application):
|
|||
return self.error_reporter.make_apport_report(
|
||||
kind, thing, wait=wait, **kw)
|
||||
|
||||
def _exception_handler(self, loop, context):
|
||||
exc = context.get('exception')
|
||||
if exc is None:
|
||||
super()._exception_handler(loop, context)
|
||||
return
|
||||
report = self.error_reporter.report_for_exc(exc)
|
||||
log.error("top level error", exc_info=exc)
|
||||
if not report:
|
||||
report = self.make_apport_report(
|
||||
ErrorReportKind.UNKNOWN, "unknown error",
|
||||
exc=exc)
|
||||
self.fatal_error = report
|
||||
self.update_state(ApplicationState.ERROR)
|
||||
|
||||
@web.middleware
|
||||
async def middleware(self, request, handler):
|
||||
override_status = None
|
||||
|
|
Loading…
Reference in New Issue