Revision a354dfce
Von Moritz Bunkus vor etwa 5 Jahren hinzugefügt
SL/BackgroundJob/Test.pm | ||
---|---|---|
4 | 4 |
|
5 | 5 |
use parent qw(SL::BackgroundJob::Base); |
6 | 6 |
|
7 |
use SL::System::TaskServer; |
|
8 |
|
|
7 | 9 |
sub run { |
8 | 10 |
my ($self, $db_obj) = @_; |
9 | 11 |
my $data = $db_obj->data_as_hash; |
10 | 12 |
|
11 |
$::lxdebug->message(0, "Test job is being executed.");
|
|
13 |
$::lxdebug->message(0, "Test job ID " . $db_obj->id . " is being executed on node " . SL::System::TaskServer::node_id() . ".");
|
|
12 | 14 |
|
13 | 15 |
die "Oh cruel world: " . $data->{exception} if $data->{exception}; |
14 | 16 |
|
Auch abrufbar als: Unified diff
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.