summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorMatthew Vernon <mvernon@wikimedia.org>2022-02-14 14:14:27 +0000
committerMatthew Vernon <mvernon@wikimedia.org>2022-02-15 14:29:14 +0000
commit89ee843080b5e4d6f142b8199414720dc01be116 (patch)
tree11ac3d56e0678861e229a15904b227e6163a128a /bin
parent975d3dbcfe8ef7e8007444e5bb5c0b3f890e534e (diff)
downloadswift-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
Diffstat (limited to 'bin')
-rwxr-xr-xbin/swift-ring-builder15
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())