~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/protocol.py

Merge the bug #819604 client reconnect code into the bzr-2.4 series.

Only significant change is that 'heads_to_fetch' is a new RPC that needs to be documented.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1081
1081
        self._real_write_func = write_func
1082
1082
 
1083
1083
    def _write_func(self, bytes):
1084
 
        # TODO: It is probably more appropriate to use sum(map(len, _buf))
1085
 
        #       for total number of bytes to write, rather than buffer based on
1086
 
        #       the number of write() calls
1087
1084
        # TODO: Another possibility would be to turn this into an async model.
1088
1085
        #       Where we let another thread know that we have some bytes if
1089
1086
        #       they want it, but we don't actually block for it
1292
1289
        _ProtocolThreeEncoder.__init__(self, medium_request.accept_bytes)
1293
1290
        self._medium_request = medium_request
1294
1291
        self._headers = {}
 
1292
        self.body_stream_started = None
1295
1293
 
1296
1294
    def set_headers(self, headers):
1297
1295
        self._headers = headers.copy()
1357
1355
            if path is not None:
1358
1356
                mutter('                  (to %s)', path)
1359
1357
            self._request_start_time = osutils.timer_func()
 
1358
        self.body_stream_started = False
1360
1359
        self._write_protocol_version()
1361
1360
        self._write_headers(self._headers)
1362
1361
        self._write_structure(args)
1364
1363
        #       have finished sending the stream.  We would notice at the end
1365
1364
        #       anyway, but if the medium can deliver it early then it's good
1366
1365
        #       to short-circuit the whole request...
 
1366
        # Provoke any ConnectionReset failures before we start the body stream.
 
1367
        self.flush()
 
1368
        self.body_stream_started = True
1367
1369
        for exc_info, part in _iter_with_errors(stream):
1368
1370
            if exc_info is not None:
1369
1371
                # Iterating the stream failed.  Cleanly abort the request.