saleor-gql-loader icon indicating copy to clipboard operation
saleor-gql-loader copied to clipboard

Getting error after a high number of queries

Open awgrass opened this issue 4 years ago • 1 comments

Hi,

I am trying to create approx. 6500 products and I a getting the following error from my docker containers after ~3500 successful creations:

worker_1 | [2021-04-13 11:10:52,356: ERROR/ForkPoolWorker-3] Task saleor.product.tasks.update_product_minimal_variant_price_task[b79268d0-a93e-45ca-90a2-b41e9f962d1f] raised unexpected: DoesNotExist('Product matching query does not exist.') worker_1 | Traceback (most recent call last): worker_1 | File "/usr/local/lib/python3.8/site-packages/celery/app/trace.py", line 409, in trace_task worker_1 | R = retval = fun(*args, **kwargs) worker_1 | File "/usr/local/lib/python3.8/site-packages/celery/app/trace.py", line 701, in protected_call worker_1 | return self.run(*args, **kwargs) worker_1 | File "/app/saleor/product/tasks.py", line 46, in update_product_minimal_variant_price_task worker_1 | product = Product.objects.get(pk=product_pk) worker_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/manager.py", line 85, in manager_method worker_1 | return getattr(self.get_queryset(), name)(*args, **kwargs) worker_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 429, in get worker_1 | raise self.model.DoesNotExist( worker_1 | saleor.product.models.Product.DoesNotExist: Product matching query does not exist. worker_1 | [2021-04-13 11:10:52,363: INFO/MainProcess] Received task: saleor.plugins.webhook.tasks.trigger_webhooks_for_event[bdd782ae-70a6-4f57-b830-c53d568636cc]
api_1 | [13/Apr/2021 11:10:52] "POST /graphql/ HTTP/1.1" 200 93 worker_1 | [2021-04-13 11:10:52,367: INFO/ForkPoolWorker-3] Task saleor.plugins.webhook.tasks.trigger_webhooks_for_event[bdd782ae-70a6-4f57-b830-c53d568636cc] succeeded in 0.003574000000298838s: None db_1 | 2021-04-13 11:10:52.372 UTC [3828] FATAL: sorry, too many clients already api_1 | Traceback (most recent call last): api_1 | File "/usr/local/lib/python3.8/site-packages/promise/promise.py", line 489, in _resolve_from_executor api_1 | executor(resolve, reject) api_1 | File "/usr/local/lib/python3.8/site-packages/promise/promise.py", line 756, in executor api_1 | return resolve(f(*args, **kwargs)) api_1 | File "/usr/local/lib/python3.8/site-packages/graphql/execution/middleware.py", line 75, in make_it_promise api_1 | return next(*args, **kwargs) api_1 | File "/app/saleor/graphql/core/mutations.py", line 290, in mutate api_1 | if not cls.check_permissions(info.context): api_1 | File "/app/saleor/graphql/core/mutations.py", line 281, in check_permissions api_1 | if app: api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/functional.py", line 240, in inner api_1 | self._setup() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/functional.py", line 376, in _setup api_1 | self._wrapped = self._setupfunc() api_1 | File "/app/saleor/graphql/middleware.py", line 66, in api_1 | request.app = SimpleLazyObject(lambda: get_app(auth_token)) api_1 | File "/app/saleor/graphql/middleware.py", line 50, in get_app api_1 | return qs.first() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 678, in first api_1 | for obj in (self if self.ordered else self.order_by('pk'))[:1]: api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 287, in iter api_1 | self._fetch_all() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1308, in _fetch_all api_1 | self._result_cache = list(self._iterable_class(self)) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 53, in iter api_1 | results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1154, in execute_sql api_1 | cursor = self.connection.cursor() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor api_1 | return self._cursor() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor api_1 | self.ensure_connection() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection api_1 | self.connect() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 90, in exit api_1 | raise dj_exc_value.with_traceback(traceback) from exc_value api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection api_1 | self.connect() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect api_1 | self.connection = self.get_new_connection(conn_params) api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection api_1 | connection = Database.connect(**conn_params) api_1 | File "/usr/local/lib/python3.8/site-packages/psycopg2/init.py", line 127, in connect api_1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync) api_1 | graphql.error.located_error.GraphQLLocatedError: FATAL: sorry, too many clients already api_1 | api_1 | api_1 | ERROR saleor.graphql.errors.unhandled A query failed unexpectedly [PID:9:Thread-3795] api_1 | Traceback (most recent call last): api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection api_1 | self.connect() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect api_1 | self.connection = self.get_new_connection(conn_params) api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection api_1 | connection = Database.connect(**conn_params) api_1 | File "/usr/local/lib/python3.8/site-packages/psycopg2/init.py", line 127, in connect api_1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync) api_1 | psycopg2.OperationalError: FATAL: sorry, too many clients already api_1 | api_1 | api_1 | The above exception was the direct cause of the following exception: api_1 | api_1 | Traceback (most recent call last): api_1 | File "/usr/local/lib/python3.8/site-packages/promise/promise.py", line 489, in _resolve_from_executor api_1 | executor(resolve, reject) api_1 | File "/usr/local/lib/python3.8/site-packages/promise/promise.py", line 756, in executor api_1 | return resolve(f(*args, **kwargs)) api_1 | File "/usr/local/lib/python3.8/site-packages/graphql/execution/middleware.py", line 75, in make_it_promise api_1 | return next(*args, **kwargs) api_1 | File "/app/saleor/graphql/core/mutations.py", line 290, in mutate api_1 | if not cls.check_permissions(info.context): api_1 | File "/app/saleor/graphql/core/mutations.py", line 281, in check_permissions api_1 | if app: api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/functional.py", line 240, in inner api_1 | self._setup() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/functional.py", line 376, in _setup api_1 | self._wrapped = self._setupfunc() api_1 | File "/app/saleor/graphql/middleware.py", line 66, in api_1 | request.app = SimpleLazyObject(lambda: get_app(auth_token)) api_1 | File "/app/saleor/graphql/middleware.py", line 50, in get_app api_1 | return qs.first() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 678, in first api_1 | for obj in (self if self.ordered else self.order_by('pk'))[:1]: api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 287, in iter api_1 | self._fetch_all() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 1308, in _fetch_all api_1 | self._result_cache = list(self._iterable_class(self)) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/query.py", line 53, in iter api_1 | results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1154, in execute_sql api_1 | cursor = self.connection.cursor() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 259, in cursor api_1 | return self._cursor() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 235, in _cursor api_1 | self.ensure_connection() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection api_1 | self.connect() api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 90, in exit api_1 | raise dj_exc_value.with_traceback(traceback) from exc_value api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection api_1 | self.connect() api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 200, in connect api_1 | self.connection = self.get_new_connection(conn_params) api_1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner api_1 | return func(*args, **kwargs) api_1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection api_1 | connection = Database.connect(**conn_params) api_1 | File "/usr/local/lib/python3.8/site-packages/psycopg2/init.py", line 127, in connect api_1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync) api_1 | django.db.utils.OperationalError: FATAL: sorry, too many clients already api_1 |

It seems like an error from Postgre because too many requests were made and too many client connections are open. However, I don't know how to increase that number. Do you have any idea?

awgrass avatar Apr 13 '21 11:04 awgrass

@awgrass Its not related to saleor-gql-loader

try raising max_connections & shared_buffers in your postgres:

  db:
    image: postgis/postgis:12-3.0-alpine
    ports:
      - 5432:5432
    restart: unless-stopped
    networks:
      - saleor-backend-tier
    command: postgres -c max_connections=500 -c shared_buffers=1024MB

artdiev avatar Oct 05 '21 19:10 artdiev