diff options
author | Rohit Jaiswal <rohit.jaiswal@hp.com> | 2015-08-25 23:30:18 +0000 |
---|---|---|
committer | Rohit Jaiswal <rohit.jaiswal@hp.com> | 2015-09-15 15:56:00 +0000 |
commit | 7005d98f47be809243d627cee7ca594390cddec2 (patch) | |
tree | 25d263a22b3c0ade55c0735ad832da62c4f84057 | |
parent | 6a5642bbc2774a76ee61ed8874be77520e57466c (diff) | |
download | ceilometermiddleware-7005d98f47be809243d627cee7ca594390cddec2.tar.gz |
Ignore request with swift.source in env0.3.0
swift.source in env indicates request
that originate in swift middleware as a side
effect of another client request.
These requests should not be metered, this
fix adds a check for swift.source in env
and avoids generating a metering event.
Change-Id: I2ecbde8667cc366b192a2248abc93d0936956978
Closes-bug: 1485711
-rw-r--r-- | ceilometermiddleware/swift.py | 5 | ||||
-rw-r--r-- | ceilometermiddleware/tests/test_swift.py | 13 |
2 files changed, 16 insertions, 2 deletions
diff --git a/ceilometermiddleware/swift.py b/ceilometermiddleware/swift.py index 0235628..9d09c1a 100644 --- a/ceilometermiddleware/swift.py +++ b/ceilometermiddleware/swift.py @@ -161,9 +161,10 @@ class Swift(object): @_log_and_ignore_error def emit_event(self, env, bytes_received, bytes_sent, outcome='success'): - if (env.get('HTTP_X_SERVICE_PROJECT_ID') or + if ((env.get('HTTP_X_SERVICE_PROJECT_ID') or env.get('HTTP_X_PROJECT_ID') or - env.get('HTTP_X_TENANT_ID')) in self.ignore_projects: + env.get('HTTP_X_TENANT_ID')) in self.ignore_projects or + env.get('swift.source') is not None): return path = urlparse.quote(env['PATH_INFO']) diff --git a/ceilometermiddleware/tests/test_swift.py b/ceilometermiddleware/tests/test_swift.py index 2ca0be9..4df627d 100644 --- a/ceilometermiddleware/tests/test_swift.py +++ b/ceilometermiddleware/tests/test_swift.py @@ -381,3 +381,16 @@ class TestSwift(tests_base.TestCase): self.assertIsNone(metadata['container']) self.assertIsNone(metadata['object']) self.assertEqual('head', data[2]['target']['action']) + + def test_put_with_swift_source(self): + app = swift.Swift(FakeApp(), {}) + + req = FakeRequest( + '/1.0/account/container/obj', + environ={'REQUEST_METHOD': 'PUT', + 'wsgi.input': + six.moves.cStringIO('some stuff'), + 'swift.source': 'RL'}) + with mock.patch('oslo_messaging.Notifier.info') as notify: + list(app(req.environ, self.start_response)) + self.assertEqual(False, notify.called) |