~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/server.py

  • Committer: John Arbash Meinel
  • Date: 2008-07-11 21:41:24 UTC
  • mto: This revision was merged to the branch mainline in revision 3543.
  • Revision ID: john@arbash-meinel.com-20080711214124-qi09irlj7pd5cuzg
Shortcut the case when one revision is in the ancestry of the other.

At the cost of a heads() check, when one parent supersedes, we don't have to extract
the text for the other. Changes merge time from 3m37s => 3m21s. Using a
CachingParentsProvider would drop the time down to 3m11s.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
    trace,
28
28
    transport,
29
29
)
30
 
from bzrlib.lazy_import import lazy_import
31
 
lazy_import(globals(), """
32
 
from bzrlib.smart import medium
33
 
""")
 
30
from bzrlib.smart.medium import SmartServerSocketStreamMedium
34
31
 
35
32
 
36
33
class SmartTCPServer(object):
62
59
        from socket import error as socket_error
63
60
        self._socket_error = socket_error
64
61
        self._socket_timeout = socket_timeout
65
 
        addrs = socket.getaddrinfo(host, port, socket.AF_UNSPEC, 
66
 
            socket.SOCK_STREAM, 0, socket.AI_PASSIVE)[0]
67
 
 
68
 
        (family, socktype, proto, canonname, sockaddr) = addrs
69
 
 
70
 
        self._server_socket = socket.socket(family, socktype, proto)
 
62
        self._server_socket = socket.socket()
71
63
        # SO_REUSERADDR has a different meaning on Windows
72
64
        if sys.platform != 'win32':
73
65
            self._server_socket.setsockopt(socket.SOL_SOCKET,
74
66
                socket.SO_REUSEADDR, 1)
75
67
        try:
76
 
            self._server_socket.bind(sockaddr)
 
68
            self._server_socket.bind((host, port))
77
69
        except self._socket_error, message:
78
70
            raise errors.CannotBindAddress(host, port, message)
79
71
        self._sockname = self._server_socket.getsockname()
155
147
        # propogates to the newly accepted socket.
156
148
        conn.setblocking(True)
157
149
        conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
158
 
        handler = medium.SmartServerSocketStreamMedium(
 
150
        handler = SmartServerSocketStreamMedium(
159
151
            conn, self.backing_transport, self.root_client_path)
160
152
        thread_name = 'smart-server-child' + thread_name_suffix
161
153
        connection_thread = threading.Thread(