Iterates swift response earlier to get the correct status
We must iterate the next middleware app until we get a response before asking for the headers and status. Closes-bug: #1326250 Change-Id: I8947bc88754db93e3ebe01ea864c4b489d1bd870
This commit is contained in:
parent
6b85ba46c8
commit
163710cb1a
@ -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,
|
||||
|
@ -39,13 +39,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(tests_base.BaseTestCase):
|
||||
|
Loading…
Reference in New Issue
Block a user