diff options
author | Jenkins <jenkins@review.openstack.org> | 2014-12-03 11:08:59 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2014-12-03 11:08:59 +0000 |
commit | 5793196e2ea46294a9ac865222ddeb3406c8f12d (patch) | |
tree | 1bfca62bd2fad4b8067e0eac7ef8eac1bfbc6075 | |
parent | 449f9d5523d732d37785064627425c0459aa2505 (diff) | |
parent | c837d83e752d979194e3721f6047b722106c5569 (diff) | |
download | ceilometer-5793196e2ea46294a9ac865222ddeb3406c8f12d.tar.gz |
Merge "Iterates swift response earlier to get the correct status" into stable/icehouse
-rw-r--r-- | ceilometer/objectstore/swift_middleware.py | 14 | ||||
-rw-r--r-- | ceilometer/tests/objectstore/test_swift_middleware.py | 4 |
2 files changed, 14 insertions, 4 deletions
diff --git a/ceilometer/objectstore/swift_middleware.py b/ceilometer/objectstore/swift_middleware.py index 10431840..3d75b35e 100644 --- a/ceilometer/objectstore/swift_middleware.py +++ b/ceilometer/objectstore/swift_middleware.py @@ -93,14 +93,22 @@ class CeilometerMiddleware(object): start_response_args[0] = (status, list(headers), exc_info) def iter_response(iterable): + iterator = iter(iterable) + try: + chunk = iterator.next() + while not chunk: + chunk = iterator.next() + except StopIteration: + chunk = '' + if start_response_args[0]: start_response(*start_response_args[0]) bytes_sent = 0 try: - for chunk in iterable: - if chunk: - bytes_sent += len(chunk) + while chunk: + bytes_sent += len(chunk) yield chunk + chunk = iterator.next() finally: try: self.publish_sample(env, diff --git a/ceilometer/tests/objectstore/test_swift_middleware.py b/ceilometer/tests/objectstore/test_swift_middleware.py index 7f3e0084..3a70bb11 100644 --- a/ceilometer/tests/objectstore/test_swift_middleware.py +++ b/ceilometer/tests/objectstore/test_swift_middleware.py @@ -34,13 +34,15 @@ class FakeApp(object): self.body = body def __call__(self, env, start_response): + yield start_response('200 OK', [ ('Content-Type', 'text/plain'), ('Content-Length', str(sum(map(len, self.body)))) ]) while env['wsgi.input'].read(5): pass - return self.body + for line in self.body: + yield line class TestSwiftMiddleware(test.BaseTestCase): |