From 7005d98f47be809243d627cee7ca594390cddec2 Mon Sep 17 00:00:00 2001 From: Rohit Jaiswal Date: Tue, 25 Aug 2015 23:30:18 +0000 Subject: [PATCH] Ignore request with swift.source in env 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 --- ceilometermiddleware/swift.py | 5 +++-- 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)