Task-Server auf unterschiedlichen Maschinen laufen lassen können
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 23 Aug 2019 09:17:39 +0000 (11:17 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 23 Aug 2019 09:17:39 +0000 (11:17 +0200)
commita354dfceab313ce89c8739fdb3243183f2bbefbe
treef825507aae49660d03d8bb82e47288e0b9111558
parentd5d98964cbda738b1390b71033ee8e08e8100af6
Task-Server auf unterschiedlichen Maschinen laufen lassen können

Jede Task-Server-Instanz und jeder Hintergrundjob haben nun ein neues
Attribute »node_id«. Darüber kann gesteuert werden, dass bestimmte
Jobs nur von einer bestimmten Instanz ausgeführt werden.

Die »node_id« eines neu angelegten Jobs ist standardmäßig leer. Das
bedeutet, dass ein Job von einer beliebigen Task-Server-Instanz
ausgeführt werden kann.

Die »node_id« eines Task-Servers ist standardmäßig der Hostname (siehe
ausgabe von »perl -MSys::Hostname -le 'print hostname()'«), kann aber
in der Konfigurationsdatei überschrieben werden (»[task_server]« →
»node_id«).

Zusätzlich gibt es den Konfigurationsparameter »[task_server]« →
»only_run_tasks_for_this_node«. Ist dieser Parameter gesetzt, so führt
der Task-Server nur diejenigen Jobs aus, deren »node_id«-Feld mit der
»node_id« der Task-Server-Instanz übereinstimmt. Andernfalls werden
auch diejenigen Jobs ausgeführt, deren »node_id«-Feld leer ist.

Achtung: es findet momentan keinerlei Locking statt. Das bedeutet,
dass es für jede Datenbank nur eine Task-Server-Instanz geben darf,
bei der »only_run_tasks_for_this_node« nicht gesetzt ist. Für
Load-Balancing eignet sich das also bisher noch nicht.
SL/BackgroundJob/Test.pm
SL/DB/Manager/BackgroundJob.pm
SL/DB/MetaSetup/BackgroundJob.pm
SL/System/TaskServer.pm
config/kivitendo.conf.default
scripts/task_server.pl
sql/Pg-upgrade2/add_node_id_to_background_jobs.sql [new file with mode: 0644]