[LON-CAPA-cvs] cvs: loncom / loncnew
albertel
lon-capa-cvs@mail.lon-capa.org
Wed, 28 Mar 2007 00:23:46 -0000
This is a MIME encoded message
--albertel1175041426
Content-Type: text/plain
albertel Tue Mar 27 20:23:46 2007 EDT
Modified files:
/loncom loncnew
Log:
- eliminate the non-DIeWhenIdle option
--albertel1175041426
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20070327202346.txt"
Index: loncom/loncnew
diff -u loncom/loncnew:1.79 loncom/loncnew:1.80
--- loncom/loncnew:1.79 Tue Mar 27 20:14:15 2007
+++ loncom/loncnew Tue Mar 27 20:23:46 2007
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# lonc maintains the connections to remote computers
#
-# $Id: loncnew,v 1.79 2007/03/28 00:14:15 albertel Exp $
+# $Id: loncnew,v 1.80 2007/03/28 00:23:46 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -74,8 +74,6 @@
# parent and shared variables.
my %ChildHash; # by pid -> host.
-my %HostToPid; # By host -> pid.
-my %HostHash; # by loncapaname -> IP.
my %listening_to; # Socket->host table for who the parent
# is listening to.
my %parent_dispatchers; # host-> listener watcher events.
@@ -114,7 +112,6 @@
-my $DieWhenIdle = 1; # When true children die when trimmed -> 0.
my $hosts_tab = 0; # True if we are using a static hosts.tab
my $I_am_child = 0; # True if this is the child process.
@@ -309,12 +306,13 @@
}
}
+
#
# This function should be called by the child in all cases where it must
-# exit. If the child process is running with the DieWhenIdle turned on
-# it must create a lock file for the AF_UNIX socket in order to prevent
-# connection requests from lonnet in the time between process exit
-# and the parent picking up the listen again.
+# exit. The child process must create a lock file for the AF_UNIX socket
+# in order to prevent connection requests from lonnet in the time between
+# process exit and the parent picking up the listen again.
+#
# Parameters:
# exit_code - Exit status value, however see the next parameter.
# message - If this optional parameter is supplied, the exit
@@ -325,26 +323,22 @@
# Regardless of how we exit, we may need to do the lock thing:
- if($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);
- if ($hosts_tab) {
- unlink(&GetLoncSocketPath());
- }
- exit(0);
+ #
+ # 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);
+ if ($hosts_tab) {
+ unlink(&GetLoncSocketPath());
}
- # Now figure out how we exit:
- if($message) {
- die $message;
+ if ($message) {
+ die($message);
} else {
exit($exit_code);
}
@@ -378,7 +372,7 @@
KillSocket($Socket);
$IdleSeconds = 0; # Otherwise all connections get trimmed to fast.
UpdateStatus();
- if(($ConnectionCount == 0) && $DieWhenIdle) {
+ if(($ConnectionCount == 0)) {
&child_exit(0);
}
@@ -1413,7 +1407,7 @@
# Accept a connection request for a client (lonc child) and
# start up an event watcher to keep an eye on input from that
# Event. This can be called both from NewClient and from
-# ChildProcess if we are started in DieWhenIdle mode.
+# ChildProcess.
# Parameters:
# $socket - The listener socket.
# Returns:
@@ -1665,7 +1659,7 @@
=cut
sub ChildProcess {
- # If we are in DieWhenIdle mode, we've inherited all the
+ # We've inherited all the
# events of our parent and those have to be cancelled or else
# all holy bloody chaos will result.. trust me, I already made
# >that< mistake.
@@ -1741,12 +1735,9 @@
# &MakeLondConnection(); // let first work request do it.
- # If We are in diwhenidle, need to accept the connection since the
- # event may not fire.
+ # need to accept the connection since the event may not fire.
- if ($DieWhenIdle) {
- &accept_client($socket);
- }
+ &accept_client($socket);
Debug(9,"Entering event loop");
my $ret = Event::loop(); # Start the main event loop.
@@ -1768,7 +1759,6 @@
if($pid) { # Parent
$RemoteHost = "Parent";
$ChildHash{$pid} = $host;
- $HostToPid{$host}= $pid;
sigprocmask(SIG_UNBLOCK, $sigset);
} else { # child.
@@ -1983,7 +1973,6 @@
if($host) { # It's for real...
&Debug(9, "Caught sigchild for $host");
delete($ChildHash{$pid});
- delete($HostToPid{$host});
if ($hosts_tab) {
&parent_listen($host);
} else {
@@ -2045,24 +2034,12 @@
Log("CRITICAL", "--------------- Starting children ---------------");
LondConnection::ReadConfig; # Read standard config files.
-my $HostIterator = LondConnection::GetHostIterator;
-if ($DieWhenIdle) {
- $RemoteHost = "[parent]";
- if ($hosts_tab) {
- &listen_on_all_unix_sockets();
- } else {
- &listen_on_common_socket();
- }
+$RemoteHost = "[parent]";
+if ($hosts_tab) {
+ &listen_on_all_unix_sockets();
} else {
-
- while (! $HostIterator->end()) {
-
- my $hostentryref = $HostIterator->get();
- CreateChild($hostentryref->[0]);
- $HostHash{$hostentryref->[0]} = $hostentryref->[4];
- $HostIterator->next();
- }
+ &listen_on_common_socket();
}
$RemoteHost = "Parent Server";
@@ -2072,78 +2049,44 @@
ShowStatus("Parent keeping the flock");
-if ($DieWhenIdle) {
- # We need to setup a SIGChild event to handle the exit (natural or otherwise)
- # of the children.
-
- Event->signal(cb => \&server_died,
- desc => "Child exit handler",
- signal => "CHLD");
-
-
- # Set up all the other signals we set up. We'll vector them off to the
- # same subs as we would for DieWhenIdle false and, if necessary, conditionalize
- # the code there.
-
- $parent_handlers{INT} = Event->signal(cb => \&Terminate,
- desc => "Parent INT handler",
- signal => "INT");
- $parent_handlers{TERM} = Event->signal(cb => \&Terminate,
- desc => "Parent TERM handler",
- signal => "TERM");
- if ($hosts_tab) {
- $parent_handlers{HUP} = Event->signal(cb => \&Restart,
- desc => "Parent HUP handler.",
- signal => "HUP");
- } else {
- $parent_handlers{HUP} = Event->signal(cb => \&KillThemAll,
- desc => "Parent HUP handler.",
- signal => "HUP");
- }
- $parent_handlers{USR1} = Event->signal(cb => \&CheckKids,
- desc => "Parent USR1 handler",
- signal => "USR1");
- $parent_handlers{USR2} = Event->signal(cb => \&UpdateKids,
- desc => "Parent USR2 handler.",
- signal => "USR2");
-
- # Start procdesing events.
-
- $Event::DebugLevel = $DebugLevel;
- Debug(9, "Parent entering event loop");
- my $ret = Event::loop();
- die "Main Event loop exited: $ret";
-
+# We need to setup a SIGChild event to handle the exit (natural or otherwise)
+# of the children.
+Event->signal(cb => \&server_died,
+ desc => "Child exit handler",
+ signal => "CHLD");
+
+
+# Set up all the other signals we set up.
+
+$parent_handlers{INT} = Event->signal(cb => \&Terminate,
+ desc => "Parent INT handler",
+ signal => "INT");
+$parent_handlers{TERM} = Event->signal(cb => \&Terminate,
+ desc => "Parent TERM handler",
+ signal => "TERM");
+if ($hosts_tab) {
+ $parent_handlers{HUP} = Event->signal(cb => \&Restart,
+ desc => "Parent HUP handler.",
+ signal => "HUP");
} else {
- #
- # Set up parent signals:
- #
-
- $SIG{INT} = \&Terminate;
- $SIG{TERM} = \&Terminate;
- if ($hosts_tab) {
- $SIG{HUP} = \&Restart;
- } else {
- $SIG{HUP} = \&KillThemAll;
- }
- $SIG{USR1} = \&CheckKids;
- $SIG{USR2} = \&UpdateKids; # LonManage update request.
-
- while(1) {
- my $deadchild = wait();
- if(exists $ChildHash{$deadchild}) { # need to restart.
- my $deadhost = $ChildHash{$deadchild};
- delete($HostToPid{$deadhost});
- delete($ChildHash{$deadchild});
- Log("WARNING","Lost child pid= ".$deadchild.
- "Connected to host ".$deadhost);
- Log("INFO", "Restarting child procesing ".$deadhost);
- CreateChild($deadhost);
- }
- }
-}
-
+ $parent_handlers{HUP} = Event->signal(cb => \&KillThemAll,
+ desc => "Parent HUP handler.",
+ signal => "HUP");
+}
+$parent_handlers{USR1} = Event->signal(cb => \&CheckKids,
+ desc => "Parent USR1 handler",
+ signal => "USR1");
+$parent_handlers{USR2} = Event->signal(cb => \&UpdateKids,
+ desc => "Parent USR2 handler.",
+ signal => "USR2");
+
+# Start procdesing events.
+
+$Event::DebugLevel = $DebugLevel;
+Debug(9, "Parent entering event loop");
+my $ret = Event::loop();
+die "Main Event loop exited: $ret";
=pod
--albertel1175041426--