##// END OF EJS Templates
wireprotov2peer: wait for initial object before resolving future...
Gregory Szorc -
r40790:15a64330 stable
parent child Browse files
Show More
@@ -377,25 +377,30 b' class clienthandler(object):'
377 377 # This can raise. The caller can handle it.
378 378 response._onresponsedata(meta['data'])
379 379
380 # If we got a content redirect response, we want to fetch it and
381 # expose the data as if we received it inline. But we also want to
382 # keep our internal request accounting in order. Our strategy is to
383 # basically put meaningful response handling on pause until EOS occurs
384 # and the stream accounting is in a good state. At that point, we follow
385 # the redirect and replace the response object with its data.
380 # We need to be careful about resolving futures prematurely. If a
381 # response is a redirect response, resolving the future before the
382 # redirect is processed would result in the consumer seeing an
383 # empty stream of objects, since they'd be consuming our
384 # response.objects() instead of the redirect's response.objects().
385 #
386 # Our strategy is to not resolve/finish the request until either
387 # EOS occurs or until the initial response object is fully received.
386 388
387 redirect = response._redirect
388 handlefuture = False if redirect else True
389
389 # Always react to eos.
390 390 if meta['eos']:
391 391 response._oninputcomplete()
392 392 del self._requests[frame.requestid]
393 393
394 if redirect:
395 self._followredirect(frame.requestid, redirect)
396 return
394 # Not EOS but we haven't decoded the initial response object yet.
395 # Return and wait for more data.
396 elif not response._seeninitial:
397 return
397 398
398 if not handlefuture:
399 # The specification says no objects should follow the initial/redirect
400 # object. So it should be safe to handle the redirect object if one is
401 # decoded, without having to wait for EOS.
402 if response._redirect:
403 self._followredirect(frame.requestid, response._redirect)
399 404 return
400 405
401 406 # If the command has a decoder, we wait until all input has been
General Comments 0
You need to be logged in to leave comments. Login now