[Collab-qa-commits] r803 - svnbuildstat/trunk/script

goneri at alioth.debian.org goneri at alioth.debian.org
Sat Apr 19 22:53:37 UTC 2008


Author: goneri
Date: 2008-04-19 22:53:37 +0000 (Sat, 19 Apr 2008)
New Revision: 803

Modified:
   svnbuildstat/trunk/script/svnbuildstat_agent.pl
Log:
use Proc::ProcessTable and Proc::Killall from Daniel J. Urist
to kill all the build process. I'll have to package Proc::Killall.


Modified: svnbuildstat/trunk/script/svnbuildstat_agent.pl
===================================================================
--- svnbuildstat/trunk/script/svnbuildstat_agent.pl	2008-04-19 19:05:03 UTC (rev 802)
+++ svnbuildstat/trunk/script/svnbuildstat_agent.pl	2008-04-19 22:53:37 UTC (rev 803)
@@ -12,8 +12,8 @@
 use HTTP::Request::Common;
 use LWP::UserAgent;
 use HTTP::Response;
+use Proc::ProcessTable;
 
-
 ###########################################################################
 ###########################################################################
 ###########################################################################
@@ -26,7 +26,7 @@
 my %job;
 
 #my $maxjobs = $config->agent_maxjobs;
-my $maxjobs = 1;
+my $maxjobs = 3;
 my $vardir = "/home/goneri/svnbuildstat";
 my $workplace = $vardir."/workplace";
 my $pbuilderplace = $vardir."/pbuilder";
@@ -45,6 +45,41 @@
 $ENV{LC_ALL} = 'C';
 $ENV{LANG} = 'C';
 
+# From Proc::Killall TODO package this
+#Copyright (c) 1998-2006 Daniel J. Urist. All rights reserved.
+#This package is free software; you can redistribute it and/or modify
+#it under the same terms as Perl itself.
+sub get_pids {
+
+  my($procs, @kids) = @_;
+
+  my @pids;
+  foreach my $kid (@kids) {
+    foreach my $proc (@$procs) {
+      if ($proc->ppid == $kid) {
+        my $pid = $proc->pid;
+        push @pids, $pid, get_pids $procs, $pid;
+      }
+    }
+  }
+  @pids;
+
+}
+
+sub killfam {
+
+  my($signal, @pids) = @_;
+
+  my $pt = Proc::ProcessTable->new;
+  my(@procs) =  @{$pt->table};
+  my(@kids) = get_pids \@procs, @pids;
+  @pids = (@pids, @kids);
+
+  kill $signal, @pids;
+
+} # end killfam
+
+
 sub purge {
   print "What a nice day for a purge!\n";
   die "please create: `".$vardir unless -d $vardir;
@@ -92,12 +127,13 @@
     print "checkSanity(): disk or memory full!!!\n";
     if (%job&&(isDiskFull($workplace)||isDiskFull($buildarea))) {
       print "Emergency clean up\n";
-      foreach (keys %job) {
-        kill 15, $_;
-      }
+      killfam  (15, keys %job);
+      
       sleep (60*3);
+     
+      killfam  (9, keys %job);
+
       foreach (keys %job) {
-        kill 9, $_;
         waitpid($_, WNOHANG);
         delete ($job{$_});
       }




More information about the Collab-qa-commits mailing list