From 557335465561b7a00d08cc5a370d5fcd6e7d83b0 Mon Sep 17 00:00:00 2001 From: Tim Burke Date: Sat, 1 Jun 2019 10:46:54 -0700 Subject: [PATCH] Move calls to self.app outside of error handling On py3, if/when you hit an error, you can get very noisy tracebacks like During handling of the above exception, another exception occurred: In general, I like this, but when we've used exception handling for flow-control, it gets difficult to separate the wheat from the chaff. Change-Id: I5f3bc6416207cab2c7e3a77ee6689360b55990e7 --- swift/common/middleware/copy.py | 3 +++ swift/common/middleware/crypto/decrypter.py | 3 +++ swift/common/middleware/dlo.py | 3 +++ swift/common/middleware/listing_formats.py | 4 ++++ swift/common/middleware/s3api/s3api.py | 6 +++++- swift/common/middleware/slo.py | 3 +++ swift/common/middleware/symlink.py | 3 +++ swift/common/middleware/versioned_writes.py | 3 +++ 8 files changed, 27 insertions(+), 1 deletion(-) diff --git a/swift/common/middleware/copy.py b/swift/common/middleware/copy.py index 3890030aeb..be081bbe06 100644 --- a/swift/common/middleware/copy.py +++ b/swift/common/middleware/copy.py @@ -225,7 +225,10 @@ class ServerSideCopyMiddleware(object): req = Request(env) try: (version, account, container, obj) = req.split_path(4, 4, True) + is_obj_req = True except ValueError: + is_obj_req = False + if not is_obj_req: # If obj component is not present in req, do not proceed further. return self.app(env, start_response) diff --git a/swift/common/middleware/crypto/decrypter.py b/swift/common/middleware/crypto/decrypter.py index bcc3e4334f..94efd1edf3 100644 --- a/swift/common/middleware/crypto/decrypter.py +++ b/swift/common/middleware/crypto/decrypter.py @@ -433,7 +433,10 @@ class Decrypter(object): req = Request(env) try: parts = req.split_path(3, 4, True) + is_cont_or_obj_req = True except ValueError: + is_cont_or_obj_req = False + if not is_cont_or_obj_req: return self.app(env, start_response) if parts[3] and req.method in ('GET', 'HEAD'): diff --git a/swift/common/middleware/dlo.py b/swift/common/middleware/dlo.py index 5334b1037f..d8ca81776c 100644 --- a/swift/common/middleware/dlo.py +++ b/swift/common/middleware/dlo.py @@ -420,7 +420,10 @@ class DynamicLargeObject(object): req = Request(env) try: vrs, account, container, obj = req.split_path(4, 4, True) + is_obj_req = True except ValueError: + is_obj_req = False + if not is_obj_req: return self.app(env, start_response) if ((req.method == 'GET' or req.method == 'HEAD') and diff --git a/swift/common/middleware/listing_formats.py b/swift/common/middleware/listing_formats.py index 7fcd7ff339..1924facd8f 100644 --- a/swift/common/middleware/listing_formats.py +++ b/swift/common/middleware/listing_formats.py @@ -128,6 +128,10 @@ class ListingFilter(object): # account and container only version, acct, cont = req.split_path(2, 3) except ValueError: + is_container_req = False + else: + is_container_req = True + if not is_container_req: return self.app(env, start_response) if not valid_api_version(version) or req.method not in ('GET', 'HEAD'): diff --git a/swift/common/middleware/s3api/s3api.py b/swift/common/middleware/s3api/s3api.py index 9682714f64..317c0a1002 100644 --- a/swift/common/middleware/s3api/s3api.py +++ b/swift/common/middleware/s3api/s3api.py @@ -119,7 +119,11 @@ class ListingEtagMiddleware(object): if not valid_api_version(v): raise ValueError except ValueError: - # not a container request; pass through + is_container_req = False + else: + is_container_req = True + if not is_container_req: + # pass through return self.app(env, start_response) ctx = WSGIContext(self.app) diff --git a/swift/common/middleware/slo.py b/swift/common/middleware/slo.py index 8f10fb07a7..d2e1acd7fe 100644 --- a/swift/common/middleware/slo.py +++ b/swift/common/middleware/slo.py @@ -1511,7 +1511,10 @@ class StaticLargeObject(object): req = Request(env) try: vrs, account, container, obj = req.split_path(3, 4, True) + is_cont_or_obj_req = True except ValueError: + is_cont_or_obj_req = False + if not is_cont_or_obj_req: return self.app(env, start_response) if not obj: diff --git a/swift/common/middleware/symlink.py b/swift/common/middleware/symlink.py index 9b6172aeea..768e37cdf6 100644 --- a/swift/common/middleware/symlink.py +++ b/swift/common/middleware/symlink.py @@ -551,7 +551,10 @@ class SymlinkMiddleware(object): req = Request(env) try: version, acc, cont, obj = req.split_path(3, 4, True) + is_cont_or_obj_req = True except ValueError: + is_cont_or_obj_req = False + if not is_cont_or_obj_req: return self.app(env, start_response) try: diff --git a/swift/common/middleware/versioned_writes.py b/swift/common/middleware/versioned_writes.py index e8f3794ce8..e451c5d28e 100644 --- a/swift/common/middleware/versioned_writes.py +++ b/swift/common/middleware/versioned_writes.py @@ -814,7 +814,10 @@ class VersionedWritesMiddleware(object): req = Request(env) try: (api_version, account, container, obj) = req.split_path(3, 4, True) + is_cont_or_obj_req = True except ValueError: + is_cont_or_obj_req = False + if not is_cont_or_obj_req: return self.app(env, start_response) # In case allow_versioned_writes is set in the filter configuration,