--- loncom/interface/domainprefs.pm 2014/08/06 17:16:29 1.251 +++ loncom/interface/domainprefs.pm 2014/10/04 02:41:44 1.252 @@ -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.252 2014/10/04 02:41:44 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -10793,16 +10793,17 @@ 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') { @@ -10845,6 +10846,13 @@ sub modify_loadbalancing { } elsif (($rule eq 'homeserver') || ($rule eq 'externalbalancer') || ($rule eq 'balancer') || ($rule eq 'offloadedto')) { $balancetext = $ruletitles{$rule}; + if (($rule eq 'balancer') || ($rule eq 'offloadedto')) { + foreach my $sparetype (@sparestypes) { + if (ref($defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}) eq 'ARRAY') { + map { $toupdate{$_} = 1; } (@{$defaultshash{'loadbalancing'}{$balancer}{'targets'}{$sparetype}}); + } + } + } } else { $balancetext = &mt('offload to [_1]',$defaultshash{'loadbalancing'}{$balancer}{'rules'}{$type}); } @@ -10853,8 +10861,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 '') {