Diff for /loncom/loncnew between versions 1.16 and 1.17

version 1.16, 2003/07/29 02:33:05 version 1.17, 2003/08/03 00:44:31
Line 7 Line 7
 # Copyright Michigan State University Board of Trustees  # Copyright Michigan State University Board of Trustees
 #  #
 # This file is part of the LearningOnline Network with CAPA (LON-CAPA).  # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
 #  ## LON-CAPA is free software; you can redistribute it and/or modify
 # LON-CAPA is free software; you can redistribute it and/or modify  
 # it under the terms of the GNU General Public License as published by  # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or  # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.  # (at your option) any later version.
Line 46 Line 45
   
 # Change log:  # Change log:
 #    $Log$  #    $Log$
   #    Revision 1.17  2003/08/03 00:44:31  foxr
   #    1. Correct handling of connection failure: Assume it means the host is
   #       unreachable and fail all of the queued transactions.  Note that the
   #       inflight transactions should fail on their own time due either to timeout
   #       or send/receive failures.
   #    2. Correct handling of logs for forced death signals.  Pull the signal
   #       from the event watcher.
   #
 #    Revision 1.16  2003/07/29 02:33:05  foxr  #    Revision 1.16  2003/07/29 02:33:05  foxr
 #    Add SIGINT processing to child processes to toggle annoying trace mode  #    Add SIGINT processing to child processes to toggle annoying trace mode
 #    on/off.. will try to use this to isolate the compute boud process issue.  #    on/off.. will try to use this to isolate the compute boud process issue.
