version 1.1121, 2011/07/31 22:55:53
|
version 1.1123, 2011/08/01 22:13:49
|
Line 327 sub get_remote_globals {
|
Line 327 sub get_remote_globals {
|
if (keys(%whatneeded) > 0) { |
if (keys(%whatneeded) > 0) { |
my $requested = &freeze_escape(\%whatneeded); |
my $requested = &freeze_escape(\%whatneeded); |
my $rep=&reply('readlonnetglobal:'.$requested,$lonhost); |
my $rep=&reply('readlonnetglobal:'.$requested,$lonhost); |
unless (($rep=~/^refused/) || ($rep=~/^rejected/) || $rep eq 'con_lost')) { |
unless (($rep=~/^refused/) || ($rep=~/^rejected/) || ($rep eq 'con_lost')) { |
my @pairs=split(/\&/,$rep); |
my @pairs=split(/\&/,$rep); |
if ($rep !~ /^error/) { |
if ($rep !~ /^error/) { |
foreach my $item (@pairs) { |
foreach my $item (@pairs) { |
Line 811 sub spareserver {
|
Line 811 sub spareserver {
|
my %udomdefaults = &Apache::lonnet::get_domain_defaults($udom); |
my %udomdefaults = &Apache::lonnet::get_domain_defaults($udom); |
$remotesessions = $udomdefaults{'remotesessions'}; |
$remotesessions = $udomdefaults{'remotesessions'}; |
} |
} |
foreach my $try_server (@{ $spareid{'primary'} }) { |
my $spareshash = &this_host_spares($udom); |
if ($uint_dom) { |
if (ref($spareshash) eq 'HASH') { |
next unless (&spare_can_host($udom,$uint_dom,$remotesessions, |
if (ref($spareshash->{'primary'}) eq 'ARRAY') { |
$try_server)); |
foreach my $try_server (@{ $spareshash->{'primary'} }) { |
|
if ($uint_dom) { |
|
next unless (&spare_can_host($udom,$uint_dom,$remotesessions, |
|
$try_server)); |
|
} |
|
($spare_server, $lowest_load) = |
|
&compare_server_load($try_server, $spare_server, $lowest_load); |
|
} |
} |
} |
($spare_server, $lowest_load) = |
|
&compare_server_load($try_server, $spare_server, $lowest_load); |
|
} |
|
|
|
my $found_server = ($spare_server ne '' && $lowest_load < 100); |
my $found_server = ($spare_server ne '' && $lowest_load < 100); |
|
|
if (!$found_server) { |
if (!$found_server) { |
foreach my $try_server (@{ $spareid{'default'} }) { |
if (ref($spareshash->{'default'}) eq 'ARRAY') { |
if ($uint_dom) { |
foreach my $try_server (@{ $spareshash->{'default'} }) { |
next unless (&spare_can_host($udom,$uint_dom,$remotesessions, |
if ($uint_dom) { |
$try_server)); |
next unless (&spare_can_host($udom,$uint_dom, |
} |
$remotesessions,$try_server)); |
($spare_server, $lowest_load) = |
} |
&compare_server_load($try_server, $spare_server, $lowest_load); |
($spare_server, $lowest_load) = |
} |
&compare_server_load($try_server, $spare_server, $lowest_load); |
|
} |
|
} |
|
} |
} |
} |
|
|
if (!$want_server_name) { |
if (!$want_server_name) { |
Line 881 sub compare_server_load {
|
Line 888 sub compare_server_load {
|
# --------------------------- ask offload servers if user already has a session |
# --------------------------- ask offload servers if user already has a session |
sub find_existing_session { |
sub find_existing_session { |
my ($udom,$uname) = @_; |
my ($udom,$uname) = @_; |
foreach my $try_server (@{ $spareid{'primary'} }, |
my $spareshash = &this_host_spares($udom); |
@{ $spareid{'default'} }) { |
if (ref($spareshash) eq 'HASH') { |
return $try_server if (&has_user_session($try_server, $udom, $uname)); |
if (ref($spareshash->{'primary'}) eq 'ARRAY') { |
|
foreach my $try_server (@{ $spareshash->{'primary'} }) { |
|
return $try_server if (&has_user_session($try_server, $udom, $uname)); |
|
} |
|
} |
|
if (ref($spareshash->{'default'}) eq 'ARRAY') { |
|
foreach my $try_server (@{ $spareshash->{'default'} }) { |
|
return $try_server if (&has_user_session($try_server, $udom, $uname)); |
|
} |
|
} |
} |
} |
return; |
return; |
} |
} |
Line 1116 sub spare_can_host {
|
Line 1132 sub spare_can_host {
|
return $canhost; |
return $canhost; |
} |
} |
|
|
|
sub this_host_spares { |
|
my ($dom) = @_; |
|
my $cachetime = 60*60*24; |
|
my @hosts = ¤t_machine_ids(); |
|
foreach my $lonhost (@hosts) { |
|
if (&host_domain($lonhost) eq $dom) { |
|
my ($result,$cached)=&is_cached_new('spares',$dom); |
|
if (defined($cached)) { |
|
return $result; |
|
} else { |
|
my %domconfig = |
|
&Apache::lonnet::get_dom('configuration',['usersessions'],$dom); |
|
if (ref($domconfig{'usersessions'}) eq 'HASH') { |
|
if (ref($domconfig{'usersessions'}{'spares'}) eq 'HASH') { |
|
if (ref($domconfig{'usersessions'}{'spares'}{$lonhost}) eq 'HASH') { |
|
return &do_cache_new('spares',$dom,$domconfig{'usersessions'}{'spares'}{$lonhost},$cachetime); |
|
} |
|
} |
|
} |
|
} |
|
last; |
|
} |
|
} |
|
my $serverhomedom = &host_domain($perlvar{'lonHostID'}); |
|
my ($result,$cached)=&is_cached_new('spares',$serverhomedom); |
|
if (defined($cached)) { |
|
return $result; |
|
} else { |
|
my %homedomconfig = |
|
&Apache::lonnet::get_dom('configuration',['usersessions'],$serverhomedom); |
|
if (ref($homedomconfig{'usersessions'}) eq 'HASH') { |
|
if (ref($homedomconfig{'usersessions'}{'spares'}) eq 'HASH') { |
|
if (ref($homedomconfig{'usersessions'}{'spares'}{$perlvar{'lonHostID'}}) eq 'HASH') { |
|
return &do_cache_new('spares',$serverhomedom,$homedomconfig{'usersessions'}{'spares'}{$perlvar{'lonHostID'}},$cachetime); |
|
} |
|
} |
|
} |
|
} |
|
return \%spareid; |
|
} |
|
|
# ---------------------- Find the homebase for a user from domain's lib servers |
# ---------------------- Find the homebase for a user from domain's lib servers |
|
|
my %homecache; |
my %homecache; |