[LON-CAPA-cvs] cvs: loncom / lond

albertel lon-capa-cvs-allow@mail.lon-capa.org
Tue, 03 Apr 2007 00:49:56 -0000


albertel		Mon Apr  2 20:49:56 2007 EDT

  Modified files:              
    /loncom	lond 
  Log:
  - eliminate host.tab reading in lond and use lonnet now
  
  
Index: loncom/lond
diff -u loncom/lond:1.367 loncom/lond:1.368
--- loncom/lond:1.367	Wed Mar 28 18:46:44 2007
+++ loncom/lond	Mon Apr  2 20:49:55 2007
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.367 2007/03/28 22:46:44 albertel Exp $
+# $Id: lond,v 1.368 2007/04/03 00:49:55 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -59,7 +59,7 @@
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.367 $'; #' stupid emacs
+my $VERSION='$Revision: 1.368 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid="default";
 my $currentdomainid;
@@ -85,12 +85,6 @@
 
 my $ConnectionType;
 
-my %hostid;			# ID's for hosts in cluster by ip.
-my %hostdom;			# LonCAPA domain for hosts in cluster.
-my %hostname;			# DNSname -> ID's mapping.
-my %hostip;			# IPs for hosts in cluster.
-my %hostdns;			# ID's of hosts looked up by DNS name.
-
 my %managers;			# Ip -> manager names
 
 my %perlvar;			# Will have the apache conf defined perl vars.
@@ -424,7 +418,7 @@
       if ($host =~ "^#") {                  # Comment line.
          next;
       }
-      if (!defined $hostip{$host}) { # This is a non cluster member
+      if (!defined &Apache::lonnet::get_host_ip($host)) { # This is a non cluster member
 	    #  The entry is of the form:
 	    #    cluname:hostname
 	    #  cluname - A 'cluster hostname' is needed in order to negotiate
@@ -442,7 +436,7 @@
          }
       } else {
          logthis('<font color="green"> existing host'." $host</font>\n");
-         $managers{$hostip{$host}} = $host;  # Use info from cluster tab if clumemeber
+         $managers{&Apache::lonnet::get_host_ip($host)} = $host;  # Use info from cluster tab if clumemeber
       }
    }
 }
@@ -5020,67 +5014,6 @@
 }
 
 #
-#    Kill off hashes that describe the host table prior to re-reading it.
-#    Hashes affected are:
-#       %hostid, %hostdom %hostip %hostdns.
-#
-sub KillHostHashes {
-    foreach my $key (keys %hostid) {
-	delete $hostid{$key};
-    }
-    foreach my $key (keys %hostdom) {
-	delete $hostdom{$key};
-    }
-    foreach my $key (keys %hostip) {
-	delete $hostip{$key};
-    }
-    foreach my $key (keys %hostdns) {
-	delete $hostdns{$key};
-    }
-}
-#
-#   Read in the host table from file and distribute it into the various hashes:
-#
-#    - %hostid  -  Indexed by IP, the loncapa hostname.
-#    - %hostdom -  Indexed by  loncapa hostname, the domain.
-#    - %hostip  -  Indexed by hostid, the Ip address of the host.
-sub ReadHostTable {
-
-    open (CONFIG,"$perlvar{'lonTabDir'}/hosts.tab") || die "Can't read host file";
-    my $myloncapaname = $perlvar{'lonHostID'};
-    Debug("My loncapa name is : $myloncapaname");
-    my %name_to_ip;
-    while (my $configline=<CONFIG>) {
-	if ($configline !~ /^\s*\#/ && $configline !~ /^\s*$/ ) {
-	    my ($id,$domain,$role,$name)=split(/:/,$configline);
-	    $name=~s/\s//g;
-	    my $ip;
-	    if (!exists($name_to_ip{$name})) {
-		$ip = gethostbyname($name);
-		if (!$ip || length($ip) ne 4) {
-		    &logthis("Skipping host $id name $name no IP found\n");
-		    next;
-		}
-		$ip=inet_ntoa($ip);
-		$name_to_ip{$name} = $ip;
-	    } else {
-		$ip = $name_to_ip{$name};
-	    }
-	    $hostid{$ip}=$id;         # LonCAPA name of host by IP.
-	    $hostdom{$id}=$domain;    # LonCAPA domain name of host. 
-	    $hostname{$id}=$name;     # LonCAPA name -> DNS name
-	    $hostip{$id}=$ip;         # IP address of host.
-	    $hostdns{$name} = $id;    # LonCAPA name of host by DNS.
-
-	    if ($id eq $perlvar{'lonHostID'}) { 
-		Debug("Found me in the host table: $name");
-		$thisserver=$name; 
-	    }
-	}
-    }
-    close(CONFIG);
-}
-#
 #  Reload the Apache daemon's state.
 #  This is done by invoking /home/httpd/perl/apachereload
 #  a setuid perl script that can be root for us to do this job.
