Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision a354dfce

Von Moritz Bunkus vor etwa 5 Jahren hinzugefügt

  • ID a354dfceab313ce89c8739fdb3243183f2bbefbe
  • Vorgänger d5d98964
  • Nachfolger 64c14bc5

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.

Unterschiede anzeigen:

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