pythonitalia / python-italy-telegram-bot

Modular telegram group management bot, used for the Python Italia telegram group
https://www.python.it/comunita/
GNU General Public License v3.0
16 stars 7 forks source link

[BUG] - Unknown orm bug #27

Closed MattiaFailla closed 3 years ago

MattiaFailla commented 4 years ago

An unknown exception or misconfiguration of the database connection seems to trigger cascading errors and as a result the bot becomes less responsive.

2020-09-07 21:39:53,608 - telegram.utils.promise - ERROR - An uncaught error was raised while running the promise
Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
    cursor, statement, parameters, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
    cursor.execute(statement, parameters)
psycopg2.OperationalError: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/utils/promise.py", line 57, in run
    self._result = self.pooled_function(*self.args, **self.kwargs)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/helper_funcs/chat_status.py", line 162, in is_not_admin
    return func(bot, update, *args, **kwargs)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/locks.py", line 314, in rest_handler
    and sql.is_restr_locked(chat.id, restriction)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/sql/locks_sql.py", line 199, in is_restr_locked
    curr_restr = SESSION.query(Restrictions).get(str(chat_id))
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 959, in get
    return self._get_impl(ident, loading.load_on_pk_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 1069, in _get_impl
    return db_load_fn(self, primary_key_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 282, in load_on_pk_identity
    return q.one()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3288, in one
    ret = self.one_or_none()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3257, in one_or_none
    ret = list(self)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3330, in __iter__
    return self._execute_and_instances(context)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3355, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 988, in execute
    return meth(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
    distilled_params,
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1248, in _execute_context
    e, statement, parameters, cursor, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
    cursor, statement, parameters, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

[SQL: SELECT restrictions.chat_id AS restrictions_chat_id, restrictions.messages AS restrictions_messages, restrictions.media AS restrictions_media, restrictions.other AS restrictions_other, restrictions.preview AS restrictions_preview 
FROM restrictions 
WHERE restrictions.chat_id = %(param_1)s]
[parameters: {'param_1': '-1001253839516'}]
(Background on this error at: http://sqlalche.me/e/e3q8)
2020-09-07 22:55:27,977 - telegram.utils.promise - ERROR - An uncaught error was raised while running the promise
Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
    cursor, statement, parameters, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
    cursor.execute(statement, parameters)
psycopg2.OperationalError: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/utils/promise.py", line 57, in run
    self._result = self.pooled_function(*self.args, **self.kwargs)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/helper_funcs/chat_status.py", line 162, in is_not_admin
    return func(bot, update, *args, **kwargs)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/locks.py", line 314, in rest_handler
    and sql.is_restr_locked(chat.id, restriction)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/sql/locks_sql.py", line 199, in is_restr_locked
    curr_restr = SESSION.query(Restrictions).get(str(chat_id))
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 959, in get
    return self._get_impl(ident, loading.load_on_pk_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 1069, in _get_impl
    return db_load_fn(self, primary_key_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 282, in load_on_pk_identity
    return q.one()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3288, in one
    ret = self.one_or_none()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3257, in one_or_none
    ret = list(self)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3330, in __iter__
    return self._execute_and_instances(context)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3355, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 988, in execute
    return meth(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
    distilled_params,
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1248, in _execute_context
    e, statement, parameters, cursor, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
    cursor, statement, parameters, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

[SQL: SELECT restrictions.chat_id AS restrictions_chat_id, restrictions.messages AS restrictions_messages, restrictions.media AS restrictions_media, restrictions.other AS restrictions_other, restrictions.preview AS restrictions_preview 
FROM restrictions 
WHERE restrictions.chat_id = %(param_1)s]
[parameters: {'param_1': '-1001340370511'}]
(Background on this error at: http://sqlalche.me/e/e3q8)
2020-09-07 23:05:16,963 - tg_bot - WARNING - Expecting value: line 1 column 1 (char 0)
2020-09-07 23:07:40,118 - telegram.utils.promise - ERROR - An uncaught error was raised while running the promise
Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1177, in _execute_context
    conn = self._revalidate_connection()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 463, in _revalidate_connection
    "Can't reconnect until invalid "
sqlalchemy.exc.InvalidRequestError: Can't reconnect until invalid transaction is rolled back

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/utils/promise.py", line 57, in run
    self._result = self.pooled_function(*self.args, **self.kwargs)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/__main__.py", line 171, in start
    IMPORTED["rules"].send_rules(update, args[0], from_pm=True)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/rules.py", line 38, in send_rules
    rules = sql.get_rules(chat_id)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/sql/rules_sql.py", line 37, in get_rules
    rules = SESSION.query(Rules).get(str(chat_id))
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 959, in get
    return self._get_impl(ident, loading.load_on_pk_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 1069, in _get_impl
    return db_load_fn(self, primary_key_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 282, in load_on_pk_identity
    return q.one()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3288, in one
    ret = self.one_or_none()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3257, in one_or_none
    ret = list(self)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3330, in __iter__
    return self._execute_and_instances(context)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3355, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 988, in execute
    return meth(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
    distilled_params,
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
    e, util.text_type(statement), parameters, None, None
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1177, in _execute_context
    conn = self._revalidate_connection()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 463, in _revalidate_connection
    "Can't reconnect until invalid "
sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back
[SQL: SELECT rules.chat_id AS rules_chat_id, rules.rules AS rules_rules 
FROM rules 
WHERE rules.chat_id = %(param_1)s]
[parameters: [{'%(139804747598984 param)s': '-1001340370511'}]]
2020-09-08 01:01:35,613 - tg_bot - ERROR - Exception in help buttons. help_next(0)
Traceback (most recent call last):
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/__main__.py", line 286, in help_button
    query.message.delete()
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/message.py", line 816, in delete
    chat_id=self.chat_id, message_id=self.message_id, *args, **kwargs)
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/bot.py", line 65, in decorator
    result = func(self, *args, **kwargs)
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/bot.py", line 296, in delete_message
    result = self._request.post(url, data, timeout=timeout)
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/utils/request.py", line 309, in post
    headers={'Content-Type': 'application/json'})
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/utils/request.py", line 223, in _request_wrapper
    raise BadRequest(message)
telegram.error.BadRequest: Message can't be deleted for everyone
2020-09-08 01:01:37,279 - telegram.utils.promise - ERROR - An uncaught error was raised while running the promise
Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
    cursor, statement, parameters, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
    cursor.execute(statement, parameters)
psycopg2.OperationalError: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mat/.local/lib/python3.6/site-packages/telegram/utils/promise.py", line 57, in run
    self._result = self.pooled_function(*self.args, **self.kwargs)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/__main__.py", line 171, in start
    IMPORTED["rules"].send_rules(update, args[0], from_pm=True)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/rules.py", line 38, in send_rules
    rules = sql.get_rules(chat_id)
  File "/home/mat/Progetti/PYITA/python-italy-telegram-bot/tg_bot/modules/sql/rules_sql.py", line 37, in get_rules
    rules = SESSION.query(Rules).get(str(chat_id))
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 959, in get
    return self._get_impl(ident, loading.load_on_pk_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 1069, in _get_impl
    return db_load_fn(self, primary_key_identity)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 282, in load_on_pk_identity
    return q.one()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3288, in one
    ret = self.one_or_none()
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3257, in one_or_none
    ret = list(self)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3330, in __iter__
    return self._execute_and_instances(context)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3355, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 988, in execute
    return meth(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
    distilled_params,
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1248, in _execute_context
    e, statement, parameters, cursor, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1466, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
    cursor, statement, parameters, context
  File "/home/mat/.local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.

[SQL: SELECT rules.chat_id AS rules_chat_id, rules.rules AS rules_rules 
FROM rules 
WHERE rules.chat_id = %(param_1)s]
[parameters: {'param_1': '-1001340370511'}]
(Background on this error at: http://sqlalche.me/e/e3q8)
^C2020-09-08 03:12:45,483 - telegram.ext.updater - INFO - Received signal 2 (SIGINT), stopping...
MattiaFailla commented 3 years ago

I would also like to add: the problem is solved by re-starting the bot. If the bot is not restarted after a long time then some commands no longer work, such as the chat unblock command.