@@ -5111,13 +5044,12 @@
     #  either dropped or changed hosts.  Note that the re-read of the table
     #  will take care of new and changed hosts as connections come into being.
 
+    #FIXME need a way to tell lonnet that it needs to reset host
+    #cached host info
 
-    KillHostHashes;
-    ReadHostTable;
-
-    foreach my $child (keys %children) {
+    foreach my $child (keys(%children)) {
 	my $childip = $children{$child};
-	if(!$hostid{$childip}) {
+	if (defined(&Apache::lonnet::get_hosts_from_ip($childip))) {
 	    logthis('<font color="blue"> UpdateHosts killing child '
 		    ." $child for ip $childip </font>");
 	    kill('INT', $child);
@@ -5345,8 +5277,7 @@
 $SIG{USR2} = \&UpdateHosts;
 
 #  Read the host hashes:
-
-ReadHostTable;
+&Apache::lonnet::load_hosts_tab();
 
 my $dist=`$perlvar{'lonDaemons'}/distprobe`;
 
@@ -5440,15 +5371,15 @@
 	
 	my $outsideip=$clientip;
 	if ($clientip eq '127.0.0.1') {
-	    $outsideip=$hostip{$perlvar{'lonHostID'}};
+	    $outsideip=&Apache::lonnet::get_host_ip($perlvar{'lonHostID'});
 	}
 
-	my $clientrec=($hostid{$outsideip}     ne undef);
+	my $clientrec=defined(&Apache::lonnet::get_hosts_from_ip($outsideip));
 	my $ismanager=($managers{$outsideip}    ne undef);
 	$clientname  = "[unknonwn]";
 	if($clientrec) {	# Establish client type.
 	    $ConnectionType = "client";
-	    $clientname = $hostid{$outsideip};
+	    $clientname = (&Apache::lonnet::get_hosts_from_ip($outsideip))[-1];
 	    if($ismanager) {
 		$ConnectionType = "both";
 	    }
@@ -5555,8 +5486,7 @@
  
 	if ($clientok) {
 # ---------------- New known client connecting, could mean machine online again
-	    
-	    if ($hostip{$currenthostid} ne $clientip 
+	    if (&Apache::lonnet::get_host_ip($currenthostid) ne $clientip 
 		&& $clientip ne '127.0.0.1') {
 		&Apache::lonnet::reconlonc();
 	    }
@@ -6241,9 +6171,10 @@
     }
 
     if (!defined($hostid)) { $hostid=$perlvar{'lonHostID'}; }
-    if ($hostip{$perlvar{'lonHostID'}} eq $hostip{$hostid}) {
+    if (&Apache::lonnet::get_host_ip($perlvar{'lonHostID'}) 
+	eq &Apache::lonnet::get_host_ip($hostid)) {
 	$currenthostid  =$hostid;
-	$currentdomainid=$hostdom{$hostid};
+	$currentdomainid=&Apache::lonnet::domain($hostid);
 	&logthis("Setting hostid to $hostid, and domain to $currentdomainid");
     } else {
 	&logthis("Requested host id $hostid not an alias of ".