[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