~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/protocol.py

  • Committer: Patch Queue Manager
  • Date: 2011-09-22 14:12:18 UTC
  • mfrom: (6155.3.1 jam)
  • Revision ID: pqm@pqm.ubuntu.com-20110922141218-86s4uu6nqvourw4f
(jameinel) Cleanup comments bzrlib/smart/__init__.py (John A Meinel)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006, 2007 Canonical Ltd
 
1
# Copyright (C) 2006-2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
22
22
from cStringIO import StringIO
23
23
import struct
24
24
import sys
 
25
import thread
25
26
import threading
26
27
import time
27
28
 
61
62
 
62
63
def _encode_tuple(args):
63
64
    """Encode the tuple args to a bytestream."""
64
 
    return '\x01'.join(args) + '\n'
 
65
    joined = '\x01'.join(args) + '\n'
 
66
    if type(joined) is unicode:
 
67
        # XXX: We should fix things so this never happens!  -AJB, 20100304
 
68
        mutter('response args contain unicode, should be only bytes: %r',
 
69
               joined)
 
70
        joined = joined.encode('ascii')
 
71
    return joined
65
72
 
66
73
 
67
74
class Requester(object):
647
654
        """Make a remote call with a readv array.
648
655
 
649
656
        The body is encoded with one line per readv offset pair. The numbers in
650
 
        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.
651
658
        """
652
659
        if 'hpss' in debug.debug_flags:
653
660
            mutter('hpss call w/readv: %s', repr(args)[1:-1])
1066
1073
class _ProtocolThreeEncoder(object):
1067
1074
 
1068
1075
    response_marker = request_marker = MESSAGE_VERSION_THREE
 
1076
    BUFFER_SIZE = 1024*1024 # 1 MiB buffer before flushing
1069
1077
 
1070
1078
    def __init__(self, write_func):
1071
1079
        self._buf = []
 
1080
        self._buf_len = 0
1072
1081
        self._real_write_func = write_func
1073
1082
 
1074
1083
    def _write_func(self, bytes):
1081
1090
        #       Note that osutils.send_all always sends 64kB chunks anyway, so
1082
1091
        #       we might just push out smaller bits at a time?
1083
1092
        self._buf.append(bytes)
1084
 
        if len(self._buf) > 100:
 
1093
        self._buf_len += len(bytes)
 
1094
        if self._buf_len > self.BUFFER_SIZE:
1085
1095
            self.flush()
1086
1096
 
1087
1097
    def flush(self):
1088
1098
        if self._buf:
1089
1099
            self._real_write_func(''.join(self._buf))
1090
1100
            del self._buf[:]
 
1101
            self._buf_len = 0
1091
1102
 
1092
1103
    def _serialise_offsets(self, offsets):
1093
1104
        """Serialise a readv offset list."""
1143
1154
        self.response_sent = False
1144
1155
        self._headers = {'Software version': bzrlib.__version__}
1145
1156
        if 'hpss' in debug.debug_flags:
1146
 
            self._thread_id = threading.currentThread().get_ident()
 
1157
            self._thread_id = thread.get_ident()
1147
1158
            self._response_start_time = None
1148
1159
 
1149
1160
    def _trace(self, action, message, extra_bytes=None, include_time=False):
1220
1231
                    if first_chunk is None:
1221
1232
                        first_chunk = chunk
1222
1233
                    self._write_prefixed_body(chunk)
 
1234
                    self.flush()
1223
1235
                    if 'hpssdetail' in debug.debug_flags:
1224
1236
                        # Not worth timing separately, as _write_func is
1225
1237
                        # actually buffered
1320
1332
        """Make a remote call with a readv array.
1321
1333
 
1322
1334
        The body is encoded with one line per readv offset pair. The numbers in
1323
 
        each pair are separated by a comma, and no trailing \n is emitted.
 
1335
        each pair are separated by a comma, and no trailing \\n is emitted.
1324
1336
        """
1325
1337
        if 'hpss' in debug.debug_flags:
1326
1338
            mutter('hpss call w/readv: %s', repr(args)[1:-1])