[LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm

raeburn raeburn at source.lon-capa.org
Fri Oct 3 22:41:44 EDT 2014


raeburn		Sat Oct  4 02:41:44 2014 EDT

  Modified files:              
    /loncom/interface	domainprefs.pm 
  Log:
  - Bug 6675
    - If loadbalancing configuration change affects behavior of servers 
      which host offloaded sessions (e.g., ip change detected in migration)
      expire cached loadbalancing config on those other servers.
  
  
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.251 loncom/interface/domainprefs.pm:1.252
--- loncom/interface/domainprefs.pm:1.251	Wed Aug  6 17:16:29 2014
+++ loncom/interface/domainprefs.pm	Sat Oct  4 02:41:44 2014
@@ -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 @@
                                                  \%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 .= '<li>'.&mt('Load Balancing discontinued for: [_1]',$balancer).'</li>';
-                        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 .= '<li>'.&mt('Load Balancing enabled for: [_1]',$balancer);
+                        $toupdate{$balancer} = 1;
                     }
                 }
                 if (ref($changes{'curr'}) eq 'HASH') {
@@ -10845,6 +10846,13 @@
                                         } 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 @@
                                 }
                             }
                         }
-                        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 '') {




More information about the LON-CAPA-cvs mailing list