Rev 5273: Currently really broken, but slowly trying to track down in http://bazaar.launchpad.net/~jameinel/bzr/leaking-test-experiment
John Arbash Meinel
john at arbash-meinel.com
Wed Jun 16 23:04:18 BST 2010
At http://bazaar.launchpad.net/~jameinel/bzr/leaking-test-experiment
------------------------------------------------------------
revno: 5273
revision-id: john at arbash-meinel.com-20100616220407-0wxbaelyq9yk0ky8
parent: v.ladeuil+lp at free.fr-20100612151036-10qaf6ufz72ntnnj
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: leaking-test-experiment
timestamp: Wed 2010-06-16 17:04:07 -0500
message:
Currently really broken, but slowly trying to track down
who is connecting on a given port, which isn't actually transmitting
any content. It doesn't seem to be the shutdown connection,
nor does it seem to be any of the _client requests...
-------------- next part --------------
=== modified file 'bzrlib/builtins.py'
--- a/bzrlib/builtins.py 2010-05-31 21:31:18 +0000
+++ b/bzrlib/builtins.py 2010-06-16 22:04:07 +0000
@@ -3574,6 +3574,8 @@
benchmarks,
tests,
)
+ import socket
+ socket.setdefaulttimeout(2.0)
# Make deprecation warnings visible, unless -Werror is set
symbol_versioning.activate_deprecation_warnings(override=False)
=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py 2010-06-11 07:16:51 +0000
+++ b/bzrlib/osutils.py 2010-06-16 22:04:07 +0000
@@ -1969,7 +1969,12 @@
"""
while 1:
try:
- bytes = sock.recv(max_read_size)
+ try:
+ bytes = sock.recv(max_read_size)
+ except:
+ sys.stderr.write("failure with socket timeout: %s, self: %s peer: %s\n"
+ % (sock.gettimeout(), sock.getsockname(), sock.getpeername()))
+ raise
except socket.error, e:
eno = e.args[0]
if eno == getattr(errno, "WSAECONNRESET", errno.ECONNRESET):
=== modified file 'bzrlib/smart/client.py'
--- a/bzrlib/smart/client.py 2010-02-17 17:11:16 +0000
+++ b/bzrlib/smart/client.py 2010-06-16 22:04:07 +0000
@@ -61,6 +61,10 @@
encoder.call_with_body_stream((method, ) + args, body_stream)
else:
encoder.call(method, *args)
+ import sys
+ sys.stderr.write("sent request for %s on %s peer: %s\n"
+ % (method, self._medium._socket.getsockname(),
+ self._medium._socket.getpeername()))
return response_handler
def _run_call_hooks(self, method, args, body, readv_body):
=== modified file 'bzrlib/smart/medium.py'
--- a/bzrlib/smart/medium.py 2010-05-03 04:08:50 +0000
+++ b/bzrlib/smart/medium.py 2010-06-16 22:04:07 +0000
@@ -268,7 +268,9 @@
"""
SmartServerStreamMedium.__init__(
self, backing_transport, root_client_path=root_client_path)
- sock.setblocking(True)
+ # import pdb; pdb.set_trace()
+ # sock.setblocking(True)
+ sock.settimeout(1.0)
self.socket = sock
def _serve_one_request_unguarded(self, protocol):
@@ -285,8 +287,14 @@
self._push_back(protocol.unused_data)
def _read_bytes(self, desired_count):
- return osutils.read_bytes_from_socket(
- self.socket, self._report_activity)
+ try:
+ return osutils.read_bytes_from_socket(
+ self.socket, self._report_activity)
+ except socket.timeout:
+ sys.stderr.write('timeout while wanting to read %d bytes on %s peer: %s\n'
+ % (desired_count, self.socket.getsockname(),
+ self.socket.getpeername()))
+ raise
def terminate_due_to_error(self):
# TODO: This should log to a server log file, but no such thing
=== modified file 'bzrlib/smart/server.py'
--- a/bzrlib/smart/server.py 2010-05-31 13:51:12 +0000
+++ b/bzrlib/smart/server.py 2010-06-16 22:04:07 +0000
@@ -89,7 +89,7 @@
self._sockname = self._server_socket.getsockname()
self.port = self._sockname[1]
self._server_socket.listen(1)
- self._server_socket.settimeout(1)
+ self._server_socket.settimeout(0.5)
self.backing_transport = backing_transport
self._started = threading.Event()
self._stopped = threading.Event()
@@ -206,10 +206,13 @@
if not self._stopped.isSet():
# server has not stopped (though it may be stopping)
# its likely in accept(), so give it a connection
+ sys.stderr.write('stopping the background thread by doing a no-op connection\n')
temp_socket = socket.socket()
temp_socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
if not temp_socket.connect_ex(self._sockname):
# and close it immediately: we dont choose to send any requests.
+ sys.stderr.write('no-op connection connected @ %s, closing\n'
+ % (temp_socket.getsockname(),))
temp_socket.close()
self._stopped.wait()
self._server_thread.join()
=== modified file 'bzrlib/tests/test_server.py'
--- a/bzrlib/tests/test_server.py 2010-06-12 15:10:35 +0000
+++ b/bzrlib/tests/test_server.py 2010-06-16 22:04:07 +0000
@@ -584,6 +584,7 @@
self.server.serve()
def stop_server(self):
+ sys.stderr.write('Stopping server @ %s\n' % (self.server,))
if self.server is None:
return
try:
@@ -605,6 +606,9 @@
# server thread, it may happen that it's not blocked or even
# not started.
pass
+ else:
+ sys.stderr.write("Shutting down server with connection @ %s\n"
+ % (last_conn.getsockname(),))
# We start shutting down the client while the server itself is
# shutting down.
self.server.stop_client_connections()
@@ -701,11 +705,17 @@
This should be called only when no other thread is trying to use the
socket.
"""
+ import sys
+ sys.stderr.write("shutting down client socket @ %s peer %s\n" %
+ (client_socket.getsockname(),
+ client_socket.getpeername()))
try:
# The request process has been completed, the thread is about to
# die, let's shutdown the socket if we can.
client_socket.shutdown(socket.SHUT_RDWR)
except (socket.error, select.error), e:
+ print "shutting down failed with: %s" % (e,)
+ sys.stderr.write("shutting down failed with %s\n" % (e,))
if e[0] in (errno.EBADF, errno.ENOTCONN):
# Right, the socket is already down
pass
@@ -715,6 +725,7 @@
def stop_server(self):
self.stop_background_thread()
# Let's close all our pending clients too
+ sys.stderr.write('shutting down %d clients\n' % (len(self.clients),))
for sock, thread in self.clients:
self.shutdown_client(sock)
thread.join()
More information about the bazaar-commits
mailing list