diff options
author | Matthew Vernon <mvernon@wikimedia.org> | 2022-02-14 14:14:27 +0000 |
---|---|---|
committer | Matthew Vernon <mvernon@wikimedia.org> | 2022-02-15 14:29:14 +0000 |
commit | 89ee843080b5e4d6f142b8199414720dc01be116 (patch) | |
tree | 11ac3d56e0678861e229a15904b227e6163a128a | |
parent | 975d3dbcfe8ef7e8007444e5bb5c0b3f890e534e (diff) | |
download | swift-89ee843080b5e4d6f142b8199414720dc01be116.tar.gz |
swift-ring-builder: exit ERROR (2) on uncaught exceptions
swift-ring-builder has three exit statuses: 0 (OK), 1 (WARNING),
2 (ERROR). Uncaught exceptions in python result in an exit code of 1,
so for example problems writing a builder file to disk will result in
an exit of 1 (warning) rather than 2 (error).
This addresses that by overriding sys.excepthook to produce the usual
backtrace and then exit 2 (error); excepthook is called when an
exception is unhandled, unless that is SystemExit.
Closes-Bug: 1960657
Change-Id: I7cfeff4f436ade319cf21d0d29853931aef6d20f
-rwxr-xr-x | bin/swift-ring-builder | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/bin/swift-ring-builder b/bin/swift-ring-builder index 4f8517995..f89b47441 100755 --- a/bin/swift-ring-builder +++ b/bin/swift-ring-builder @@ -16,9 +16,22 @@ import sys +import traceback -from swift.cli.ringbuilder import main +# We exit code 1 on WARNING statuses, 2 on ERROR. This means we need +# to handle any uncaught exceptions by printing the usual backtrace, +# but then exiting 2 (not 1 as is usual for a python +# exception). + + +def exit_with_status_two(tp, val, tb): + traceback.print_exception(tp, val, tb) + sys.exit(2) +sys.excepthook = exit_with_status_two + +from swift.cli.ringbuilder import main + if __name__ == "__main__": sys.exit(main()) |