Uploaded image for project: 'Project Quay'
  1. Project Quay
  2. PROJQUAY-1202

Quay errors communicating with PostgresQL

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • quay-v3.4.0
    • None
    • quay
    • None

      Hello,

      I am facing big problems with Project Quay and the communication with postgres.

      This is basically a plain Quay installation with a Quay(:latest/f44d76c8a0c5), a postgres and a redis container.

      After some time, basically the next day after restarting the container, Quay starts throwing errors regarding the DB connection. A restart of the quay container fixes it, until the next day.

      I am using a default Redis container and a mainly default postgres container (only set max_connections to 1000 in hope it will help conquer the problem).

       

      Expected behaviour: Quay should work longer than a day

      Actual behaviour: It doesn't

       

      Log:

      quay_1      | gunicorn-web stdout | 2020-10-28 08:51:51,991 [307] [ERROR] [gunicorn.error] Error handling request /favicon.ico/
      quay_1      | gunicorn-web stdout | Traceback (most recent call last):
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2993, in connect
      quay_1      | gunicorn-web stdout |     self._state.set_connection(self._connect())
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3688, in _connect
      quay_1      | gunicorn-web stdout |     conn = psycopg2.connect(database=self.database, **self.connect_params)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib64/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
      quay_1      | gunicorn-web stdout |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
      quay_1      | gunicorn-web stdout | psycopg2.OperationalError: FATAL:  sorry, too many clients already
      quay_1      | gunicorn-web stdout | During handling of the above exception, another exception occurred:
      quay_1      | gunicorn-web stdout | Traceback (most recent call last):
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3055, in execute_sql
      quay_1      | gunicorn-web stdout |     cursor = self.cursor(commit)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3039, in cursor
      quay_1      | gunicorn-web stdout |     self.connect()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2996, in connect
      quay_1      | gunicorn-web stdout |     self._initialize_connection(self._state.conn)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2831, in __exit__
      quay_1      | gunicorn-web stdout |     reraise(new_type, new_type(exc_value, *exc_args), traceback)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 183, in reraise
      quay_1      | gunicorn-web stdout |     raise value.with_traceback(tb)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2993, in connect
      quay_1      | gunicorn-web stdout |     self._state.set_connection(self._connect())
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3688, in _connect
      quay_1      | gunicorn-web stdout |     conn = psycopg2.connect(database=self.database, **self.connect_params)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib64/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
      quay_1      | gunicorn-web stdout |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
      quay_1      | gunicorn-web stdout | peewee.OperationalError: FATAL:  sorry, too many clients already
      quay_1      | gunicorn-web stdout | During handling of the above exception, another exception occurred:
      quay_1      | gunicorn-web stdout | Traceback (most recent call last):
      quay_1      | gunicorn-web stdout |   File "/quay-registry/data/database.py", line 213, in execute_sql
      quay_1      | gunicorn-web stdout |     cursor = super(RetryOperationalError, self).execute_sql(sql, params, commit)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3064, in execute_sql
      quay_1      | gunicorn-web stdout |     self.commit()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2831, in __exit__
      quay_1      | gunicorn-web stdout |     reraise(new_type, new_type(exc_value, *exc_args), traceback)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 183, in reraise
      quay_1      | gunicorn-web stdout |     raise value.with_traceback(tb)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3055, in execute_sql
      quay_1      | gunicorn-web stdout |     cursor = self.cursor(commit)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3039, in cursor
      quay_1      | gunicorn-web stdout |     self.connect()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2996, in connect
      quay_1      | gunicorn-web stdout |     self._initialize_connection(self._state.conn)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2831, in __exit__
      quay_1      | gunicorn-web stdout |     reraise(new_type, new_type(exc_value, *exc_args), traceback)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 183, in reraise
      quay_1      | gunicorn-web stdout |     raise value.with_traceback(tb)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2993, in connect
      quay_1      | gunicorn-web stdout |     self._state.set_connection(self._connect())
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3688, in _connect
      quay_1      | gunicorn-web stdout |     conn = psycopg2.connect(database=self.database, **self.connect_params)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib64/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
      quay_1      | gunicorn-web stdout |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
      quay_1      | gunicorn-web stdout | peewee.OperationalError: FATAL:  sorry, too many clients already
      quay_1      | gunicorn-web stdout | During handling of the above exception, another exception occurred:
      quay_1      | gunicorn-web stdout | Traceback (most recent call last):
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2993, in connect
      quay_1      | gunicorn-web stdout |     self._state.set_connection(self._connect())
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3688, in _connect
      quay_1      | gunicorn-web stdout |     conn = psycopg2.connect(database=self.database, **self.connect_params)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib64/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
      quay_1      | gunicorn-web stdout |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
      quay_1      | gunicorn-web stdout | psycopg2.OperationalError: FATAL:  sorry, too many clients already
      quay_1      | gunicorn-web stdout | During handling of the above exception, another exception occurred:
      quay_1      | gunicorn-web stdout | Traceback (most recent call last):
      quay_1      | gunicorn-web stdout |   File "/quay-registry/data/database.py", line 219, in execute_sql
      quay_1      | gunicorn-web stdout |     cursor = self.cursor()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3039, in cursor
      quay_1      | gunicorn-web stdout |     self.connect()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2996, in connect
      quay_1      | gunicorn-web stdout |     self._initialize_connection(self._state.conn)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2831, in __exit__
      quay_1      | gunicorn-web stdout |     reraise(new_type, new_type(exc_value, *exc_args), traceback)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 183, in reraise
      quay_1      | gunicorn-web stdout |     raise value.with_traceback(tb)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2993, in connect
      quay_1      | gunicorn-web stdout |     self._state.set_connection(self._connect())
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3688, in _connect
      quay_1      | gunicorn-web stdout |     conn = psycopg2.connect(database=self.database, **self.connect_params)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib64/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
      quay_1      | gunicorn-web stdout |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
      quay_1      | gunicorn-web stdout | peewee.OperationalError: FATAL:  sorry, too many clients already
      quay_1      | gunicorn-web stdout | During handling of the above exception, another exception occurred:
      quay_1      | gunicorn-web stdout | Traceback (most recent call last):
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base_async.py", line 55, in handle
      quay_1      | gunicorn-web stdout |     self.handle_request(listener_name, req, client, addr)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/ggevent.py", line 143, in handle_request
      quay_1      | gunicorn-web stdout |     super().handle_request(listener_name, req, sock, addr)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/gunicorn/workers/base_async.py", line 106, in handle_request
      quay_1      | gunicorn-web stdout |     respiter = self.wsgi(environ, resp.start_response)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2463, in __call__
      quay_1      | gunicorn-web stdout |     return self.wsgi_app(environ, start_response)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/werkzeug/middleware/proxy_fix.py", line 232, in __call__
      quay_1      | gunicorn-web stdout |     return self.app(environ, start_response)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2449, in wsgi_app
      quay_1      | gunicorn-web stdout |     response = self.handle_exception(e)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask_restful/__init__.py", line 269, in error_router
      quay_1      | gunicorn-web stdout |     return original_handler(e)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1866, in handle_exception
      quay_1      | gunicorn-web stdout |     reraise(exc_type, exc_value, tb)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
      quay_1      | gunicorn-web stdout |     raise value
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
      quay_1      | gunicorn-web stdout |     response = self.full_dispatch_request()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
      quay_1      | gunicorn-web stdout |     rv = self.handle_user_exception(e)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask_restful/__init__.py", line 269, in error_router
      quay_1      | gunicorn-web stdout |     return original_handler(e)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
      quay_1      | gunicorn-web stdout |     reraise(exc_type, exc_value, tb)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
      quay_1      | gunicorn-web stdout |     raise value
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
      quay_1      | gunicorn-web stdout |     rv = self.dispatch_request()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
      quay_1      | gunicorn-web stdout |     return self.view_functions[rule.endpoint](**req.view_args)
      quay_1      | gunicorn-web stdout |   File "/quay-registry/util/cache.py", line 36, in add_no_cache
      quay_1      | gunicorn-web stdout |     response = f(*args, **kwargs)
      quay_1      | gunicorn-web stdout |   File "/quay-registry/auth/decorators.py", line 40, in wrapper
      quay_1      | gunicorn-web stdout |     result = handler(auth_header)
      quay_1      | gunicorn-web stdout |   File "/quay-registry/auth/cookie.py", line 26, in validate_session_cookie
      quay_1      | gunicorn-web stdout |     db_user = current_user.db_user()
      quay_1      | gunicorn-web stdout |   File "/quay-registry/data/model/user.py", line 1374, in db_user
      quay_1      | gunicorn-web stdout |     self._db_user = get_user_by_uuid(self._uuid)
      quay_1      | gunicorn-web stdout |   File "/quay-registry/data/model/user.py", line 845, in get_user_by_uuid
      quay_1      | gunicorn-web stdout |     return User.get(User.uuid == user_uuid, User.organization == False)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 6318, in get
      quay_1      | gunicorn-web stdout |     return sq.get()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 6741, in get
      quay_1      | gunicorn-web stdout |     return clone.execute(database)[0]
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 1845, in inner
      quay_1      | gunicorn-web stdout |     return method(self, database, *args, **kwargs)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 1916, in execute
      quay_1      | gunicorn-web stdout |     return self._execute(database)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2087, in _execute
      quay_1      | gunicorn-web stdout |     cursor = database.execute(self)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3070, in execute
      quay_1      | gunicorn-web stdout |     return self.execute_sql(sql, params, commit=commit)
      quay_1      | gunicorn-web stdout |   File "/quay-registry/data/database.py", line 222, in execute_sql
      quay_1      | gunicorn-web stdout |     self.commit()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2831, in __exit__
      quay_1      | gunicorn-web stdout |     reraise(new_type, new_type(exc_value, *exc_args), traceback)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 183, in reraise
      quay_1      | gunicorn-web stdout |     raise value.with_traceback(tb)
      quay_1      | gunicorn-web stdout |   File "/quay-registry/data/database.py", line 219, in execute_sql
      quay_1      | gunicorn-web stdout |     cursor = self.cursor()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3039, in cursor
      quay_1      | gunicorn-web stdout |     self.connect()
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2996, in connect
      quay_1      | gunicorn-web stdout |     self._initialize_connection(self._state.conn)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2831, in __exit__
      quay_1      | gunicorn-web stdout |     reraise(new_type, new_type(exc_value, *exc_args), traceback)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 183, in reraise
      quay_1      | gunicorn-web stdout |     raise value.with_traceback(tb)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 2993, in connect
      quay_1      | gunicorn-web stdout |     self._state.set_connection(self._connect())
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib/python3.6/site-packages/peewee.py", line 3688, in _connect
      quay_1      | gunicorn-web stdout |     conn = psycopg2.connect(database=self.database, **self.connect_params)
      quay_1      | gunicorn-web stdout |   File "/usr/local/lib64/python3.6/site-packages/psycopg2/__init__.py", line 126, in connect
      quay_1      | gunicorn-web stdout |     conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
      quay_1      | gunicorn-web stdout | peewee.OperationalError: FATAL:  sorry, too many clients already
      

        1. testoutput
          38 kB
          Bill Dettelback

              bdettelb@redhat.com Bill Dettelback
              lgsemrieck Marius Rieck (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: