]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Remove redundant logging of read errors in IOStream.
authorBen Darnell <ben@bendarnell.com>
Mon, 19 Nov 2012 02:35:36 +0000 (21:35 -0500)
committerBen Darnell <ben@bendarnell.com>
Mon, 19 Nov 2012 02:35:36 +0000 (21:35 -0500)
The logging in read_from_fd is generally redundant with logging at
higher levels - the error would be logged again in _handle_read,
or propagated from _try_inline_read.

Closes #632.

tornado/iostream.py
tornado/test/iostream_test.py

index 7f6ba7cac583f36d9633b04afd178155cac9c8ea..40ac4964fc59e9f3e6e0ae9b7b7b654d0f213a3a 100644 (file)
@@ -399,8 +399,6 @@ class BaseIOStream(object):
                 # be available on self.error for apps that care).
                 self.close()
                 return
-            gen_log.warning("Read error on %d: %s",
-                            self.fileno(), e)
             self.close()
             raise
         if chunk is None:
index 1177adbfcd23e8e1b42d27c7a5c9a88c67cc707b..28c1b78b041fbaaa1392c5a6c98770521cd86e1e 100644 (file)
@@ -390,6 +390,39 @@ class TestIOStreamMixin(object):
             server.close()
             client.close()
 
+    def test_inline_read_error(self):
+        # An error on an inline read is raised without logging (on the
+        # assumption that it will eventually be noticed or logged further
+        # up the stack).
+        server, client = self.make_iostream_pair()
+        try:
+            os.close(server.socket.fileno())
+            with self.assertRaises(socket.error):
+                server.read_bytes(1, lambda data: None)
+        finally:
+            server.close()
+            client.close()
+
+    def test_async_read_error_logging(self):
+        # Socket errors on asynchronous reads should be logged (but only
+        # once).
+        server, client = self.make_iostream_pair()
+        server.set_close_callback(self.stop)
+        try:
+            # Start a read that will be fullfilled asynchronously.
+            server.read_bytes(1, lambda data: None)
+            client.write(b('a'))
+            # Stub out read_from_fd to make it fail.
+            def fake_read_from_fd():
+                os.close(server.socket.fileno())
+                server.__class__.read_from_fd(server)
+            server.read_from_fd = fake_read_from_fd
+            # This log message is from _handle_read (not read_from_fd).
+            with ExpectLog(gen_log, "error on read"):
+                self.wait()
+        finally:
+            server.close()
+            client.close()
 
 class TestIOStreamWebHTTP(TestIOStreamWebMixin, AsyncHTTPTestCase):
     def _make_client_iostream(self):