Occasionally clients to our RB 5.0.4/Ubuntu 22.04 get a HTTP 500 Internal Server Error when posting to RB. It appears email notifications do not go out when this occurs but the posting to RB is successful. Below is the RB log showing a traceback that seems to go back to a DNS timeout. Anyone have any ideas on how to resolve this or troubleshoot it further?
2023-05-16 13:28:53,171 - DEBUG - - reviewboard.reviews.models.review_request - Calculated issue counts for review request ID 4045 across 1 review(s): Resulting counts = {'O': 1, 'R': 0, 'D': 0, 'A': 0, 'B': 0}; DB values = <QuerySet [{'comments__pk': None, 'comments__issue_opened': None, 'comments__issue_status': None, 'file_attachment_comments__pk': 10089, 'file_attachment_comments__issue_opened': True, 'file_attachment_comments__issue_status': 'O', 'general_comments__pk': None, 'general_comments__issue_opened': None, 'general_comments__issue_status': None, 'screenshot_comments__pk': None, 'screenshot_comments__issue_opened': None, 'screenshot_comments__issue_status': None}]>; Field IDs = {'comments': set(), 'file_attachment_comments': {10089}, 'general_comments': set(), 'screenshot_comments': set()}
2023-05-16 13:28:53,248 - DEBUG - - djblets.cache.backend - Cache miss for key "<servername>:/:dmarc-record-<domain>.com"
2023-05-16 13:28:58,651 - ERROR - None - E1377138 - /api/review-requests/4045/reviews/31228/ - djblets.log.middleware - Exception thrown for user E1377138 at http://<servername>/api/review-requests/4045/reviews/31228/
The resolution lifetime expired after 5.402 seconds: Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.; Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.; Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/vary.py", line 20, in inner_func
response = func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/base.py", line 232, in __call__
result = self.call_method_view(
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/base.py", line 348, in call_method_view
return super(WebAPIResource, self).call_method_view(
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/mixins/api_tokens.py", line 62, in call_method_view
return super(ResourceAPITokenMixin, self).call_method_view(
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/mixins/oauth2_tokens.py", line 99, in call_method_view
return super(ResourceOAuth2TokenMixin, self).call_method_view(
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/base.py", line 429, in call_method_view
return view(request, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/base.py", line 545, in put
return self.update(request, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/util/decorators.py", line 47, in _call
f = augmented_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/decorators.py", line 170, in _check
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 177, in _checklogin
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 322, in _validate
return view_func(*args, **new_kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/resources/base_review.py", line 290, in update
return self.update_review(request, review, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/resources/review.py", line 121, in update_review
return super(ReviewResource, self).update_review(
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/resources/base_review.py", line 389, in update_review
review.publish(user=request.user,
File "/usr/local/lib/python3.10/dist-packages/reviewboard/reviews/models/review.py", line 420, in publish
review_published.send(sender=self.__class__,
File "/usr/local/lib/python3.10/dist-packages/django/dispatch/dispatcher.py", line 180, in send
return [
File "/usr/local/lib/python3.10/dist-packages/django/dispatch/dispatcher.py", line 181, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/signal_handlers.py", line 131, in send_review_published_mail
message, sent = send_email(prepare_review_published_mail,
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/utils.py", line 290, in send_email
message = email_builder(**kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/message.py", line 405, in prepare_review_published_mail
return prepare_base_review_request_mail(
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/message.py", line 237, in prepare_base_review_request_mail
return EmailMessage(subject=subject.strip(),
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/message.py", line 55, in __init__
super(EmailMessage, self).__init__(
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/message.py", line 234, in __init__
not is_email_allowed_by_dmarc(parsed_from_email))):
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 308, in is_email_allowed_by_dmarc
dmarc_record = get_dmarc_record(hostname)
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 255, in get_dmarc_record
record = _fetch_dmarc_record(hostname=hostname,
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 211, in _fetch_dmarc_record
record_str = cache_memoize(
File "/usr/local/lib/python3.10/dist-packages/djblets/cache/backend.py", line 965, in cache_memoize
data = lookup_callable()
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 213, in <lambda>
lambda: _fetch_record(),
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 202, in _fetch_record
return dns.resolver.resolve('_dmarc.%s' % hostname,
File "/usr/local/lib/python3.10/dist-packages/dns/resolver.py", line 1193, in resolve
return get_default_resolver().resolve(qname, rdtype, rdclass, tcp, source,
File "/usr/local/lib/python3.10/dist-packages/dns/resolver.py", line 1066, in resolve
timeout = self._compute_timeout(start, lifetime,
File "/usr/local/lib/python3.10/dist-packages/dns/resolver.py", line 879, in _compute_timeout
raise LifetimeTimeout(timeout=duration, errors=errors)
dns.resolver.LifetimeTimeout: The resolution lifetime expired after 5.402 seconds: Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.; Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.; Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.
2023-05-16 13:28:58,654 - ERROR - None - E1377138 - /api/review-requests/4045/reviews/31228/ - django.request - Internal Server Error: /api/review-requests/4045/reviews/31228/
Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/usr/local/lib/python3.10/dist-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/django/views/decorators/vary.py", line 20, in inner_func
response = func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/base.py", line 232, in __call__
result = self.call_method_view(
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/base.py", line 348, in call_method_view
return super(WebAPIResource, self).call_method_view(
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/mixins/api_tokens.py", line 62, in call_method_view
return super(ResourceAPITokenMixin, self).call_method_view(
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/mixins/oauth2_tokens.py", line 99, in call_method_view
return super(ResourceOAuth2TokenMixin, self).call_method_view(
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/base.py", line 429, in call_method_view
return view(request, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/resources/base.py", line 545, in put
return self.update(request, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/util/decorators.py", line 47, in _call
f = augmented_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/decorators.py", line 170, in _check
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 177, in _checklogin
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 156, in _call
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/djblets/webapi/decorators.py", line 322, in _validate
return view_func(*args, **new_kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/resources/base_review.py", line 290, in update
return self.update_review(request, review, *args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/resources/review.py", line 121, in update_review
return super(ReviewResource, self).update_review(
File "/usr/local/lib/python3.10/dist-packages/reviewboard/webapi/resources/base_review.py", line 389, in update_review
review.publish(user=request.user,
File "/usr/local/lib/python3.10/dist-packages/reviewboard/reviews/models/review.py", line 420, in publish
review_published.send(sender=self.__class__,
File "/usr/local/lib/python3.10/dist-packages/django/dispatch/dispatcher.py", line 180, in send
return [
File "/usr/local/lib/python3.10/dist-packages/django/dispatch/dispatcher.py", line 181, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/signal_handlers.py", line 131, in send_review_published_mail
message, sent = send_email(prepare_review_published_mail,
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/utils.py", line 290, in send_email
message = email_builder(**kwargs)
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/message.py", line 405, in prepare_review_published_mail
return prepare_base_review_request_mail(
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/message.py", line 237, in prepare_base_review_request_mail
return EmailMessage(subject=subject.strip(),
File "/usr/local/lib/python3.10/dist-packages/reviewboard/notifications/email/message.py", line 55, in __init__
super(EmailMessage, self).__init__(
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/message.py", line 234, in __init__
not is_email_allowed_by_dmarc(parsed_from_email))):
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 308, in is_email_allowed_by_dmarc
dmarc_record = get_dmarc_record(hostname)
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 255, in get_dmarc_record
record = _fetch_dmarc_record(hostname=hostname,
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 211, in _fetch_dmarc_record
record_str = cache_memoize(
File "/usr/local/lib/python3.10/dist-packages/djblets/cache/backend.py", line 965, in cache_memoize
data = lookup_callable()
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 213, in <lambda>
lambda: _fetch_record(),
File "/usr/local/lib/python3.10/dist-packages/djblets/mail/dmarc.py", line 202, in _fetch_record
return dns.resolver.resolve('_dmarc.%s' % hostname,
File "/usr/local/lib/python3.10/dist-packages/dns/resolver.py", line 1193, in resolve
return get_default_resolver().resolve(qname, rdtype, rdclass, tcp, source,
File "/usr/local/lib/python3.10/dist-packages/dns/resolver.py", line 1066, in resolve
timeout = self._compute_timeout(start, lifetime,
File "/usr/local/lib/python3.10/dist-packages/dns/resolver.py", line 879, in _compute_timeout
raise LifetimeTimeout(timeout=duration, errors=errors)
dns.resolver.LifetimeTimeout: The resolution lifetime expired after 5.402 seconds: Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.; Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.; Server 127.0.0.53 UDP port 53 answered The DNS operation timed out.