From f1145c09c0cff4b011976bf9dd9d059bffcd4bd7 Mon Sep 17 00:00:00 2001 From: Joel Falknau Date: Thu, 6 Mar 2025 10:19:51 +1000 Subject: [PATCH 1/2] Create singlethreaded services worker --- .../project_template/project_name/celery.py | 7 +++++++ allianceauth/project_template/supervisor.conf | 15 +++++++++++++++ docker/conf/celery.py | 7 +++++++ docker/docker-compose.yml | 4 ++++ 4 files changed, 33 insertions(+) diff --git a/allianceauth/project_template/project_name/celery.py b/allianceauth/project_template/project_name/celery.py index bfa29c89..594f366f 100644 --- a/allianceauth/project_template/project_name/celery.py +++ b/allianceauth/project_template/project_name/celery.py @@ -31,6 +31,13 @@ app.conf.ONCE = { 'settings': {} } +app.conf.task_routes = { + # Some AA Services are sensitive to threaded tasks + # Utilize a single threaded worker to process these tasks + # Discord: Multithreads can cause duplicate role creation. + "discord.*": {"queue": "services"}, +} + # Load task modules from all registered Django app configs. app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) diff --git a/allianceauth/project_template/supervisor.conf b/allianceauth/project_template/supervisor.conf index 5dcc54d6..9415764b 100644 --- a/allianceauth/project_template/supervisor.conf +++ b/allianceauth/project_template/supervisor.conf @@ -24,6 +24,21 @@ stopwaitsecs = 600 killasgroup=true priority=998 +[program:worker_services] +command={{ celery }} -A {{ project_name }} worker --pool=threads --concurrency=1 -Q services -n %(program_name)s_%(process_num)02d +directory={{ project_directory }} +user=allianceserver +numprocs=1 +process_name=%(program_name)s_%(process_num)02d +stdout_logfile={{ project_directory }}/log/worker_services.log +stderr_logfile={{ project_directory }}/log/worker_services.log +autostart=true +autorestart=true +startsecs=10 +stopwaitsecs = 600 +killasgroup=true +priority=998 + {% if gunicorn %} [program:gunicorn] user = allianceserver diff --git a/docker/conf/celery.py b/docker/conf/celery.py index 6d0c5a8e..47645a87 100644 --- a/docker/conf/celery.py +++ b/docker/conf/celery.py @@ -31,6 +31,13 @@ app.conf.ONCE = { 'settings': {} } +app.conf.task_routes = { + # Some AA Services are sensitive to threaded tasks + # Utilize a single threaded worker to process these tasks + # Discord: Multithreads can cause duplicate role creation. + "discord.*": {"queue": "services"}, +} + # Load task modules from all registered Django app configs. app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index fb9b0d5d..f4127658 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -103,6 +103,10 @@ services: deploy: replicas: 2 + allianceauth_worker_services: + <<: [*allianceauth-base, *allianceauth-health-checks] + entrypoint: ["celery", "-A", "myauth", "worker", "--pool=threads", "--concurrency=1", "-Q" , "services" , "-n", "worker_services_%n"] + grafana: image: grafana/grafana-oss:latest restart: always From 7ec4325973d13e5e8fb9829cdcbcd17b34977b08 Mon Sep 17 00:00:00 2001 From: Joel Falknau Date: Thu, 6 Mar 2025 12:27:52 +1000 Subject: [PATCH 2/2] add to group and memmon --- allianceauth/project_template/supervisor.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/allianceauth/project_template/supervisor.conf b/allianceauth/project_template/supervisor.conf index 9415764b..0eb748e4 100644 --- a/allianceauth/project_template/supervisor.conf +++ b/allianceauth/project_template/supervisor.conf @@ -53,12 +53,12 @@ stopsignal=INT {% endif %} [eventlistener:memmon] -command={{ memmon }} -p worker_00=256MB -p gunicorn=256MB +command={{ memmon }} -p worker_00=256MB -p worker_services_00=256MB -p gunicorn=256MB directory={{ project_directory }} events=TICK_60 stdout_logfile={{ project_directory }}/log/memmon.log stderr_logfile={{ project_directory }}/log/memmon.log [group:{{ project_name }}] -programs=beat,worker{% if gunicorn %},gunicorn{% endif %} +programs=beat,worker,worker_services{% if gunicorn %},gunicorn{% endif %} priority=999