Fix error e-mails sent to admins in response to expected HTTP 500 codes.

Review Request #12417 — Created June 27, 2022 and submitted — Latest diff uploaded

Information

Review Board
release-5.0.x

Reviewers

We hit a regression when deploying Review Board 5 to production. API
responses that returned a HTTP 500 (which we use to indicate an issue
usually with a service Review Board is talking to) were resulting in
e-mails sent to the administrations indicating a problem. These were
false-positives.

The problem has to do with a behavioral change in Django, which is less
than ideal. In older versions, uncaught exceptions would result in an
error log message, which in turn triggered a handler to send an e-mail.
If a HttpResponse instance was instead returned, it would be returned
as-is.

With the modern behavior, any HttpResponse with a HTTP 500+ would
trigger this e-mail behavior.

Fortunately, as part of the logging message, there's an exception
traceback in the uncaught exception case, but not in the standard
response case. We can use this to disable this behavior.

This requires setting an explicit LOGGING dictionary in settings.py.
The settings are documented as being based on Django 3.2's settings,
with our specific changes listed.

In all tests conducted, this brings us back to the behavior we've been
used to with prior versions of Django.

Ran without DEBUG.

Accessed APIs (e.g., /api/repository/1/info/) that returned HTTP 500+
responses. Didn't see a logged e-mail, but did see the logged HTTP line,
as expected.

Triggered an exception in a view. Saw a logged e-mail, as expected.

Commits

Files