[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: buildd timeouts



On Thu, Jun 08, 2006 at 01:25:16PM +0200, Goswin von Brederlow wrote:
> Wouter Verhelst <wouter@debian.org> writes:
> > In other words, I feel that the timeout code is doing more harm than it
> > is helping. Wouldn't it be better if we would just drop the timeout
> > code?
[...]
> For m68k I totaly agree with you that killing the job is probably
> doing more harm than good. Maybe instead of killing the job the buildd
> could send a mail to the admin to look into the matter instead. The
> admin can then kill the job or let it run and set a package specific
> timeout for the next time.

So I gave this some thought, and came up with the following patch
(against current svn trunk).

Comments are welcome.

Index: sbuild
===================================================================
--- sbuild	(revision 99)
+++ sbuild	(working copy)
@@ -754,12 +754,36 @@
 	my $timed_out = 0;
 	my(@timeout_times, @timeout_sigs, $last_time);
 	$SIG{'ALRM'} = sub {
-		my $signal = ($timed_out > 0) ? 9 : 15;
-		system "$conf::sudo perl -e 'kill( -$signal, $main::sub_pid )'";
 		$timeout_times[$timed_out] = time - $last_time;
 		$timeout_sigs[$timed_out] = $signal;
+		if($timed_out < 2 && -f "$main::HOME/NO-KILL-PLEASE") {
+			unlink "$main::HOME/NO-KILL-PLEASE";
+			$timed_out=0;
+		}
+		if(!$timed_out) {
+			# This is an ugly and insecure way to create a
+			# tempfile, but I don't think it's proper to add an
+			# extra module (File::Temp) for just these few lines...
+			# though I'm happy to be corrected :) -- Wouter
+			open(TEMPFILE, ">mail-temp");
+			print TEMPFILE <<EOF
+Warning: sbuild has seen no output from the current build proces in $timeout_times[$timed_out]
+minutes. If nothing is done, the current build process will be killed in
+another $timeout minutes.
+
+If you want to prevent sbuild from killing the build, please create a file
+$main::HOME/NO-KILL-PLEASE. Note that if such a file existed previously, it
+has now been removed.
+EOF
+			close(TEMPFILE);
+			send_mail( $conf::mailto, "Sbuild timeout warning", "mail-temp");
+			unlink "mail-temp";
+		} else {
+			my $signal = ($timed_out > 1) ? 9 : 15;
+			system "$conf::sudo perl -e 'kill( -$signal, $main::sub_pid )'";
+			$timeout = 5*60; # only wait 5 minutes until next signal
+		}
 		$timed_out++;
-		$timeout = 5*60; # only wait 5 minutes until next signal
 	};
 
 	alarm( $timeout );
@@ -774,7 +798,7 @@
 	$rv = $?;
 
 	my $i;
-	for( $i = 0; $i < $timed_out; ++$i ) {
+	for( $i = 1; $i < $timed_out; ++$i ) {
 		print PLOG "Build killed with signal ", $timeout_sigs[$i],
 				   " after ", int($timeout_times[$i]/60),
 				   " minutes of inactivity\n";

-- 
Fun will now commence
  -- Seven Of Nine, "Ashes to Ashes", stardate 53679.4

Attachment: signature.asc
Description: Digital signature


Reply to: