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