Make buildd-schroot-aptitude-kill work on jessie
authorPeter Palfrader <peter@palfrader.org>
Thu, 15 Jan 2015 22:36:56 +0000 (23:36 +0100)
committerPeter Palfrader <peter@palfrader.org>
Thu, 15 Jan 2015 22:36:56 +0000 (23:36 +0100)
modules/buildd/files/buildd-schroot-aptitude-kill
modules/buildd/files/buildd-schroot-aptitude-kill.wheezy [new file with mode: 0755]
modules/buildd/manifests/init.pp

index c73667a..5e90d77 100755 (executable)
@@ -39,10 +39,10 @@ cutoff_time = 60*10
 
 for p in psutil.process_iter():
        try:
-               if p.name != 'aptitude': continue
-               parent = p.parent
+               if p.name() != 'aptitude': continue
+               parent = p.parent()
                if parent is None: continue
-               if parent.name != 'schroot': continue
+               if parent.name() != 'schroot': continue
                #
                try:
                        rootdir = os.readlink('/proc/%d/root'%(p.pid,))
@@ -60,5 +60,5 @@ for p in psutil.process_iter():
                if cputime < cutoff_time: continue
                #
                p.kill()
-       except psutil.error.NoSuchProcess:
+       except psutil.NoSuchProcess:
                pass
diff --git a/modules/buildd/files/buildd-schroot-aptitude-kill.wheezy b/modules/buildd/files/buildd-schroot-aptitude-kill.wheezy
new file mode 100755 (executable)
index 0000000..c73667a
--- /dev/null
@@ -0,0 +1,64 @@
+#!/usr/bin/python
+
+# kills aptitude processes that eat an excessive amount of resources
+
+# Copyright 2013 Peter Palfrader
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+import os
+import errno
+import sys
+try:
+       import psutil
+except OSError, e:
+       # XXX: This is a hack, but since we are run from cron, it's
+       # better to handle this on the next run than to send mail.
+       if e.errno == errno.ENOENT:
+               sys.exit(0)
+
+total_mem = psutil.phymem_usage().total
+cutoff_time = 60*10
+
+for p in psutil.process_iter():
+       try:
+               if p.name != 'aptitude': continue
+               parent = p.parent
+               if parent is None: continue
+               if parent.name != 'schroot': continue
+               #
+               try:
+                       rootdir = os.readlink('/proc/%d/root'%(p.pid,))
+               except OSError as e:
+                       if e.errno == errno.ENOENT:
+                               continue
+                       else:
+                               raise e
+               if not rootdir.startswith('/var/lib/schroot/mount'): continue
+               #
+               used = p.get_memory_info().vms
+               if used < total_mem: continue
+               #
+               cputime = p.get_cpu_times().user
+               if cputime < cutoff_time: continue
+               #
+               p.kill()
+       except psutil.error.NoSuchProcess:
+               pass
index 3c64de2..289edf2 100644 (file)
@@ -85,9 +85,16 @@ class buildd ($ensure=present) {
                package { 'python-psutil':
                        ensure => installed,
                }
-               file { '/usr/local/sbin/buildd-schroot-aptitude-kill':
-                       source  => 'puppet:///modules/buildd/buildd-schroot-aptitude-kill',
-                       mode    => '0555',
+               if ($::lsbmajdistrelease >= 8) {
+                       file { '/usr/local/sbin/buildd-schroot-aptitude-kill':
+                               source  => 'puppet:///modules/buildd/buildd-schroot-aptitude-kill',
+                               mode    => '0555',
+                       }
+               } else {
+                       file { '/usr/local/sbin/buildd-schroot-aptitude-kill':
+                               source  => 'puppet:///modules/buildd/buildd-schroot-aptitude-kill.wheezy',
+                               mode    => '0555',
+                       }
                }
        } else {
                file { '/usr/local/sbin/buildd-schroot-aptitude-kill':