[LON-CAPA-cvs] cvs: loncom /homework bridgetask.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Sat, 21 Jan 2006 01:46:15 -0000
albertel Fri Jan 20 20:46:15 2006 EDT
Modified files:
/loncom/homework bridgetask.pm
Log:
- some of BUG#4608, could loop indefinately if unable to lock a student record, now if we fail twice give up and let the grader know we gave up
Index: loncom/homework/bridgetask.pm
diff -u loncom/homework/bridgetask.pm:1.94 loncom/homework/bridgetask.pm:1.95
--- loncom/homework/bridgetask.pm:1.94 Wed Dec 21 14:13:05 2005
+++ loncom/homework/bridgetask.pm Fri Jan 20 20:46:14 2006
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.94 2005/12/21 19:13:05 albertel Exp $
+# $Id: bridgetask.pm,v 1.95 2006/01/21 01:46:14 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -554,6 +554,8 @@
$result.=&show_queue($env{'form.queue'},1);
} elsif ($status_code eq 'select_user') {
$result.=&select_user();
+ } elsif ($status_code eq 'unable') {
+ $result.='<b>'.&mt("Unable to aqcuire a user to grade.").'</b>'.$back;
} else {
$result.='<b>'.&mt("No user to be graded.").'</b>'.$back;
}
@@ -1317,7 +1319,12 @@
my $todo=&find_mid_grade($queue,$symb,$cdom,$cnum);
&Apache::lonxml::debug("found ".join(':',&decode_queue_key($todo)));
if ($todo) { return $todo; }
+ my $attempts=0;
while (1) {
+ if ($attempts > 2) {
+ # tried twice to get a queue entry, giving up
+ return (undef,'unable');
+ }
my $starttime=time;
&Apache::lonnet::cput($queue,{"$symb\0timestamp"=>$starttime},
$cdom,$cnum);
@@ -1344,7 +1351,10 @@
&Apache::lonxml::debug("got $todo");
# otherwise found someone so lets try to lock them
# unless someone else already picked them
- if (!&lock_key($queue,$todo)) { next; }
+ if (!&lock_key($queue,$todo)) {
+ $attempts++;
+ next;
+ }
my (undef,$endtime)=
&Apache::lonnet::get($queue,["$symb\0timestamp"],
$cdom,$cnum);
@@ -1363,6 +1373,7 @@
&Apache::lonnet::del($queue,["$todo\0locked"],
$cdom,$cnum);
&Apache::lonxml::debug("del");
+ $attempts++;
next;
}
}