Benachrichtigungen gehen gelegentlich verloren: `psycopg2.errors.AdminShutdown: terminating connection due to administrator command`
Beim Versand eines Gesprächsbeitrags im Web-Interface erscheint gelegentlich eine "Nachricht konnte nicht gesendet werden"-Meldung. Der Gesprächsbeitrag selbst kommt in diesem Fall an (ein Reload der Seite zeigt es), aber die abgeleitete Benachrichtigung ging verloren.
Die kurze Exception:
ERROR:django.request:Internal Server Error: /stadt/conversations/15126/
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/peewee.py", line 3129, in execute_sql
cursor.execute(sql, params or ())
psycopg2.errors.AdminShutdown: terminating connection due to administrator command
SSL connection has been closed unexpectedly
Die Langform:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/share/grouprise/dependencies/sentry_sdk/integrations/django/views.py", line 84, in sentry_wrapped_callback
return callback(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/contrib/auth/mixins.py", line 104, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/usr/share/grouprise/python-lib/grouprise/features/contributions/view_mixins.py", line 41, in post
return self.form_valid(form)
File "/usr/share/grouprise/python-lib/grouprise/features/contributions/view_mixins.py", line 13, in form_valid
form.save()
File "/usr/share/grouprise/python-lib/grouprise/features/contributions/forms.py", line 33, in save
post_create.send(sender=self.__class__, instance=contribution)
File "/usr/lib/python3/dist-packages/django/dispatch/dispatcher.py", line 180, in send
return [
File "/usr/lib/python3/dist-packages/django/dispatch/dispatcher.py", line 181, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
File "/usr/share/grouprise/dependencies/sentry_sdk/integrations/django/signals_handlers.py", line 66, in wrapper
return receiver(*args, **kwargs)
File "/usr/share/grouprise/python-lib/grouprise/features/notifications/signals.py", line 24, in send_notifications
_send_notifications(instance)
File "/usr/share/grouprise/dependencies/huey/api.py", line 851, in __call__
return self.huey.enqueue(self.s(*args, **kwargs))
File "/usr/share/grouprise/dependencies/huey/api.py", line 300, in enqueue
self.storage.enqueue(self.serialize_task(task), task.priority)
File "/usr/share/grouprise/dependencies/huey/contrib/sql_huey.py", line 92, in enqueue
self.Task.create(queue=self.name, data=data, priority=priority or 0)
File "/usr/lib/python3/dist-packages/peewee.py", line 6324, in create
inst.save(force_insert=True)
File "/usr/lib/python3/dist-packages/peewee.py", line 6534, in save
pk = self.insert(**field_dict).execute()
File "/usr/lib/python3/dist-packages/peewee.py", line 1898, in inner
return method(self, database, *args, **kwargs)
File "/usr/lib/python3/dist-packages/peewee.py", line 1969, in execute
return self._execute(database)
File "/usr/lib/python3/dist-packages/peewee.py", line 2730, in _execute
return super(Insert, self)._execute(database)
File "/usr/lib/python3/dist-packages/peewee.py", line 2463, in _execute
cursor = self.execute_returning(database)
File "/usr/lib/python3/dist-packages/peewee.py", line 2470, in execute_returning
cursor = database.execute(self)
File "/usr/lib/python3/dist-packages/peewee.py", line 3142, in execute
return self.execute_sql(sql, params, commit=commit)
File "/usr/lib/python3/dist-packages/peewee.py", line 3136, in execute_sql
self.commit()
File "/usr/lib/python3/dist-packages/peewee.py", line 2902, in __exit__
reraise(new_type, new_type(exc_value, *exc_args), traceback)
File "/usr/lib/python3/dist-packages/peewee.py", line 185, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/peewee.py", line 3129, in execute_sql
cursor.execute(sql, params or ())
peewee.OperationalError: terminating connection due to administrator command
SSL connection has been closed unexpectedly
Die Ursache ist unklar.
Möglicherweise müssen wir close_old_connections
irgendwo aufrufen?
Oder wir wiederholen den Aufruf von _send_notifications
im Falle eines Problems.