--- loncom/lonnet/perl/lonnet.pm 2011/06/06 16:48:44 1.1109 +++ loncom/lonnet/perl/lonnet.pm 2011/06/13 17:41:04 1.1116 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1109 2011/06/06 16:48:44 www Exp $ +# $Id: lonnet.pm,v 1.1116 2011/06/13 17:41:04 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -816,7 +816,7 @@ sub compare_server_load { my $userloadans = &reply('userload',$try_server); if ($loadans !~ /\d/ && $userloadans !~ /\d/) { - return; #didn't get a number from the server + return ($spare_server, $lowest_load); #didn't get a number from the server } my $load; @@ -862,22 +862,38 @@ sub has_user_session { # --------- determine least loaded server in a user's domain which allows login sub choose_server { - my ($udom) = @_; + my ($udom,$checkloginvia) = @_; my %domconfhash = &Apache::loncommon::get_domainconf($udom); my %servers = &get_servers($udom); my $lowest_load = 30000; - my ($login_host,$hostname); + my ($login_host,$hostname,$portal_path); foreach my $lonhost (keys(%servers)) { - my $loginvia = $domconfhash{$udom.'.login.loginvia_'.$lonhost}; - if ($loginvia eq '') { + my $loginvia; + if ($checkloginvia) { + $loginvia = $domconfhash{$udom.'.login.loginvia_'.$lonhost}; + if ($loginvia) { + my ($server,$path) = split(/:/,$loginvia); + ($login_host, $lowest_load) = + &compare_server_load($server, $login_host, $lowest_load); + if ($login_host eq $server) { + $portal_path = $path; + } + } else { + ($login_host, $lowest_load) = + &compare_server_load($lonhost, $login_host, $lowest_load); + if ($login_host eq $lonhost) { + $portal_path = ''; + } + } + } else { ($login_host, $lowest_load) = - &compare_server_load($lonhost, $login_host, $lowest_load); + &compare_server_load($lonhost, $login_host, $lowest_load); } } if ($login_host ne '') { - $hostname = $servers{$login_host}; + $hostname = &hostname($login_host); } - return ($login_host,$hostname); + return ($login_host,$hostname,$portal_path); } # --------------------------------------------- Try to change a user's password @@ -1999,20 +2015,29 @@ sub getversion { sub currentversion { my $fname=shift; - my ($result,$cached)=&is_cached_new('resversion',$fname); - if (defined($cached)) { return $result; } my $author=$fname; $author=~s/\/home\/httpd\/html\/res\/([^\/]*)\/([^\/]*).*/$1\/$2/; my ($udom,$uname)=split(/\//,$author); - my $home=homeserver($uname,$udom); + my $home=&homeserver($uname,$udom); if ($home eq 'no_host') { return -1; } - my $answer=reply("currentversion:$fname",$home); + my $answer=&reply("currentversion:$fname",$home); if (($answer eq 'con_lost') || ($answer eq 'rejected')) { return -1; } - return &do_cache_new('resversion',$fname,$answer,600); + return $answer; +} + +# +# Return special version number of resource if set by override, empty otherwise +# +sub usedversion { + my $fname=shift; + unless ($fname) { $fname=$env{'request.uri'}; } + my ($urlversion)=($fname=~/\.(\d+)\.\w+$/); + if ($urlversion) { return $urlversion; } + return ''; } # ----------------------------- Subscribe to a resource, return URL if possible @@ -4803,7 +4828,7 @@ sub tmpget { return %returnhash; } -# ------------------------------------------------------------ tmpget interface +# ------------------------------------------------------------ tmpdel interface sub tmpdel { my ($token,$server)=@_; if (!defined($server)) { $server = $perlvar{'lonHostID'}; } @@ -9292,6 +9317,7 @@ sub rndseed { if (!$domain) { $domain=$wdomain; } if (!$username) { $username=$wusername } my $which=&get_rand_alg(); + if (defined(&getCODE())) { if ($which eq '64bit5') { return &rndseed_CODE_64bit5($symb,$courseid,$domain,$username); @@ -9328,7 +9354,6 @@ sub rndseed_32bit { #&logthis("$symbseed:$nameseed;$domainseed|$courseseed;$namechck:$symbchck"); #&logthis("rndseed :$num:$symb"); if ($_64bit) { $num=(($num<<32)>>32); } - $Apache::lonhomework::results{'resource.0.rndseed'}=$num; return $num; } } @@ -9350,7 +9375,6 @@ sub rndseed_64bit { #&logthis("$symbseed:$nameseed;$domainseed|$courseseed;$namechck:$symbchck"); #&logthis("rndseed :$num:$symb"); if ($_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); } - $Apache::lonhomework::results{'resource.0.rndseed'}="$num1:$num2"; return "$num1,$num2"; } } @@ -9374,7 +9398,6 @@ sub rndseed_64bit2 { #&logthis("$symbseed:$nameseed;$domainseed|$courseseed;$namechck:$symbchck"); #&logthis("rndseed :$num:$symb"); if ($_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); } - $Apache::lonhomework::results{'resource.0.rndseed'}="$num1:$num2"; return "$num1,$num2"; } } @@ -9398,7 +9421,7 @@ sub rndseed_64bit3 { #&logthis("$symbseed:$nameseed;$domainseed|$courseseed;$namechck:$symbchck"); #&logthis("rndseed :$num1:$num2:$_64bit"); if ($_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); } - $Apache::lonhomework::results{'resource.0.rndseed'}="$num1:$num2"; + return "$num1:$num2"; } } @@ -9422,7 +9445,7 @@ sub rndseed_64bit4 { #&logthis("$symbseed:$nameseed;$domainseed|$courseseed;$namechck:$symbchck"); #&logthis("rndseed :$num1:$num2:$_64bit"); if ($_64bit) { $num1=(($num1<<32)>>32); $num2=(($num2<<32)>>32); } - $Apache::lonhomework::results{'resource.0.rndseed'}="$num1:$num2"; + return "$num1:$num2"; } } @@ -9430,7 +9453,6 @@ sub rndseed_64bit4 { sub rndseed_64bit5 { my ($symb,$courseid,$domain,$username)=@_; my ($num1,$num2)=&digest("$symb,$courseid,$domain,$username"); - $Apache::lonhomework::results{'resource.0.rndseed'}="$num1:$num2"; return "$num1:$num2"; }