Fix handling of bad paths in Swift middleware
The path //v1/account does not denote any Swift resource. More importantly, if you call swift.common.utils.split_path() on it (as the Swift middleware does), then you get a ValueError. Since it's a bad path, it doesn't refer to any Swift resource, so there's no stats to publish, so we can just catch and ignore ValueError. Change-Id: I9908beef8478c5407985435c1526a9c72edb1d3a
This commit is contained in:
parent
f505ae11b7
commit
288a9d77c5
@ -114,7 +114,10 @@ class CeilometerMiddleware(object):
|
||||
|
||||
def publish_sample(self, env, bytes_received, bytes_sent):
|
||||
req = REQUEST.Request(env)
|
||||
version, account, container, obj = split_path(req.path, 1, 4, True)
|
||||
try:
|
||||
version, account, container, obj = split_path(req.path, 1, 4, True)
|
||||
except ValueError:
|
||||
return
|
||||
now = timeutils.utcnow().isoformat()
|
||||
|
||||
resource_metadata = {
|
||||
|
@ -240,3 +240,11 @@ class TestSwiftMiddleware(base.TestCase):
|
||||
self.assertEqual(data.resource_metadata['version'], '1.0')
|
||||
self.assertEqual(data.resource_metadata['container'], 'container')
|
||||
self.assertEqual(data.resource_metadata['object'], None)
|
||||
|
||||
def test_bogus_path(self):
|
||||
app = swift_middleware.CeilometerMiddleware(FakeApp(), {})
|
||||
req = Request.blank('//v1/account/container',
|
||||
environ={'REQUEST_METHOD': 'GET'})
|
||||
list(app(req.environ, self.start_response))
|
||||
samples = self.pipeline_manager.pipelines[0].samples
|
||||
self.assertEqual(len(samples), 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user