Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

115 lines (89 sloc) 3.119 kb
#!/usr/bin/env python
import re
import sys
import os, os.path
import shutil
import utils
import time
from optparse import OptionParser
def shouldKill( c, root=None ):
if "smoke.py" in c:
return False
if "emr.py" in c:
return False
if "java" in c:
return False
# if root directory is provided, see if command line matches mongod process running
# with the same data directory
if root and re.compile("(\W|^)mongod(.exe)?\s+.*--dbpath(\s+|=)%s(\s+|$)" % root).search( c ):
return True
if ( c.find( "buildbot" ) >= 0 or c.find( "slave" ) >= 0 ) and c.find( "/mongo/" ) >= 0:
return True
if c.find( "xml-data/build-dir" ) >= 0: # for bamboo
return True
return False
def killprocs( signal="", root=None ):
killed = 0
if sys.platform == 'win32':
return killed
l = utils.getprocesslist()
print( "num procs:" + str( len( l ) ) )
if len(l) == 0:
print( "no procs" )
try:
print( execsys( "/sbin/ifconfig -a" ) )
except Exception,e:
print( "can't get interfaces" + str( e ) )
for x in l:
x = x.lstrip()
if not shouldKill( x, root=root ):
continue
pid = x.split( " " )[0]
print( "killing: " + x )
utils.execsys( "/bin/kill " + signal + " " + pid )
killed = killed + 1
return killed
def tryToRemove(path):
for _ in range(60):
try:
os.remove(path)
return True
except OSError, e:
errno = getattr(e, 'winerror', None)
# check for the access denied and file in use WindowsErrors
if errno in (5, 32):
print("os.remove(%s) failed, retrying in one second." % path)
time.sleep(1)
else:
raise e
return False
def cleanup( root , nokill ):
if nokill:
print "nokill requested, not killing anybody"
else:
if killprocs( root=root ) > 0:
time.sleep(3)
killprocs( "-9", root=root )
# delete all regular files, directories can stay
# NOTE: if we delete directories later, we can't delete diskfulltest
for ( dirpath , dirnames , filenames ) in os.walk( root , topdown=False ):
for x in filenames:
foo = dirpath + "/" + x
if os.path.exists(foo):
if not tryToRemove(foo):
raise Exception("Couldn't remove file '%s' after 60 seconds" % foo)
# delete all directories under root.
for directoryEntry in os.listdir(root):
if directoryEntry == 'diskfulltest':
continue
path = root + '/' + directoryEntry
if os.path.isdir(path):
shutil.rmtree(path, ignore_errors=True)
if __name__ == "__main__":
parser = OptionParser(usage="read the script")
parser.add_option("--nokill", dest='nokill', default=False, action='store_true')
(options, args) = parser.parse_args()
root = "/data/db/"
if len(args) > 0:
root = args[0]
cleanup( root , options.nokill )
Jump to Line
Something went wrong with that request. Please try again.