altairbow / django-db-connection-pool

Database connection pool component library for Django
https://pypi.python.org/pypi/django-db-connection-pool/
MIT License
181 stars 24 forks source link

mysql: When connection error has occured, throw NotImplementedError #61

Open shkumagai opened 1 month ago

shkumagai commented 1 month ago

Describe the problem

Traceback

Traceback (most recent call last):
  File "/app-libs/sqlalchemy/engine/default.py", line 715, in _do_ping_w_event
    return self.do_ping(dbapi_connection)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/sqlalchemy/engine/default.py", line 741, in do_ping
    cursor.execute(self._dialect_specific_select_one)
  File "/app-libs/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/app-libs/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)
MySQLdb.OperationalError: (2006, 'MySQL server has gone away')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/app-libs/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/sentry_sdk/integrations/django/views.py", line 84, in sentry_wrapped_callback
    return callback(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/rest_framework/viewsets.py", line 124, in view
    return self.dispatch(request, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/app-libs/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/app-libs/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/app/apps_lite/user_with_topic_search/views/api.py", line 89, in search
    http_status, response_data, es_took = search_lite_user(
                                          ^^^^^^^^^^^^^^^^^
  File "/usr/src/app/apps_lite/user_with_topic_search/search/search.py", line 95, in search_lite_user
    restricted_search_hits = filter_search_hits(search_hits, viewer)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/app/apps_lite/user_with_topic_search/search/response_hits_filter.py", line 34, in filter_search_hits
    profiles = _fetch_profiles(hit_users, viewer)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/app/apps_lite/user_with_topic_search/search/response_hits_filter.py", line 80, in _fetch_profiles
    return profile_class.bulk_disclose_to(users, viewer)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/app/apps/models/user_profile/profile_for/profile_for_authed_user.py", line 27, in bulk_disclose_to
    privacy_option_map = {
                         ^
  File "/app-libs/django/db/models/query.py", line 280, in __iter__
    self._fetch_all()
  File "/app-libs/django/db/models/query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/db/models/query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/db/models/sql/compiler.py", line 1173, in execute_sql
    cursor = self.connection.cursor()
             ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/db/backends/base/base.py", line 259, in cursor
    return self._cursor()
           ^^^^^^^^^^^^^^
  File "/app-libs/django/db/backends/base/base.py", line 235, in _cursor
    self.ensure_connection()
  File "/app-libs/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/db/backends/base/base.py", line 219, in ensure_connection
    self.connect()
  File "/app-libs/sentry_sdk/integrations/django/__init__.py", line 680, in connect
    return real_connect(self)
           ^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/django/db/backends/base/base.py", line 200, in connect
    self.connection = self.get_new_connection(conn_params)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/dj_db_conn_pool/core/mixins/core.py", line 106, in get_new_connection
    conn = db_pool.connect()
           ^^^^^^^^^^^^^^^^^
  File "/app-libs/sqlalchemy/pool/base.py", line 449, in connect
    return _ConnectionFairy._checkout(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/sqlalchemy/pool/base.py", line 1362, in _checkout
    with util.safe_reraise():
  File "/app-libs/sqlalchemy/util/langhelpers.py", line 146, in __exit__
    raise exc_value.with_traceback(exc_tb)
  File "/app-libs/sqlalchemy/pool/base.py", line 1300, in _checkout
    result = pool._dialect._do_ping_w_event(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/sqlalchemy/engine/default.py", line 717, in _do_ping_w_event
    is_disconnect = self.is_disconnect(err, dbapi_connection, None)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/sqlalchemy/dialects/mysql/base.py", line 2679, in is_disconnect
    ) and self._extract_error_code(e) in (
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app-libs/sqlalchemy/dialects/mysql/base.py", line 2725, in _extract_error_code
    raise NotImplementedError()
NotImplementedError
qjc1997 commented 1 month ago

I have met the same problem after restarting mysql service. Is there any quick solution?