Rev 5321: (mbp) flush stream parts after each length-prefixed bit, in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Fri Jun 25 10:56:17 BST 2010
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 5321 [merge]
revision-id: pqm at pqm.ubuntu.com-20100625095607-7bpodm8gbt160big
parent: pqm at pqm.ubuntu.com-20100625042410-r2zawge1wxx9ma9p
parent: mbp at sourcefrog.net-20100625050347-4b137tj93aaxgync
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2010-06-25 10:56:07 +0100
message:
(mbp) flush stream parts after each length-prefixed bit,
like we do when sending (Martin Pool)
modified:
bzrlib/smart/protocol.py protocol.py-20061108035435-ot0lstk2590yqhzr-1
bzrlib/tests/test_smart_transport.py test_ssh_transport.py-20060608202016-c25gvf1ob7ypbus6-2
=== modified file 'bzrlib/smart/protocol.py'
--- a/bzrlib/smart/protocol.py 2010-03-26 04:26:55 +0000
+++ b/bzrlib/smart/protocol.py 2010-06-11 05:57:09 +0000
@@ -1231,6 +1231,7 @@
if first_chunk is None:
first_chunk = chunk
self._write_prefixed_body(chunk)
+ self.flush()
if 'hpssdetail' in debug.debug_flags:
# Not worth timing separately, as _write_func is
# actually buffered
=== modified file 'bzrlib/tests/test_smart_transport.py'
--- a/bzrlib/tests/test_smart_transport.py 2010-06-16 05:47:02 +0000
+++ b/bzrlib/tests/test_smart_transport.py 2010-06-25 09:56:07 +0000
@@ -2864,9 +2864,10 @@
self.responder = protocol.ProtocolThreeResponder(self.writes.append)
def assertWriteCount(self, expected_count):
+ # self.writes can be quite large; don't show the whole thing
self.assertEqual(
expected_count, len(self.writes),
- "Too many writes: %r" % (self.writes,))
+ "Too many writes: %d, expected %d" % (len(self.writes), expected_count))
def test_send_error_writes_just_once(self):
"""An error response is written to the medium all at once."""
@@ -2895,22 +2896,9 @@
response = _mod_request.SuccessfulSmartServerResponse(
('arg', 'arg'), body_stream=['chunk1', 'chunk2'])
self.responder.send_response(response)
- # We will write just once, despite the multiple chunks, due to
- # buffering.
- self.assertWriteCount(1)
-
- def test_send_response_with_body_stream_flushes_buffers_sometimes(self):
- """When there are many bytes (>1MB), multiple writes will occur rather
- than buffering indefinitely.
- """
- # Construct a response with stream with ~1.5MB in it. This should
- # trigger 2 writes, but not 3
- onekib = '12345678' * 128
- body_stream = [onekib] * (1024 + 512)
- response = _mod_request.SuccessfulSmartServerResponse(
- ('arg', 'arg'), body_stream=body_stream)
- self.responder.send_response(response)
- self.assertWriteCount(2)
+ # Per the discussion in bug 590638 we flush once after the header and
+ # then once after each chunk
+ self.assertWriteCount(3)
class TestSmartClientUnicode(tests.TestCase):
More information about the bazaar-commits
mailing list