--- loncom/interface/domainprefs.pm 2014/08/06 17:16:29 1.251
+++ loncom/interface/domainprefs.pm 2014/10/06 00:48:39 1.254
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.251 2014/08/06 17:16:29 raeburn Exp $
+# $Id: domainprefs.pm,v 1.254 2014/10/06 00:48:39 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -3661,9 +3661,10 @@ sub print_loadbalancing {
$disabled = ' disabled="disabled"';
}
$targettable .=
- '
| ';
+ '';
my $rem = $i%($numinrow);
if ($rem == 0) {
if (($i > 0) && ($i < $numspares-1)) {
@@ -3753,7 +3754,7 @@ sub loadbalancing_rules {
if (ref($currrules) eq 'HASH') {
$current = $currrules->{$type};
}
- if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) {
+ if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) {
if ($dom ne &Apache::lonnet::host_domain($lonhost)) {
$current = '';
}
@@ -3805,7 +3806,7 @@ sub loadbalance_rule_row {
my @rulenames;
my %ruletitles = &offloadtype_text();
if (($type eq '_LC_ipchangesso') || ($type eq '_LC_ipchange')) {
- @rulenames = ('balancer','offloadedto');
+ @rulenames = ('balancer','offloadedto','specific');
} else {
@rulenames = ('default','homeserver');
if ($type eq '_LC_external') {
@@ -3816,7 +3817,7 @@ sub loadbalance_rule_row {
push(@rulenames,'none');
}
my $style = $targets_div_style;
- if (($type eq '_LC_external') || ($type eq '_LC_internetdom') || ($type eq '_LC_ipchange')) {
+ if (($type eq '_LC_external') || ($type eq '_LC_internetdom')) {
$style = $homedom_div_style;
}
my $space;
@@ -3867,8 +3868,13 @@ sub loadbalance_rule_row {
' '.$ruletitles{$rulenames[$i]}.
- ''.$extra.'
'."\n";
+ ')"'.$checked.' /> ';
+ if (($rulenames[$i] eq 'specific') && ($type =~ /^_LC_ipchange/)) {
+ $output .= $ruletitles{'particular'};
+ } else {
+ $output .= $ruletitles{$rulenames[$i]};
+ }
+ $output .= ''.$extra.'
'."\n";
}
$output .= ''."\n";
return $output;
@@ -3883,6 +3889,7 @@ sub offloadtype_text {
'none' => 'No offload',
'balancer' => 'Session hosted on Load Balancer, after re-authentication',
'offloadedto' => 'Session hosted on offload server, after re-authentication',
+ 'particular' => 'Session hosted (after re-auth) on server:',
);
return %ruletitles;
}
@@ -10680,6 +10687,7 @@ sub modify_loadbalancing {
my ($othertitle,$usertypes,$types) =
&Apache::loncommon::sorted_inst_types($dom);
my %servers = &Apache::lonnet::internet_dom_servers($dom);
+ my %libraryservers = &Apache::lonnet::get_servers($dom,'library');
my @sparestypes = ('primary','default');
my %typetitles = &sparestype_titles();
my $resulttext;
@@ -10793,20 +10801,22 @@ sub modify_loadbalancing {
\%defaultshash,$dom);
if ($putresult eq 'ok') {
if (keys(%changes) > 0) {
+ my %toupdate;
if (ref($changes{'delete'}) eq 'ARRAY') {
foreach my $balancer (sort(@{$changes{'delete'}})) {
$resulttext .= ''.&mt('Load Balancing discontinued for: [_1]',$balancer).'';
- my $cachekey = &escape('loadbalancing').':'.&escape($dom);
- &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]);
+ $toupdate{$balancer} = 1;
}
}
if (ref($changes{'add'}) eq 'ARRAY') {
foreach my $balancer (sort(@{$changes{'add'}})) {
$resulttext .= ''.&mt('Load Balancing enabled for: [_1]',$balancer);
+ $toupdate{$balancer} = 1;
}
}
if (ref($changes{'curr'}) eq 'HASH') {
foreach my $balancer (sort(keys(%{$changes{'curr'}}))) {
+ $toupdate{$balancer} = 1;
if (ref($changes{'curr'}{$balancer}) eq 'HASH') {
if ($changes{'curr'}{$balancer}{'targets'}) {
my %offloadstr;
@@ -10843,8 +10853,38 @@ sub modify_loadbalancing {
if ($rule eq '') {
$balancetext = $ruletitles{'default'};
} elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer') ||
- ($rule eq 'balancer') || ($rule eq 'offloadedto')) {
- $balancetext = $ruletitles{$rule};
+ ($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) {
+ if (($type eq '_LC_ipchange') || ($type eq '_LC_ipchangesso')) {
+ foreach my $sparetype (@sparestypes) {
+ if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') {
+ map { $toupdate{$_} = 1; } (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}});
+ }
+ }
+ foreach my $item (@{$alltypes}) {
+ next if ($item =~ /^_LC_ipchange/);
+ my $hasrule = $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$item};
+ if ($hasrule eq 'homeserver') {
+ map { $toupdate{$_} = 1; } (keys(%libraryservers));
+ } else {
+ unless (($hasrule eq 'default') || ($hasrule eq 'none') || ($hasrule eq 'externalbalancer')) {
+ if ($servers{$hasrule}) {
+ $toupdate{$hasrule} = 1;
+ }
+ }
+ }
+ }
+ if (($rule eq 'balancer') || ($rule eq 'offloadedto')) {
+ $balancetext = $ruletitles{$rule};
+ } else {
+ my $receiver = $defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type};
+ $balancetext = $ruletitles{'particular'}.' '.$receiver;
+ if ($receiver) {
+ $toupdate{$receiver};
+ }
+ }
+ } else {
+ $balancetext = $ruletitles{$rule};
+ }
} else {
$balancetext = &mt('offload to [_1]',$defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type});
}
@@ -10853,8 +10893,25 @@ sub modify_loadbalancing {
}
}
}
- my $cachekey = &escape('loadbalancing').':'.&escape($dom);
- &Apache::lonnet::remote_devalidate_cache($balancer,[$cachekey]);
+ if (keys(%toupdate)) {
+ my %thismachine;
+ my $updatedhere;
+ my $cachetime = 60*60*24;
+ map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
+ foreach my $lonhost (keys(%toupdate)) {
+ if ($thismachine{$lonhost}) {
+ unless ($updatedhere) {
+ &Apache::lonnet::do_cache_new('loadbalancing',$dom,
+ $defaultshash{'loadbalancing'},
+ $cachetime);
+ $updatedhere = 1;
+ }
+ } else {
+ my $cachekey = &escape('loadbalancing').':'.&escape($dom);
+ &Apache::lonnet::remote_devalidate_cache($lonhost,[$cachekey]);
+ }
+ }
+ }
}
}
if ($resulttext ne '') {