From 2085dea71312b950c3ba825e19ea86419334065b Mon Sep 17 00:00:00 2001 From: Daniil Anfimov Date: Tue, 27 Oct 2026 17:06:23 +0200 Subject: [PATCH] Keep ALTS Flower state across restarts and purge offline workers Flower kept its task and worker history in memory only, so every restart (including each ALTS update) emptied the dashboard, while workers that went away stayed listed forever. Run it in persistent mode, saving state to ~/flower_db every minute, and drop workers that have been offline for 30 minutes. All values are role defaults and persistence can be turned off with flower_persistent: false. --- roles/alts_flower/defaults/main.yml | 7 +++++++ roles/alts_flower/templates/alts-flower.service.j2 | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/roles/alts_flower/defaults/main.yml b/roles/alts_flower/defaults/main.yml index 9f424a1..8081447 100644 --- a/roles/alts_flower/defaults/main.yml +++ b/roles/alts_flower/defaults/main.yml @@ -11,3 +11,10 @@ flower_env_file: /etc/sysconfig/alts-flower flower_user: alts-mon # Must be set, Flower UI allows revoking tasks and controlling workers flower_password: "" +# Seconds after which offline workers are removed from the dashboard +flower_purge_offline_workers: 1800 +# Keep workers/tasks state across Flower restarts +flower_persistent: true +flower_db: /home/{{ test_system_user }}/flower_db +# Milliseconds between state saves; 0 saves only on clean shutdown +flower_state_save_interval: 60000 diff --git a/roles/alts_flower/templates/alts-flower.service.j2 b/roles/alts_flower/templates/alts-flower.service.j2 index 2ca51d1..00bf49a 100644 --- a/roles/alts_flower/templates/alts-flower.service.j2 +++ b/roles/alts_flower/templates/alts-flower.service.j2 @@ -10,7 +10,13 @@ EnvironmentFile={{ flower_env_file }} # Start through /bin/sh like alts-scheduler: under SELinux, systemd may not # execute binaries labelled as user home content directly ExecStart=/bin/sh -c 'exec {{ flower_venv_dir }}/bin/celery -A alts.worker.app flower \ - --port={{ flower_port }}' + --port={{ flower_port }} \ +{% if flower_persistent | bool %} + --persistent=True \ + --db={{ flower_db }} \ + --state_save_interval={{ flower_state_save_interval }} \ +{% endif %} + --purge_offline_workers={{ flower_purge_offline_workers }}' StandardOutput=append:{{ flower_log_dir }}/output.log StandardError=append:{{ flower_log_dir }}/error.log Restart=on-failure