@@ -400,6 +400,29 @@ function fetch_executable($workdirpath, $execid, $md5sum)
400400$ currentEndpoint = 0 ;
401401while ( TRUE ) {
402402
403+ // Check for available disk space
404+ $ free_space = disk_free_space (JUDGEDIR );
405+ $ total_space = disk_total_space (JUDGEDIR );
406+ $ free_perc = (100. *$ free_space ) / $ total_space ;
407+
408+ $ allowed_free_perc = dbconfig_get_rest ('diskspace_error_perc ' );
409+ $ allowed_free_abs = dbconfig_get_rest ('diskspace_error_abs ' ); // in kB
410+ if ( $ free_perc < $ allowed_free_perc || $ free_space < 1024 *$ allowed_free_abs ) {
411+ $ free_perc = sprintf ("%01.2f%% " , $ free_perc );
412+ $ free_abs = sprintf ("%01.2fGB " , $ free_space / (1024 *1024 *1024 ));
413+ logmsg (LOG_ERR , "Low on disk space: $ free_perc available, i.e. $ free_abs " );
414+
415+ $ disabled = json_encode (array (
416+ 'kind ' => 'judgehost ' ,
417+ 'hostname ' => $ myhost ));
418+ $ judgehostlog = read_judgehostlog ();
419+ $ error_id = request ('internal_error ' , 'POST ' ,
420+ 'description= ' . urlencode ("low on disk space on $ myhost " ) .
421+ '&judgehostlog= ' . urlencode (base64_encode ($ judgehostlog )) .
422+ '&disabled= ' . urlencode ($ disabled ));
423+ logmsg (LOG_ERR , "=> internal error " . $ error_id );
424+ }
425+
403426 // If all endpoints are waiting, sleep for a bit
404427 $ dosleep = TRUE ;
405428 foreach ($ endpoints as $ id =>$ endpoint ) {
@@ -451,11 +474,11 @@ function fetch_executable($workdirpath, $execid, $md5sum)
451474
452475 judge ($ row );
453476
454- // Check if we were interrupted while judging, if so, exit(to avoid sleeping)
455- if ($ exitsignalled ) {
456- logmsg (LOG_NOTICE , "Received signal, exiting. " );
477+ // Check if we were interrupted while judging, if so, exit(to avoid sleeping)
478+ if ($ exitsignalled ) {
479+ logmsg (LOG_NOTICE , "Received signal, exiting. " );
457480 exit ;
458- }
481+ }
459482
460483 // restart the judging loop
461484}
@@ -587,7 +610,7 @@ function judge($row)
587610 '&description= ' . urlencode ("no test cases found " ) .
588611 '&judgehostlog= ' . urlencode (base64_encode ($ judgehostlog )) .
589612 '&disabled= ' . urlencode ($ disabled ));
590- logmsg (LOG_WARNING , "No testcases found for p $ row [probid] => internal error " . $ error_id );
613+ logmsg (LOG_ERR , "No testcases found for p $ row [probid] => internal error " . $ error_id );
591614 break ;
592615 }
593616 $ tc = dj_json_decode ($ testcase );
0 commit comments