[LON-CAPA-cvs] cvs: loncom / lond

raeburn raeburn@source.lon-capa.org
Fri, 12 Nov 2010 21:52:52 -0000


raeburn		Fri Nov 12 21:52:52 2010 EDT

  Modified files:              
    /loncom	lond 
  Log:
  - In light of bug 6377, enforce timeout of 3s for each call to get courseinfo
    (nohist_courseids.db entry) for a course with a different home server.
  - Such calls occur when courseinfo for course is not cached, and user's own roles 
    are being retrieved (home server is 2.10) but user session is on a 
    pre-2.10 server, and course's home server is on a different library server. 
  
  
Index: loncom/lond
diff -u loncom/lond:1.465 loncom/lond:1.466
--- loncom/lond:1.465	Fri Nov 12 19:12:46 2010
+++ loncom/lond	Fri Nov 12 21:52:51 2010
@@ -2,7 +2,7 @@
 # The LearningOnline Network
 # lond "LON Daemon" Server (port "LOND" 5663)
 #
-# $Id: lond,v 1.465 2010/11/12 19:12:46 raeburn Exp $
+# $Id: lond,v 1.466 2010/11/12 21:52:51 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -58,7 +58,7 @@
 my $status='';
 my $lastlog='';
 
-my $VERSION='$Revision: 1.465 $'; #' stupid emacs
+my $VERSION='$Revision: 1.466 $'; #' stupid emacs
 my $remoteVERSION;
 my $currenthostid="default";
 my $currentdomainid;
@@ -7351,6 +7351,8 @@
                 my ($reqdmajor,$reqdminor) = split(/\./,$courseinfo->{'releaserequired'});
                 return unless (&useable_role($reqdmajor,$reqdminor,$major,$minor));
             }
+        } else {
+            return;
         }
     }
     return 1;
@@ -7358,10 +7360,25 @@
 
 sub get_courseinfo_hash {
     my ($cnum,$cdom,$home) = @_;
-    my $hashid = $cdom.':'.$cnum;
-    my %info = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',$cnum,1,[$home],'.');
-    if (ref($info{$cdom.'_'.$cnum}) eq 'HASH') {
-        return &Apache::lonnet::do_cache_new('courseinfo',$hashid,$info{$cdom.'_'.$cnum},600);
+    my %info;
+    eval {
+        local($SIG{ALRM}) = sub { die "timeout\n"; };
+        local($SIG{__DIE__})='DEFAULT';
+        alarm(3);
+        %info = &Apache::lonnet::courseiddump($cdom,'.',1,'.','.',$cnum,1,[$home],'.');
+        alarm(0);
+    };
+    if ($@) {
+        if ($@ eq "timeout\n") {
+            &logthis("<font color='blue'>WARNING courseiddump for $cnum:$cdom from $home timedout</font>");
+        } else {
+            &logthis("<font color='yellow'>WARNING unexpected error during eval of call for courseiddump from $home</font>");
+        }
+    } else {
+        if (ref($info{$cdom.'_'.$cnum}) eq 'HASH') {
+            my $hashid = $cdom.':'.$cnum;
+            return &Apache::lonnet::do_cache_new('courseinfo',$hashid,$info{$cdom.'_'.$cnum},600);
+        }
     }
     return;
 }