Revision a354dfce
Von Moritz Bunkus vor etwa 5 Jahren hinzugefügt
SL/System/TaskServer.pm | ||
---|---|---|
11 | 11 |
use File::Slurp; |
12 | 12 |
use File::Spec::Functions qw(:ALL); |
13 | 13 |
use File::Temp; |
14 |
use Sys::Hostname (); |
|
14 | 15 |
|
15 | 16 |
use SL::System::Process; |
16 | 17 |
|
... | ... | |
22 | 23 |
|
23 | 24 |
use constant PID_BASE => "users/pid"; |
24 | 25 |
|
26 |
my $node_id; |
|
27 |
|
|
25 | 28 |
sub status { |
26 | 29 |
my ($self) = @_; |
27 | 30 |
|
... | ... | |
63 | 66 |
return kill('ALRM', $pid) ? 1 : undef; |
64 | 67 |
} |
65 | 68 |
|
69 |
sub node_id { |
|
70 |
return $node_id if $node_id; |
|
71 |
|
|
72 |
$node_id = ($::lx_office_conf{task_server} // {})->{node_id} || Sys::Hostname::hostname(); |
|
73 |
|
|
74 |
return $node_id; |
|
75 |
} |
|
76 |
|
|
66 | 77 |
# |
67 | 78 |
# private methods |
68 | 79 |
# |
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.