[LON-CAPA-cvs] cvs: rat / lonuserstate.pm

albertel lon-capa-cvs@mail.lon-capa.org
Tue, 15 Mar 2005 19:25:30 -0000


albertel		Tue Mar 15 14:25:30 2005 EDT

  Modified files:              
    /rat	lonuserstate.pm 
  Log:
  - BUG#3995, could get 'Could not initlize this course' errors when really we were trying to init the course in several different apache children.
  
  
Index: rat/lonuserstate.pm
diff -u rat/lonuserstate.pm:1.86 rat/lonuserstate.pm:1.87
--- rat/lonuserstate.pm:1.86	Tue Mar 15 12:25:51 2005
+++ rat/lonuserstate.pm	Tue Mar 15 14:25:30 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Construct and maintain state and binary representation of course for user
 #
-# $Id: lonuserstate.pm,v 1.86 2005/03/15 17:25:51 albertel Exp $
+# $Id: lonuserstate.pm,v 1.87 2005/03/15 19:25:30 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -540,8 +540,8 @@
 	return 'No course data available.';
     }
     @cond=('true:normal');
-    unlink($fn.'.db');
-    unlink($fn.'_symb.db');
+    #unlink($fn.'.db');
+    #unlink($fn.'_symb.db');
     unlink($fn.'.state');
     unlink($fn.'parms.db');
     undef %randompick;
@@ -597,8 +597,33 @@
 	    }
 	}  
     } else {
+	# if we are here it is likely because we are already trying to 
+	# initialize the course in another child, busy wait trying to 
+	# tie the hashes for the next 90 seconds, if we succeed forward 
+	# them on to navmaps, if we fail, throw up the Could not init 
+	# course screen
+	untie(%hash);
+	untie(%parmhash);
 	&Apache::lonnet::logthis("<font color=blue>WARNING: ".
 				 "Could not tie coursemap $fn for $uri.</font>"); 
+	my $i=0;
+	while($i<90) {
+	    $i++;
+	    sleep(1);
+	    if ((tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640))) {
+		if (tie(%parmhash,'GDBM_File',$fn.'_parms.db',&GDBM_READER(),0640)) {
+		    $retfurl='/adm/navmaps';
+		    &Apache::lonnet::appenv("request.course.id"  => $short,
+					    "request.course.fn"  => $fn,
+					    "request.course.uri" => $uri);
+		    untie(%hash);
+		    untie(%parmhash);
+		    last;
+		}
+	    }
+	    untie(%hash);
+	    untie(%parmhash);
+	}
     }
     &Apache::lonmsg::author_res_msg($ENV{'request.course.uri'},$errtext);
 # ------------------------------------------------- Check for critical messages