Line 602  Parameters: Line 609  Parameters:
   
 sub FailTransaction {  sub FailTransaction {
     my $transaction = shift;      my $transaction = shift;
       Log("WARNING", "Failing transaction ".$transaction->getRequest());
     Debug(1, "Failing transaction: ".$transaction->getRequest());      Debug(1, "Failing transaction: ".$transaction->getRequest());
     if (!$transaction->isDeferred()) { # If the transaction is deferred we'll get to it.      if (!$transaction->isDeferred()) { # If the transaction is deferred we'll get to it.
  my $client  = $transaction->getClient();   my $client  = $transaction->getClient();
Line 664  nonzero if we are allowed to create a ne Line 672  nonzero if we are allowed to create a ne
 sub KillSocket {  sub KillSocket {
     my $Socket = shift;      my $Socket = shift;
   
       Log("WARNING", "Shutting down a socket");
     $Socket->Shutdown();      $Socket->Shutdown();
   
     #  If the socket came from the active connection set,      #  If the socket came from the active connection set,
Line 760  sub LondReadable { Line 769  sub LondReadable {
   
     SocketDump(6, $Socket);      SocketDump(6, $Socket);
     my $status = $Socket->Readable();      my $status = $Socket->Readable();
   
     &Debug(2, "Socket->Readable returned: $status");      &Debug(2, "Socket->Readable returned: $status");
   
     if($status != 0) {      if($status != 0) {
  # bad return from socket read. Currently this means that   # bad return from socket read. Currently this means that
  # The socket has become disconnected. We fail the transaction.   # The socket has become disconnected. We fail the transaction.
   
    Log("WARNING",
       "Lond connection lost.");
  if(exists($ActiveTransactions{$Socket})) {   if(exists($ActiveTransactions{$Socket})) {
     Debug(3,"Lond connection lost failing transaction");  
     FailTransaction($ActiveTransactions{$Socket});      FailTransaction($ActiveTransactions{$Socket});
  }   }
  $Watcher->cancel();   $Watcher->cancel();
Line 1172  sub QueueTransaction { Line 1183  sub QueueTransaction {
  $WorkQueue->enqueue($requestData);   $WorkQueue->enqueue($requestData);
  if($ConnectionCount < $MaxConnectionCount) {   if($ConnectionCount < $MaxConnectionCount) {
     Debug(4,"Starting additional lond connection");      Debug(4,"Starting additional lond connection");
     MakeLondConnection();      if(MakeLondConnection() == 0) {
    EmptyQueue(); # Fail transactions, can't make connection.
       }
  }   }
     } else { # Can start the request:      } else { # Can start the request:
  Debug(8,"Can start...");   Debug(8,"Can start...");
Line 1363  sub SignalledToDeath { Line 1376  sub SignalledToDeath {
     my $watcher= $event->w;      my $watcher= $event->w;
   
     Debug(2,"Signalled to death! via ".$watcher->data);      Debug(2,"Signalled to death! via ".$watcher->data);
     my ($signal) = @_;      my ($signal) = $watcher->data;
     chomp($signal);      chomp($signal);
     Log("CRITICAL", "Abnormal exit.  Child $$ for $RemoteHost "      Log("CRITICAL", "Abnormal exit.  Child $$ for $RemoteHost "
  ."died through "."\"$signal\"");   ."died through "."\"$signal\"");
     LogPerm("F:lonc: $$ on $RemoteHost signalled to death: "      LogPerm("F:lonc: $$ on $RemoteHost signalled to death: "
     ."\"$signal\"");      ."\"$signal\"");
     die("Signal abnormal end");  
     exit 0;      exit 0;
   
 }  }
Line 1445  sub CreateChild { Line 1457  sub CreateChild {
     Log("CRITICAL", "Forking server for ".$host);      Log("CRITICAL", "Forking server for ".$host);
     $pid          = fork;      $pid          = fork;
     if($pid) { # Parent      if($pid) { # Parent
    $RemoteHost = "Parent";
  $ChildHash{$pid} = $RemoteHost;   $ChildHash{$pid} = $RemoteHost;
  sigprocmask(SIG_UNBLOCK, $sigset);   sigprocmask(SIG_UNBLOCK, $sigset);
   
Line 1492  open (PIDSAVE, ">$execdir/logs/lonc.pid" Line 1505  open (PIDSAVE, ">$execdir/logs/lonc.pid"
 print PIDSAVE "$$\n";  print PIDSAVE "$$\n";
 close(PIDSAVE);  close(PIDSAVE);
   
   
   
 if (POSIX::setsid() < 0) {  if (POSIX::setsid() < 0) {
     print "Could not create new session\n";      print "Could not create new session\n";
     exit -1;      exit -1;
Line 1586  sub Restart { Line 1601  sub Restart {
 =head1 KillThemAll  =head1 KillThemAll
   
 Signal handler that kills all children by sending them a   Signal handler that kills all children by sending them a 
 SIGINT.  Responds to sigint and sigterm.  SIGHUP.  Responds to sigint and sigterm.
   
 =cut  =cut
   
Line 1598  sub KillThemAll { Line 1613  sub KillThemAll {
  Debug(2, "Killing lonc for $serving pid = $pid");   Debug(2, "Killing lonc for $serving pid = $pid");
  ShowStatus("Killing lonc for $serving pid = $pid");   ShowStatus("Killing lonc for $serving pid = $pid");
  Log("CRITICAL", "Killing lonc for $serving pid = $pid");   Log("CRITICAL", "Killing lonc for $serving pid = $pid");
  kill('INT', $pid);   kill 'QUIT' => $pid;
  delete($ChildeHash{$pid});   delete($ChildHash{$pid});
     }      }
     my $execdir = $perlvar{'lonDaemons'};      my $execdir = $perlvar{'lonDaemons'};
     unlink("$execdir/logs/lonc.pid");      unlink("$execdir/logs/lonc.pid");
     ShowStatus("Killing the master process");  
     Log("CRITICAL", "Killing the master process.");  
 }  }
   
 =pod  =pod
Line 1617  Terminate the system. Line 1631  Terminate the system.
   
 sub Terminate {  sub Terminate {
     KillThemAll;      KillThemAll;
     exit;      Log("CRITICAL","Master process exiting");
       exit 0;
   
 }  }
 =pod  =pod

Removed from v.1.16  
changed lines
  Added in v.1.17


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>