summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-12-03 11:08:59 +0000
committerGerrit Code Review <review@openstack.org>2014-12-03 11:08:59 +0000
commit5793196e2ea46294a9ac865222ddeb3406c8f12d (patch)
tree1bfca62bd2fad4b8067e0eac7ef8eac1bfbc6075
parent449f9d5523d732d37785064627425c0459aa2505 (diff)
parentc837d83e752d979194e3721f6047b722106c5569 (diff)
downloadceilometer-5793196e2ea46294a9ac865222ddeb3406c8f12d.tar.gz
Merge "Iterates swift response earlier to get the correct status" into stable/icehouse
-rw-r--r--ceilometer/objectstore/swift_middleware.py14
-rw-r--r--ceilometer/tests/objectstore/test_swift_middleware.py4
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):