/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/smart/protocol.py

  • Committer: Robert Collins
  • Date: 2010-05-06 11:08:10 UTC
  • mto: This revision was merged to the branch mainline in revision 5223.
  • Revision ID: robertc@robertcollins.net-20100506110810-h3j07fh5gmw54s25
Cleaner matcher matching revised unlocking protocol.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
client and server.
19
19
"""
20
20
 
21
 
from __future__ import absolute_import
22
 
 
23
21
import collections
24
22
from cStringIO import StringIO
25
23
import struct
26
24
import sys
27
25
import thread
 
26
import threading
28
27
import time
29
28
 
30
29
import bzrlib
655
654
        """Make a remote call with a readv array.
656
655
 
657
656
        The body is encoded with one line per readv offset pair. The numbers in
658
 
        each pair are separated by a comma, and no trailing \\n is emitted.
 
657
        each pair are separated by a comma, and no trailing \n is emitted.
659
658
        """
660
659
        if 'hpss' in debug.debug_flags:
661
660
            mutter('hpss call w/readv: %s', repr(args)[1:-1])
1082
1081
        self._real_write_func = write_func
1083
1082
 
1084
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
1085
1087
        # TODO: Another possibility would be to turn this into an async model.
1086
1088
        #       Where we let another thread know that we have some bytes if
1087
1089
        #       they want it, but we don't actually block for it
1229
1231
                    if first_chunk is None:
1230
1232
                        first_chunk = chunk
1231
1233
                    self._write_prefixed_body(chunk)
1232
 
                    self.flush()
1233
1234
                    if 'hpssdetail' in debug.debug_flags:
1234
1235
                        # Not worth timing separately, as _write_func is
1235
1236
                        # actually buffered
1290
1291
        _ProtocolThreeEncoder.__init__(self, medium_request.accept_bytes)
1291
1292
        self._medium_request = medium_request
1292
1293
        self._headers = {}
1293
 
        self.body_stream_started = None
1294
1294
 
1295
1295
    def set_headers(self, headers):
1296
1296
        self._headers = headers.copy()
1331
1331
        """Make a remote call with a readv array.
1332
1332
 
1333
1333
        The body is encoded with one line per readv offset pair. The numbers in
1334
 
        each pair are separated by a comma, and no trailing \\n is emitted.
 
1334
        each pair are separated by a comma, and no trailing \n is emitted.
1335
1335
        """
1336
1336
        if 'hpss' in debug.debug_flags:
1337
1337
            mutter('hpss call w/readv: %s', repr(args)[1:-1])
1356
1356
            if path is not None:
1357
1357
                mutter('                  (to %s)', path)
1358
1358
            self._request_start_time = osutils.timer_func()
1359
 
        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...
1367
 
        # Provoke any ConnectionReset failures before we start the body stream.
1368
 
        self.flush()
1369
 
        self.body_stream_started = True
1370
1366
        for exc_info, part in _iter_with_errors(stream):
1371
1367
            if exc_info is not None:
1372
1368
                # Iterating the stream failed.  Cleanly abort the request.