Skip to content

Tine Admin HowTo: ActionQueue + Worker

=================

Version: Ellie 2023.11

Welche Jobs landen in der Queue?

  • Kalender-Notifications
  • File-Indizierung
  • Preview-Generierung
  • Virenscans?
  • TODO: gibt es mehr?

Activate/Deactivate Queue & Worker in non-docker setup

You can start a worker with this command:

sudo -u USER worker.php

It is recommended to have some kind of process control for the worker for (auto-)starting / stopping.

Example UWSGI config:

[uwsgi]
master = True
vacuum = True
workers = 1
threads = 1
uid = www-data
gid = www-data
attach-daemon = php -d include_path=/etc/tine20/ /path/to/worker.php --config /etc/tine20/actionQueue.ini

Example actionQueue.ini:

general.daemonize=0
general.logfile=/path/to/logs/daemon.log
general.loglevel=6
tine20.shutDownWait=10
tine20.maxChildren=2

Activate/Deactivate Queue & Worker in docker setup

You can just set this ENV variable (for example in docker-compose.yml) to deactivate the queue & worker (it is active by default in the PROD image):

TINE20_ACTIONQUEUE: "false"

Stop worker.php process via supervisord

supervisorctl stop worker

Monitoring

php tine20.php --method Tinebase.monitoringCheckQueue

Restart Worker (Docker)

ps aux | grep worker # get PID
kill PID

-> worker process restarts.

Activate Worker Logging

Add something like this to /etc/tine20/actionQueue.ini:

general.logfile=/var/log/tine20/worker.log

Anschauen / Leeren der Queue

schauen, ob der worker was in der queue hat (-n DBNUMBER, queueName from 'actionqueue' config):

redis-cli --scan --pattern "*queueName*" -n 0

viele einträge löschen:

redis-cli --scan --pattern '*queueName*' | xargs -L 1000 redis-cli unlink

oder

redis-cli -h redis.host EVAL "return redis.call('del', 'defaultKey',unpack(redis.call('keys', ARGV[1])))" 0 queueName_*

Docker setup (container name "tine-cache-1" may vary, queueName = actionqueue):

docker exec -it tine20-cache-1 sh
redis-cli --scan --pattern 'actionqueue*' | xargs -L 1000 redis-cli unlink

eintrag in der queue anschauen

redis-cli hval queueNameData:UUID

tine Update ("waited for Action Queue to become empty for more than 300 sec")

This error occurs when the tine update (setup.php --update) runs and there are still some jobs in the queue. When the jobs are not finished in 5 minutes, the update process stops.

You can force the update by giving the parameter skipQueueCheck=1:

php setup.php --update -- skipQueueCheck=1

Restore a job from the dead letter queue

find out job id (tine.log):

Tinebase_ActionQueue_Backend_Redis::send::286 queued job c0cf42818a1dc246ffe1319afd221df88f9cfec9 on queue
    besQueue (datastructname: PREFIXData)

look at deadletter queue job:

redis-cli -h redishost hgetall PREFIXDeadLetter:c0cf42818a1dc246ffe1319afd221df88f9cfec9

restore:

php tine20.php --method Tinebase.actionQueueRestoreDeadLetter -- jobId=c0cf42818a1dc246ffe1319afd221df88f9cfec9

Was ist der Unterschied zwischen Worker/Queue und dem tine Cronjob?

Der Worker kann dafür genutzt werden, bestimmte Jobs asynchron abzuarbeiten. Es kann hier z.b. die Anzahl der Child-Prozesse definiert werden, ausserdem kann eine "Long-Running"-Queue definiert werden, in der Jobs landen, die keine so hohe Priorität haben.

Der Cronjob (triggerAsyncEvents) wiederum sollte 1x pro Minute ausgeführt werden und steuert/startet die Jobs im Scheduler (die zu bestimmten Zeiten laufen sollen, siehe Admin/Scheduler).