[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;
 	    }
 	}