version 1.24, 2003/09/16 09:46:42
|
version 1.26, 2003/09/30 11:11:17
|
Line 45
|
Line 45
|
|
|
# Change log: |
# Change log: |
# $Log$ |
# $Log$ |
|
# Revision 1.26 2003/09/30 11:11:17 foxr |
|
# Add book-keeping hashes to support the re-init procedure. |
|
# |
|
# Revision 1.25 2003/09/23 11:22:14 foxr |
|
# Tested ability to receive sigusr2 This is now logged and must be |
|
# properly implemented as a re-read of hosts and re-init of appropriate |
|
# children. |
|
# |
# Revision 1.24 2003/09/16 09:46:42 foxr |
# Revision 1.24 2003/09/16 09:46:42 foxr |
# Added skeletal infrastructure to support SIGUSR2 update hosts request. |
# Added skeletal infrastructure to support SIGUSR2 update hosts request. |
# |
# |
Line 144 use LONCAPA::HashIterator;
|
Line 152 use LONCAPA::HashIterator;
|
# |
# |
# Disable all signals we might receive from outside for now. |
# Disable all signals we might receive from outside for now. |
# |
# |
#$SIG{QUIT} = IGNORE; |
|
#$SIG{HUP} = IGNORE; |
|
#$SIG{USR1} = IGNORE; |
|
#$SIG{INT} = IGNORE; |
|
#$SIG{CHLD} = IGNORE; |
|
#$SIG{__DIE__} = IGNORE; |
|
|
|
|
|
# Read the httpd configuration file to get perl variables |
# Read the httpd configuration file to get perl variables |
Line 162 my %perlvar = %{$perlvarref};
|
Line 164 my %perlvar = %{$perlvarref};
|
# parent and shared variables. |
# parent and shared variables. |
|
|
my %ChildHash; # by pid -> host. |
my %ChildHash; # by pid -> host. |
|
my %HostToPid; # By host -> pid. |
|
my %HostHash; # by loncapaname -> IP. |
|
|
|
|
my $MaxConnectionCount = 10; # Will get from config later. |
my $MaxConnectionCount = 10; # Will get from config later. |
Line 1521 sub CreateChild {
|
Line 1525 sub CreateChild {
|
if($pid) { # Parent |
if($pid) { # Parent |
$RemoteHost = "Parent"; |
$RemoteHost = "Parent"; |
$ChildHash{$pid} = $RemoteHost; |
$ChildHash{$pid} = $RemoteHost; |
|
$HostToPid{$host}= $pid; |
sigprocmask(SIG_UNBLOCK, $sigset); |
sigprocmask(SIG_UNBLOCK, $sigset); |
|
|
} else { # child. |
} else { # child. |
Line 1583 while (! $HostIterator->end()) {
|
Line 1588 while (! $HostIterator->end()) {
|
|
|
my $hostentryref = $HostIterator->get(); |
my $hostentryref = $HostIterator->get(); |
CreateChild($hostentryref->[0]); |
CreateChild($hostentryref->[0]); |
|
$HostHash{$hostentryref->[0]} = $hostentryref->[4]; |
$HostIterator->next(); |
$HostIterator->next(); |
} |
} |
$RemoteHost = "Parent Server"; |
$RemoteHost = "Parent Server"; |
Line 1605 while(1) {
|
Line 1611 while(1) {
|
my $deadchild = wait(); |
my $deadchild = wait(); |
if(exists $ChildHash{$deadchild}) { # need to restart. |
if(exists $ChildHash{$deadchild}) { # need to restart. |
my $deadhost = $ChildHash{$deadchild}; |
my $deadhost = $ChildHash{$deadchild}; |
|
delete($HostToPid{$deadhost}); |
delete($ChildHash{$deadchild}); |
delete($ChildHash{$deadchild}); |
Log("WARNING","Lost child pid= ".$deadchild. |
Log("WARNING","Lost child pid= ".$deadchild. |
"Connected to host ".$deadhost); |
"Connected to host ".$deadhost); |
Line 1645 sub CheckKids {
|
Line 1652 sub CheckKids {
|
|
|
=head1 UpdateKids |
=head1 UpdateKids |
|
|
parent's SIGUSR1 handler. This handler: |
parent's SIGUSR2 handler. This handler: |
|
|
=item |
=item |
|
|
Line 1668 the start of the master program and main
|
Line 1675 the start of the master program and main
|
=cut |
=cut |
|
|
sub UpdateKids { |
sub UpdateKids { |
|
Log("INFO", "Updating connections via SIGUSR2"); |
} |
} |
|
|
|
|