version 1.54, 2004/09/20 10:27:35
|
version 1.58, 2004/09/22 10:34:44
|
Line 106 my $LondVersion = "unknown"; # Versi
|
Line 106 my $LondVersion = "unknown"; # Versi
|
my $KeyMode = ""; # e.g. ssl, local, insecure from last connect. |
my $KeyMode = ""; # e.g. ssl, local, insecure from last connect. |
my $LondConnecting = 0; # True when a connection is being built. |
my $LondConnecting = 0; # True when a connection is being built. |
|
|
|
my $DieWhenIdle = 0; # When true children die when trimmed -> 0. |
|
|
# |
# |
# The hash below gives the HTML format for log messages |
# The hash below gives the HTML format for log messages |
# given a severity. |
# given a severity. |
Line 119 $LogFormats{"WARNING"} = "<font color='
|
Line 121 $LogFormats{"WARNING"} = "<font color='
|
$LogFormats{"DEFAULT"} = " %s "; |
$LogFormats{"DEFAULT"} = " %s "; |
|
|
|
|
|
# UpdateStatus; |
|
# Update the idle status display to show how many connections |
|
# are left, retries and other stuff. |
|
# |
|
sub UpdateStatus { |
|
if ($ConnectionRetriesLeft > 0) { |
|
ShowStatus(GetServerHost()." Connection count: ".$ConnectionCount |
|
." Retries remaining: ".$ConnectionRetriesLeft |
|
." ($KeyMode)"); |
|
} else { |
|
ShowStatus(GetServerHost()." >> DEAD <<"); |
|
} |
|
} |
|
|
|
|
=pod |
=pod |
|
|
Line 276 sub SocketTimeout {
|
Line 292 sub SocketTimeout {
|
$ConnectionRetriesLeft--; |
$ConnectionRetriesLeft--; |
if($ConnectionRetriesLeft <= 0) { |
if($ConnectionRetriesLeft <= 0) { |
Log("CRITICAL", "Host marked DEAD: ".GetServerHost()); |
Log("CRITICAL", "Host marked DEAD: ".GetServerHost()); |
|
$LondConnecting = 0; |
} |
} |
|
|
} |
} |
Line 295 sub Tick {
|
Line 312 sub Tick {
|
my $clock_watcher = $Event->w; |
my $clock_watcher = $Event->w; |
|
|
my $client; |
my $client; |
if($ConnectionRetriesLeft > 0) { |
UpdateStatus(); |
ShowStatus(GetServerHost()." Connection count: ".$ConnectionCount |
|
." Retries remaining: ".$ConnectionRetriesLeft |
|
." ($KeyMode)"); |
|
} else { |
|
ShowStatus(GetServerHost()." >> DEAD <<"); |
|
} |
|
# Is it time to prune connection count: |
# Is it time to prune connection count: |
|
|
|
|
Line 312 sub Tick {
|
Line 324 sub Tick {
|
my $Socket = $IdleConnections->pop(); |
my $Socket = $IdleConnections->pop(); |
KillSocket($Socket); |
KillSocket($Socket); |
$IdleSeconds = 0; # Otherwise all connections get trimmed to fast. |
$IdleSeconds = 0; # Otherwise all connections get trimmed to fast. |
|
UpdateStatus(); |
|
if(($ConnectionCount == 0) && $DieWhenIdle) { |
|
# |
|
# Create a lock file since there will be a time window |
|
# between our exit and the parent's picking up the listen |
|
# during which no listens will be done on the |
|
# lonnet client socket. |
|
# |
|
my $lock_file = GetLoncSocketPath().".lock"; |
|
open(LOCK,">$lock_file"); |
|
print LOCK "Contents not important"; |
|
close(LOCK); |
|
|
|
exit(0); |
|
} |
} |
} |
} else { |
} else { |
$IdleSeconds = 0; # Reset idle count if not idle. |
$IdleSeconds = 0; # Reset idle count if not idle. |
Line 330 sub Tick {
|
Line 357 sub Tick {
|
# Do we have work in the queue, but no connections to service them? |
# Do we have work in the queue, but no connections to service them? |
# If so, try to make some new connections to get things going again. |
# If so, try to make some new connections to get things going again. |
# |
# |
|
# Note this code is dead now... |
|
# |
my $Requests = $WorkQueue->Count(); |
my $Requests = $WorkQueue->Count(); |
if (($ConnectionCount == 0) && ($Requests > 0)) { |
if (($ConnectionCount == 0) && ($Requests > 0) && (!$LondConnecting)) { |
if ($ConnectionRetriesLeft > 0) { |
if ($ConnectionRetriesLeft > 0) { |
my $Connections = ($Requests <= $MaxConnectionCount) ? |
Debug(5,"Work but no connections, Make a new one"); |
$Requests : $MaxConnectionCount; |
my $success; |
Debug(5,"Work but no connections, start ".$Connections." of them"); |
$success = &MakeLondConnection; |
my $successCount = 0; |
if($success == 0) { # All connections failed: |
for (my $i =0; $i < $Connections; $i++) { |
|
$successCount += MakeLondConnection(); |
|
} |
|
if($successCount == 0) { # All connections failed: |
|
Debug(5,"Work in queue failed to make any connectiouns\n"); |
Debug(5,"Work in queue failed to make any connectiouns\n"); |
EmptyQueue(); # Fail pending transactions with con_lost. |
EmptyQueue(); # Fail pending transactions with con_lost. |
CloseAllLondConnections(); # Should all be closed but.... |
CloseAllLondConnections(); # Should all be closed but.... |
} |
} |
} else { |
} else { |
|
$LondConnecting = 0; |
ShowStatus(GetServerHost()." >>> DEAD!!! <<<"); |
ShowStatus(GetServerHost()." >>> DEAD!!! <<<"); |
Debug(5,"Work in queue, but gave up on connections..flushing\n"); |
Debug(5,"Work in queue, but gave up on connections..flushing\n"); |
EmptyQueue(); # Connections can't be established. |
EmptyQueue(); # Connections can't be established. |
Line 799 sub LondReadable {
|
Line 824 sub LondReadable {
|
"Lond connection lost."); |
"Lond connection lost."); |
if(exists($ActiveTransactions{$Socket})) { |
if(exists($ActiveTransactions{$Socket})) { |
FailTransaction($ActiveTransactions{$Socket}); |
FailTransaction($ActiveTransactions{$Socket}); |
|
} else { |
|
# Socket is connecting and failed... need to mark |
|
# no longer connecting. |
|
|
|
$LondConnecting = 0; |
} |
} |
$Watcher->cancel(); |
$Watcher->cancel(); |
KillSocket($Socket); |
KillSocket($Socket); |
Line 990 sub LondWritable {
|
Line 1020 sub LondWritable {
|
" has been disconnected"); |
" has been disconnected"); |
if(exists($ActiveTransactions{$Socket})) { |
if(exists($ActiveTransactions{$Socket})) { |
FailTransaction($ActiveTransactions{$Socket}); |
FailTransaction($ActiveTransactions{$Socket}); |
|
} else { |
|
# In the process of conneting, so need to turn that off. |
|
|
|
$LondConnecting = 0; |
} |
} |
$Watcher->cancel(); |
$Watcher->cancel(); |
KillSocket($Socket); |
KillSocket($Socket); |
Line 1244 sub QueueTransaction {
|
Line 1278 sub QueueTransaction {
|
if(!defined $LondSocket) { # Need to queue request. |
if(!defined $LondSocket) { # Need to queue request. |
Debug(5,"Must queue..."); |
Debug(5,"Must queue..."); |
$WorkQueue->enqueue($requestData); |
$WorkQueue->enqueue($requestData); |
if(($ConnectionCount < $MaxConnectionCount)) { # && !$LondConnecting) { |
Debug(5, "Queue Transaction startnew $ConnectionCount $LondConnecting"); |
|
if(($ConnectionCount < $MaxConnectionCount) && (! $LondConnecting)) { |
|
|
if($ConnectionRetriesLeft > 0) { |
if($ConnectionRetriesLeft > 0) { |
Debug(5,"Starting additional lond connection"); |
Debug(5,"Starting additional lond connection"); |
if(MakeLondConnection() == 0) { |
if(&MakeLondConnection() == 0) { |
EmptyQueue(); # Fail transactions, can't make connection. |
EmptyQueue(); # Fail transactions, can't make connection. |
CloseAllLondConnections; # Should all be closed but... |
CloseAllLondConnections; # Should all be closed but... |
} |
} |
} else { |
} else { |
ShowStatus(GetServerHost()." >>> DEAD !!!! <<<"); |
ShowStatus(GetServerHost()." >>> DEAD !!!! <<<"); |
|
$LondConnecting = 0; |
EmptyQueue(); # It's worse than that ... he's dead Jim. |
EmptyQueue(); # It's worse than that ... he's dead Jim. |
CloseAllLondConnections; # Should all be closed but.. |
CloseAllLondConnections; # Should all be closed but.. |
} |
} |
Line 1358 sub NewClient {
|
Line 1395 sub NewClient {
|
Returns the name of the UNIX socket on which to listen for client |
Returns the name of the UNIX socket on which to listen for client |
connections. |
connections. |
|
|
|
=head2 Parameters: |
|
|
|
host (optional) - Name of the host socket to return.. defaults to |
|
the return from GetServerHost(). |
|
|
=cut |
=cut |
|
|
sub GetLoncSocketPath { |
sub GetLoncSocketPath { |
return $UnixSocketDir."/".GetServerHost(); |
|
|
my $host = GetServerHost(); # Default host. |
|
if (@_) { |
|
($host) = @_; # Override if supplied. |
|
} |
|
return $UnixSocketDir."/".$host; |
} |
} |
|
|
=pod |
=pod |
Line 1398 connection. The event handler establish
|
Line 1445 connection. The event handler establish
|
(creating a communcations channel), that int turn will establish |
(creating a communcations channel), that int turn will establish |
another event handler to subess requests. |
another event handler to subess requests. |
|
|
|
=head2 Parameters: |
|
|
|
host (optional) Name of the host to set up a unix socket to. |
|
|
=cut |
=cut |
|
|
sub SetupLoncListener { |
sub SetupLoncListener { |
|
|
|
my $host = GetServerHost(); # Default host. |
|
if (@_) { |
|
($host) = @_ # Override host with parameter. |
|
} |
|
|
my $socket; |
my $socket; |
my $SocketName = GetLoncSocketPath(); |
my $SocketName = GetLoncSocketPath($host); |
unlink($SocketName); |
unlink($SocketName); |
unless ($socket =IO::Socket::UNIX->new(Local => $SocketName, |
unless ($socket =IO::Socket::UNIX->new(Local => $SocketName, |
Listen => 10, |
Listen => 250, |
Type => SOCK_STREAM)) { |
Type => SOCK_STREAM)) { |
die "Failed to create a lonc listner socket"; |
die "Failed to create a lonc listner socket"; |
} |
} |