server: skip logging of ECONNRESET
I believe this was exposed by
5492dc20, because the sending of the 500
would have already failed and prevented this logging. On Python 3,
this will be a ConnectionResetError, which is a subtype of OSError,
which is why we check for both OSError and socket.error.
Bonus: this fixes a race in test-hgweb.t where sometimes the
ECONNRESET wouldn't happen, because now we just don't log those
errors.
Differential Revision: https://phab.mercurial-scm.org/D5764
--- a/mercurial/hgweb/server.py Wed Jan 30 18:32:11 2019 -0500
+++ b/mercurial/hgweb/server.py Wed Jan 30 17:24:57 2019 -0500
@@ -100,16 +100,18 @@
def do_POST(self):
try:
self.do_write()
- except Exception:
+ except Exception as e:
# I/O below could raise another exception. So log the original
# exception first to ensure it is recorded.
- tb = r"".join(traceback.format_exception(*sys.exc_info()))
- # We need a native-string newline to poke in the log
- # message, because we won't get a newline when using an
- # r-string. This is the easy way out.
- newline = chr(10)
- self.log_error(r"Exception happened during processing "
- r"request '%s':%s%s", self.path, newline, tb)
+ if not (isinstance(e, (OSError, socket.error))
+ and e.errno == errno.ECONNRESET):
+ tb = r"".join(traceback.format_exception(*sys.exc_info()))
+ # We need a native-string newline to poke in the log
+ # message, because we won't get a newline when using an
+ # r-string. This is the easy way out.
+ newline = chr(10)
+ self.log_error(r"Exception happened during processing "
+ r"request '%s':%s%s", self.path, newline, tb)
self._start_response(r"500 Internal Server Error", [])
self._write(b"Internal Server Error")
--- a/tests/test-hgweb.t Wed Jan 30 18:32:11 2019 -0500
+++ b/tests/test-hgweb.t Wed Jan 30 17:24:57 2019 -0500
@@ -911,18 +911,6 @@
errors
$ cat errors.log | "$PYTHON" $TESTDIR/filtertraceback.py
- $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/?cmd=spam': (glob)
- Traceback (most recent call last):
- error: [Errno 104] $ECONNRESET$
-
- $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/spam': (glob)
- Traceback (most recent call last):
- error: [Errno 104] $ECONNRESET$
-
- $LOCALIP - - [$ERRDATE$] Exception happened during processing request '/spam/tip/foo': (glob)
- Traceback (most recent call last):
- error: [Errno 104] $ECONNRESET$
-
$ rm -f errors.log
Uncaught exceptions result in a logged error and canned HTTP response