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