def mpdallexit(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(sys.argv) > 1 and (sys.argv[1] == '-h' or sys.argv[1] == '--help') : print __doc__ sys.exit(-1) mpd_set_my_id(myid='mpdallexit') parmdb = MPDParmDB(orderedSources=['cmdline','xml','env','rcfile','thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD' : 0, 'MPD_SECRETWORD' : '', } for (k,v) in parmsToOverride.items(): parmdb[('thispgm',k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os,'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split(sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName,'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot,secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = { 'cmd' : 'mpdallexit' } conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=8.0) if not msg: mpd_print(1,'no msg recvd from mpd before timeout') elif msg['cmd'] != 'mpdallexit_ack': mpd_print(1,'unexpected msg from mpd :%s:' % (msg) ) sys.exit(-1) conSock.close()
def mpdkilljob(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(sys.argv) < 2 or sys.argv[1] == '-h' or sys.argv[1] == '--help': usage() signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdkilljob') mpdid = '' if sys.argv[1] == '-a': jobalias = sys.argv[2] jobnum = '0' else: jobalias = '' jobid = sys.argv[1] sjobid = jobid.split('@') jobnum = sjobid[0] if len(sjobid) > 1: mpdid = sjobid[1] parmdb = MPDParmDB(orderedSources=['cmdline','xml','env','rcfile','thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD' : 0, 'MPD_SECRETWORD' : '', } for (k,v) in parmsToOverride.items(): parmdb[('thispgm',k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os,'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split(sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName,'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot,secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = { 'cmd':'mpdkilljob', 'jobnum' : jobnum, 'mpdid' : mpdid, 'jobalias' : jobalias, 'username' : mpd_get_my_username() } conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=5.0) if not msg: mpd_print(1,'no msg recvd from mpd before timeout') sys.exit(-1) if msg['cmd'] != 'mpdkilljob_ack': if msg['cmd'] == 'already_have_a_console': print 'mpd already has a console (e.g. for long ringtest); try later' else: print 'unexpected message from mpd: %s' % (msg) sys.exit(-1) if not msg['handled']: print 'job not found' sys.exit(-1) conSock.close()
def mpdtrace(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(sys.argv) > 1: if (sys.argv[1] == '-h' or sys.argv[1] == '--help') or (sys.argv[1] != '-l'): usage() signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdtrace') parmdb = MPDParmDB(orderedSources=['cmdline','xml','env','rcfile','thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD' : 0, 'MPD_SECRETWORD' : '', } for (k,v) in parmsToOverride.items(): parmdb[('thispgm',k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os,'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split(sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName,'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot,secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = { 'cmd' : 'mpdtrace' } conSock.send_dict_msg(msgToSend) # Main Loop done = 0 while not done: msg = conSock.recv_dict_msg(timeout=5.0) if not msg: # also get this on ^C mpd_print(1, 'got eof on console') sys.exit(-1) elif not msg.has_key('cmd'): print 'mpdtrace: unexpected msg from mpd=:%s:' % (msg) sys.exit(-1) if msg['cmd'] == 'mpdtrace_info': if len(sys.argv) > 1 and sys.argv[1] == '-l': print '%s (%s)' % (msg['id'],msg['ifhn']) else: pos = msg['id'].find('.') if pos < 0: pos = msg['id'].rfind('_') print msg['id'][:pos] # strip off domain and port elif msg['cmd'] == 'mpdtrace_trailer': done = 1 conSock.close()
def mpdringtest(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(sys.argv) > 1 and ( sys.argv[1] == '-h' or sys.argv[1] == '--help' ) : usage() if len(sys.argv) < 2: numLoops = 1 else: numLoops = int(sys.argv[1]) signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdringtest') parmdb = MPDParmDB(orderedSources=['cmdline','xml','env','rcfile','thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD' : 0, 'MPD_SECRETWORD' : '', } for (k,v) in parmsToOverride.items(): parmdb[('thispgm',k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os,'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split(sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName,'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot,secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = { 'cmd' : 'mpdringtest', 'numloops' : numLoops } conSock.send_dict_msg(msgToSend) starttime = time() msg = conSock.recv_dict_msg() etime = time() - starttime if not msg: print 'mpdringtest terminated early' elif msg['cmd'] != 'mpdringtest_done': if msg['cmd'] == 'already_have_a_console': print 'mpd already has a console (e.g. for long ringtest); try later' else: print 'unexpected message from mpd: %s' % (msg) else: print 'time for %d loops =' % numLoops, etime, 'seconds'
def mpdexit(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if (len(sys.argv) > 1 and (sys.argv[1] == '-h' or sys.argv[1] == '--help')) or \ (len(sys.argv) < 2): print __doc__ sys.exit(-1) signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdexit') parmdb = MPDParmDB(orderedSources=['cmdline','xml','env','rcfile','thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD' : 0, 'MPD_SECRETWORD' : '', } for (k,v) in parmsToOverride.items(): parmdb[('thispgm',k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os,'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split(sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName,'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot,secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = { 'cmd' : 'mpdexit', 'mpdid' : sys.argv[1] } conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=5.0) if not msg: mpd_print(1,'no msg recvd from mpd before timeout') sys.exit(-1) elif msg['cmd'] == 'already_have_a_console': mpd_print(1,'mpd already has a console (e.g. for long ringtest); try later') sys.exit(-1) if not msg.has_key('cmd'): mpd_print(1,'mpdexit: INVALID msg=:%s:' % (msg)) sys.exit(-1) if msg['cmd'] != 'mpdexit_ack': mpd_print(1,'mpdexit failed; may have wrong mpdid') sys.exit(-1)
def mpdtrace(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(sys.argv) > 1: if (sys.argv[1] == '-h' or sys.argv[1] == '--help') or (sys.argv[1] != '-l'): usage() signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdtrace') parmdb = MPDParmDB( orderedSources=['cmdline', 'xml', 'env', 'rcfile', 'thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD': 0, 'MPD_SECRETWORD': '', } for (k, v) in parmsToOverride.items(): parmdb[('thispgm', k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os, 'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split( sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName, 'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot, secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = {'cmd': 'mpdtrace'} conSock.send_dict_msg(msgToSend) # Main Loop done = 0 while not done: msg = conSock.recv_dict_msg(timeout=5.0) if not msg: # also get this on ^C mpd_print(1, 'got eof on console') sys.exit(-1) elif not msg.has_key('cmd'): print 'mpdtrace: unexpected msg from mpd=:%s:' % (msg) sys.exit(-1) if msg['cmd'] == 'mpdtrace_info': if len(sys.argv) > 1 and sys.argv[1] == '-l': print '%s (%s)' % (msg['id'], msg['ifhn']) else: pos = msg['id'].find('.') if pos < 0: pos = msg['id'].rfind('_') print msg['id'][:pos] # strip off domain and port elif msg['cmd'] == 'mpdtrace_trailer': done = 1 conSock.close()
def mpdexit(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if (len(sys.argv) > 1 and (sys.argv[1] == '-h' or sys.argv[1] == '--help')) or \ (len(sys.argv) < 2): print __doc__ sys.exit(-1) signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdexit') parmdb = MPDParmDB( orderedSources=['cmdline', 'xml', 'env', 'rcfile', 'thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD': 0, 'MPD_SECRETWORD': '', } for (k, v) in parmsToOverride.items(): parmdb[('thispgm', k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os, 'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split( sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName, 'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot, secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = {'cmd': 'mpdexit', 'mpdid': sys.argv[1]} conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=5.0) if not msg: mpd_print(1, 'no msg recvd from mpd before timeout') sys.exit(-1) elif msg['cmd'] == 'already_have_a_console': mpd_print( 1, 'mpd already has a console (e.g. for long ringtest); try later') sys.exit(-1) if not msg.has_key('cmd'): mpd_print(1, 'mpdexit: INVALID msg=:%s:' % (msg)) sys.exit(-1) if msg['cmd'] != 'mpdexit_ack': mpd_print(1, 'mpdexit failed; may have wrong mpdid') sys.exit(-1)
def mpdringtest(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(sys.argv) > 1 and (sys.argv[1] == '-h' or sys.argv[1] == '--help'): usage() if len(sys.argv) < 2: numLoops = 1 else: numLoops = int(sys.argv[1]) signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdringtest') parmdb = MPDParmDB( orderedSources=['cmdline', 'xml', 'env', 'rcfile', 'thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD': 0, 'MPD_SECRETWORD': '', } for (k, v) in parmsToOverride.items(): parmdb[('thispgm', k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os, 'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split( sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName, 'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot, secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = {'cmd': 'mpdringtest', 'numloops': numLoops} conSock.send_dict_msg(msgToSend) starttime = time() msg = conSock.recv_dict_msg() etime = time() - starttime if not msg: print 'mpdringtest terminated early' elif msg['cmd'] != 'mpdringtest_done': if msg['cmd'] == 'already_have_a_console': print 'mpd already has a console (e.g. for long ringtest); try later' else: print 'unexpected message from mpd: %s' % (msg) else: print 'time for %d loops =' % numLoops, etime, 'seconds'
def mpdlistjobs(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid="mpdlistjobs") uname = "" jobid = "" sjobid = "" jobalias = "" sssPrintFormat = 0 if len(sys.argv) > 1: aidx = 1 while aidx < len(sys.argv): if sys.argv[aidx] == "-h" or sys.argv[aidx] == "--help": usage() if sys.argv[aidx] == "-u": # or --user= uname = sys.argv[aidx + 1] aidx += 2 elif sys.argv[aidx].startswith("--user"): splitArg = sys.argv[aidx].split("=") try: uname = splitArg[1] except: print "mpdlistjobs: invalid argument:", sys.argv[aidx] usage() aidx += 1 elif sys.argv[aidx] == "-j": # or --jobid= jobid = sys.argv[aidx + 1] aidx += 2 sjobid = jobid.split("@") # jobnum and originating host elif sys.argv[aidx].startswith("--jobid"): splitArg = sys.argv[aidx].split("=") try: jobid = splitArg[1] sjobid = jobid.split("@") # jobnum and originating host except: print "mpdlistjobs: invalid argument:", sys.argv[aidx] usage() aidx += 1 elif sys.argv[aidx] == "-a": # or --alias= jobalias = sys.argv[aidx + 1] aidx += 2 elif sys.argv[aidx].startswith("--alias"): splitArg = sys.argv[aidx].split("=") try: jobalias = splitArg[1] except: print "mpdlistjobs: invalid argument:", sys.argv[aidx] usage() aidx += 1 elif sys.argv[aidx] == "--sss": sssPrintFormat = 1 aidx += 1 else: print "unrecognized arg: %s" % sys.argv[aidx] sys.exit(-1) parmdb = MPDParmDB(orderedSources=["cmdline", "xml", "env", "rcfile", "thispgm"]) parmsToOverride = {"MPD_USE_ROOT_MPD": 0, "MPD_SECRETWORD": ""} for (k, v) in parmsToOverride.items(): parmdb[("thispgm", k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os, "getuid") and os.getuid() == 0) or parmdb["MPD_USE_ROOT_MPD"]: fullDirName = os.path.abspath(os.path.split(sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName, "mpdroot") conSock = MPDConClientSock(mpdroot=mpdroot, secretword=parmdb["MPD_SECRETWORD"]) else: conSock = MPDConClientSock(secretword=parmdb["MPD_SECRETWORD"]) msgToSend = {"cmd": "mpdlistjobs"} conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=5.0) if not msg: mpd_print(1, "no msg recvd from mpd before timeout") if msg["cmd"] != "local_mpdid": # get full id of local mpd for filters later mpd_print(1, "did not recv local_mpdid msg from local mpd; instead, recvd: %s" % msg) else: if len(sjobid) == 1: sjobid.append(msg["id"]) done = 0 while not done: msg = conSock.recv_dict_msg() if not msg.has_key("cmd"): mpd_print(1, "mpdlistjobs: INVALID msg=:%s:" % (msg)) sys.exit(-1) if msg["cmd"] == "mpdlistjobs_info": smjobid = msg["jobid"].split(" ") # jobnum, mpdid, and alias (if present) if len(smjobid) < 3: smjobid.append("") print_based_on_uname = 0 # default print_based_on_jobid = 0 # default print_based_on_jobalias = 0 # default if not uname or uname == msg["username"]: print_based_on_uname = 1 if not jobid and not jobalias: print_based_on_jobid = 1 print_based_on_jobalias = 1 else: if sjobid and sjobid[0] == smjobid[0] and sjobid[1] == smjobid[1]: print_based_on_jobid = 1 if jobalias and jobalias == smjobid[2]: print_based_on_jobalias = 1 if not smjobid[2]: smjobid[2] = " " # just for printing if print_based_on_uname and (print_based_on_jobid or print_based_on_jobalias): if sssPrintFormat: print "%s %s %s" % (msg["host"], msg["clipid"], msg["sid"]) else: print "jobid = %s@%s" % (smjobid[0], smjobid[1]) print "jobalias = %s" % (smjobid[2]) print "username = %s" % (msg["username"]) print "host = %s" % (msg["host"]) print "pid = %s" % (msg["clipid"]) print "sid = %s" % (msg["sid"]) print "rank = %s" % (msg["rank"]) print "pgm = %s" % (msg["pgm"]) print else: # mpdlistjobs_trailer done = 1 conSock.close()
def mpdboot(): global myHost, fullDirName, rshCmd, user, mpdCmd, debug, verbose myHost = gethostname() mpd_set_my_id('mpdboot_%s' % (myHost) ) fullDirName = path.abspath(path.split(argv[0])[0]) rshCmd = 'ssh' user = mpd_get_my_username() mpdCmd = path.join(fullDirName,'mpd.py') hostsFilename = 'mpd.hosts' totalnumToStart = 1 # may get chgd below debug = 0 verbose = 0 localConArg = '' remoteConArg = '' oneMPDPerHost = 1 myNcpus = 1 myIfhn = '' chkupIndicator = 0 # 1 -> chk and start ; 2 -> just chk maxUnderOneRoot = 4 try: shell = path.split(environ['SHELL'])[-1] except: shell = 'csh' argidx = 1 # skip arg 0 while argidx < len(argv): if argv[argidx] == '-h' or argv[argidx] == '--help': usage() elif argv[argidx] == '-r': # or --rsh= rshCmd = argv[argidx+1] argidx += 2 elif argv[argidx].startswith('--rsh'): splitArg = argv[argidx].split('=') try: rshCmd = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-u': # or --user= user = argv[argidx+1] argidx += 2 elif argv[argidx].startswith('--user'): splitArg = argv[argidx].split('=') try: user = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-m': # or --mpd= mpdCmd = argv[argidx+1] argidx += 2 elif argv[argidx].startswith('--mpd'): splitArg = argv[argidx].split('=') try: mpdCmd = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-f': # or --file= hostsFilename = argv[argidx+1] argidx += 2 elif argv[argidx].startswith('--file'): splitArg = argv[argidx].split('=') try: hostsFilename = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx].startswith('--ncpus'): splitArg = argv[argidx].split('=') try: myNcpus = int(splitArg[1]) except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx].startswith('--ifhn'): splitArg = argv[argidx].split('=') myIfhn = splitArg[1] myHost = splitArg[1] argidx += 1 elif argv[argidx] == '-n': # or --totalnum= totalnumToStart = int(argv[argidx+1]) argidx += 2 elif argv[argidx].startswith('--totalnum'): splitArg = argv[argidx].split('=') try: totalnumToStart = int(splitArg[1]) except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx].startswith('--maxbranch'): splitArg = argv[argidx].split('=') try: maxUnderOneRoot = int(splitArg[1]) except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-d' or argv[argidx] == '--debug': debug = 1 argidx += 1 elif argv[argidx] == '-s' or argv[argidx] == '--shell': shell = 'bourne' argidx += 1 elif argv[argidx] == '-v' or argv[argidx] == '--verbose': verbose = 1 argidx += 1 elif argv[argidx] == '-c' or argv[argidx] == '--chkup': chkupIndicator = 1 argidx += 1 elif argv[argidx] == '--chkuponly': chkupIndicator = 2 argidx += 1 elif argv[argidx] == '-1': oneMPDPerHost = 0 argidx += 1 elif argv[argidx] == '--loccons': localConArg = '-n' argidx += 1 elif argv[argidx] == '--remcons': remoteConArg = '-n' argidx += 1 else: print 'mpdboot: unrecognized argument:', argv[argidx] usage() # Fix for tt#662, make sure the config file is available to avoid some very # confusing error messages. We don't actually need these values here. parmdb = MPDParmDB() parmdb.get_parms_from_rcfile(parmsToOverride={}, errIfMissingFile=1) if debug: print 'debug: starting' lines = [] if totalnumToStart > 1: try: f = open(hostsFilename,'r') for line in f: lines.append(line) except: print 'unable to open (or read) hostsfile %s' % (hostsFilename) exit(-1) hostsAndInfo = [ {'host' : myHost, 'ncpus' : myNcpus, 'ifhn' : myIfhn} ] for line in lines: line = line.strip() if not line or line[0] == '#': continue splitLine = re.split(r'\s+',line) host = splitLine[0] ncpus = 1 # default if ':' in host: (host,ncpus) = host.split(':',1) ncpus = int(ncpus) ifhn = '' # default for kv in splitLine[1:]: (k,v) = kv.split('=',1) if k == 'ifhn': ifhn = v hostsAndInfo.append( {'host' : host, 'ncpus' : ncpus, 'ifhn' : ifhn} ) cachedIPs = {} if oneMPDPerHost and totalnumToStart > 1: oldHostsAndInfo = hostsAndInfo[:] hostsAndInfo = [] for hostAndInfo in oldHostsAndInfo: oldhost = hostAndInfo['host'] try: ips = gethostbyname_ex(oldhost)[2] # may fail if invalid host except: print 'unable to obtain IP for host:', oldhost continue uips = {} # unique ips for ip in ips: uips[ip] = 1 keep = 1 for ip in uips.keys(): if cachedIPs.has_key(ip): keep = 0 break if keep: hostsAndInfo.append(hostAndInfo) cachedIPs.update(uips) if len(hostsAndInfo) < totalnumToStart: # one is local print 'totalnum=%d numhosts=%d' % (totalnumToStart,len(hostsAndInfo)) print 'there are not enough hosts on which to start all processes' exit(-1) if chkupIndicator: hostsToCheck = [ hai['host'] for hai in hostsAndInfo[1:totalnumToStart] ] (upList,dnList) = chkupdn(hostsToCheck) if dnList: print "these hosts are down; exiting" print dnList exit(-1) print "there are %d hosts up (counting local)" % (len(upList)+1) if chkupIndicator == 2: # do the chkup and quit exit(0) try: # stop current (if any) mpds; ignore the output getoutput('%s/mpdallexit.py' % (fullDirName)) if verbose or debug: print 'running mpdallexit on %s' % (myHost) except: pass if environ.has_key('MPD_TMPDIR'): tmpdir = environ['MPD_TMPDIR'] else: tmpdir = '' if myIfhn: ifhn = '--ifhn=%s' % (myIfhn) else: ifhn = '' hostsAndInfo[0]['entry_host'] = '' hostsAndInfo[0]['entry_port'] = '' mpdArgs = '%s %s --ncpus=%d' % (localConArg,ifhn,myNcpus) if tmpdir: mpdArgs += ' --tmpdir=%s' % (tmpdir) (mpdPID,mpdFD) = launch_one_mpd(0,0,mpdArgs,hostsAndInfo) fd2idx = {mpdFD : 0} handle_mpd_output(mpdFD,fd2idx,hostsAndInfo) try: from os import sysconf maxfds = sysconf('SC_OPEN_MAX') except: maxfds = 1024 maxAtOnce = min(128,maxfds-8) # -8 for stdeout, etc. + a few more for padding hostsSeen = { myHost : 1 } fdsToSelect = [] numStarted = 1 # local already going numStarting = 0 numUnderCurrRoot = 0 possRoots = [] currRoot = 0 idxToStart = 1 # local mpd already going while numStarted < totalnumToStart: if numStarting < maxAtOnce and idxToStart < totalnumToStart: if numUnderCurrRoot < maxUnderOneRoot: entryHost = hostsAndInfo[currRoot]['host'] entryPort = hostsAndInfo[currRoot]['list_port'] hostsAndInfo[idxToStart]['entry_host'] = entryHost hostsAndInfo[idxToStart]['entry_port'] = entryPort if hostsSeen.has_key(hostsAndInfo[idxToStart]['host']): remoteConArg = '-n' myNcpus = hostsAndInfo[idxToStart]['ncpus'] ifhn = hostsAndInfo[idxToStart]['ifhn'] if ifhn: ifhn = '--ifhn=%s' % (ifhn) mpdArgs = '%s -h %s -p %s %s --ncpus=%d' % (remoteConArg,entryHost,entryPort,ifhn,myNcpus) if tmpdir: mpdArgs += ' --tmpdir=%s' % (tmpdir) (mpdPID,mpdFD) = launch_one_mpd(idxToStart,currRoot,mpdArgs,hostsAndInfo) numStarting += 1 numUnderCurrRoot += 1 hostsAndInfo[idxToStart]['pid'] = mpdPID hostsSeen[hostsAndInfo[idxToStart]['host']] = 1 fd2idx[mpdFD] = idxToStart fdsToSelect.append(mpdFD) idxToStart += 1 else: if possRoots: currRoot = possRoots.pop() numUnderCurrRoot = 0 selectTime = 0.01 else: selectTime = 0.1 try: (readyFDs,unused1,unused2) = select(fdsToSelect,[],[],selectTime) except error, errmsg: mpd_print(1,'mpdboot: select failed: errmsg=:%s:' % (errmsg) ) exit(-1) for fd in readyFDs: handle_mpd_output(fd,fd2idx,hostsAndInfo) numStarted += 1 numStarting -= 1 possRoots.append(fd2idx[fd]) fdsToSelect.remove(fd) fd.close()
def mpdboot(): global myHost, fullDirName, rshCmd, user, mpdCmd, debug, verbose myHost = gethostname() mpd_set_my_id('mpdboot_%s' % (myHost)) fullDirName = path.abspath(path.split(argv[0])[0]) rshCmd = 'ssh' user = mpd_get_my_username() mpdCmd = path.join(fullDirName, 'mpd.py') hostsFilename = 'mpd.hosts' totalnumToStart = 1 # may get chgd below debug = 0 verbose = 0 localConArg = '' remoteConArg = '' oneMPDPerHost = 1 myNcpus = 1 myIfhn = '' chkupIndicator = 0 # 1 -> chk and start ; 2 -> just chk maxUnderOneRoot = 4 try: shell = path.split(environ['SHELL'])[-1] except: shell = 'csh' argidx = 1 # skip arg 0 while argidx < len(argv): if argv[argidx] == '-h' or argv[argidx] == '--help': usage() elif argv[argidx] == '-r': # or --rsh= rshCmd = argv[argidx + 1] argidx += 2 elif argv[argidx].startswith('--rsh'): splitArg = argv[argidx].split('=') try: rshCmd = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-u': # or --user= user = argv[argidx + 1] argidx += 2 elif argv[argidx].startswith('--user'): splitArg = argv[argidx].split('=') try: user = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-m': # or --mpd= mpdCmd = argv[argidx + 1] argidx += 2 elif argv[argidx].startswith('--mpd'): splitArg = argv[argidx].split('=') try: mpdCmd = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-f': # or --file= hostsFilename = argv[argidx + 1] argidx += 2 elif argv[argidx].startswith('--file'): splitArg = argv[argidx].split('=') try: hostsFilename = splitArg[1] except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx].startswith('--ncpus'): splitArg = argv[argidx].split('=') try: myNcpus = int(splitArg[1]) except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx].startswith('--ifhn'): splitArg = argv[argidx].split('=') myIfhn = splitArg[1] myHost = splitArg[1] argidx += 1 elif argv[argidx] == '-n': # or --totalnum= totalnumToStart = int(argv[argidx + 1]) argidx += 2 elif argv[argidx].startswith('--totalnum'): splitArg = argv[argidx].split('=') try: totalnumToStart = int(splitArg[1]) except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx].startswith('--maxbranch'): splitArg = argv[argidx].split('=') try: maxUnderOneRoot = int(splitArg[1]) except: print 'mpdboot: invalid argument:', argv[argidx] usage() argidx += 1 elif argv[argidx] == '-d' or argv[argidx] == '--debug': debug = 1 argidx += 1 elif argv[argidx] == '-s' or argv[argidx] == '--shell': shell = 'bourne' argidx += 1 elif argv[argidx] == '-v' or argv[argidx] == '--verbose': verbose = 1 argidx += 1 elif argv[argidx] == '-c' or argv[argidx] == '--chkup': chkupIndicator = 1 argidx += 1 elif argv[argidx] == '--chkuponly': chkupIndicator = 2 argidx += 1 elif argv[argidx] == '-1': oneMPDPerHost = 0 argidx += 1 elif argv[argidx] == '--loccons': localConArg = '-n' argidx += 1 elif argv[argidx] == '--remcons': remoteConArg = '-n' argidx += 1 else: print 'mpdboot: unrecognized argument:', argv[argidx] usage() # Fix for tt#662, make sure the config file is available to avoid some very # confusing error messages. We don't actually need these values here. parmdb = MPDParmDB() parmdb.get_parms_from_rcfile(parmsToOverride={}, errIfMissingFile=1) if debug: print 'debug: starting' lines = [] if totalnumToStart > 1: try: f = open(hostsFilename, 'r') for line in f: lines.append(line) except: print 'unable to open (or read) hostsfile %s' % (hostsFilename) exit(-1) hostsAndInfo = [{'host': myHost, 'ncpus': myNcpus, 'ifhn': myIfhn}] for line in lines: line = line.strip() if not line or line[0] == '#': continue splitLine = re.split(r'\s+', line) host = splitLine[0] ncpus = 1 # default if ':' in host: (host, ncpus) = host.split(':', 1) ncpus = int(ncpus) ifhn = '' # default for kv in splitLine[1:]: (k, v) = kv.split('=', 1) if k == 'ifhn': ifhn = v hostsAndInfo.append({'host': host, 'ncpus': ncpus, 'ifhn': ifhn}) cachedIPs = {} if oneMPDPerHost and totalnumToStart > 1: oldHostsAndInfo = hostsAndInfo[:] hostsAndInfo = [] for hostAndInfo in oldHostsAndInfo: oldhost = hostAndInfo['host'] try: ips = gethostbyname_ex(oldhost)[2] # may fail if invalid host except: print 'unable to obtain IP for host:', oldhost continue uips = {} # unique ips for ip in ips: uips[ip] = 1 keep = 1 for ip in uips.keys(): if cachedIPs.has_key(ip): keep = 0 break if keep: hostsAndInfo.append(hostAndInfo) cachedIPs.update(uips) if len(hostsAndInfo) < totalnumToStart: # one is local print 'totalnum=%d numhosts=%d' % (totalnumToStart, len(hostsAndInfo)) print 'there are not enough hosts on which to start all processes' exit(-1) if chkupIndicator: hostsToCheck = [hai['host'] for hai in hostsAndInfo[1:totalnumToStart]] (upList, dnList) = chkupdn(hostsToCheck) if dnList: print "these hosts are down; exiting" print dnList exit(-1) print "there are %d hosts up (counting local)" % (len(upList) + 1) if chkupIndicator == 2: # do the chkup and quit exit(0) try: # stop current (if any) mpds; ignore the output getoutput('%s/mpdallexit.py' % (fullDirName)) if verbose or debug: print 'running mpdallexit on %s' % (myHost) except: pass if environ.has_key('MPD_TMPDIR'): tmpdir = environ['MPD_TMPDIR'] else: tmpdir = '' if myIfhn: ifhn = '--ifhn=%s' % (myIfhn) else: ifhn = '' hostsAndInfo[0]['entry_host'] = '' hostsAndInfo[0]['entry_port'] = '' mpdArgs = '%s %s --ncpus=%d' % (localConArg, ifhn, myNcpus) if tmpdir: mpdArgs += ' --tmpdir=%s' % (tmpdir) (mpdPID, mpdFD) = launch_one_mpd(0, 0, mpdArgs, hostsAndInfo) fd2idx = {mpdFD: 0} handle_mpd_output(mpdFD, fd2idx, hostsAndInfo) try: from os import sysconf maxfds = sysconf('SC_OPEN_MAX') except: maxfds = 1024 maxAtOnce = min(128, maxfds - 8) # -8 for stdeout, etc. + a few more for padding hostsSeen = {myHost: 1} fdsToSelect = [] numStarted = 1 # local already going numStarting = 0 numUnderCurrRoot = 0 possRoots = [] currRoot = 0 idxToStart = 1 # local mpd already going while numStarted < totalnumToStart: if numStarting < maxAtOnce and idxToStart < totalnumToStart: if numUnderCurrRoot < maxUnderOneRoot: entryHost = hostsAndInfo[currRoot]['host'] entryPort = hostsAndInfo[currRoot]['list_port'] hostsAndInfo[idxToStart]['entry_host'] = entryHost hostsAndInfo[idxToStart]['entry_port'] = entryPort if hostsSeen.has_key(hostsAndInfo[idxToStart]['host']): remoteConArg = '-n' myNcpus = hostsAndInfo[idxToStart]['ncpus'] ifhn = hostsAndInfo[idxToStart]['ifhn'] if ifhn: ifhn = '--ifhn=%s' % (ifhn) mpdArgs = '%s -h %s -p %s %s --ncpus=%d' % ( remoteConArg, entryHost, entryPort, ifhn, myNcpus) if tmpdir: mpdArgs += ' --tmpdir=%s' % (tmpdir) (mpdPID, mpdFD) = launch_one_mpd(idxToStart, currRoot, mpdArgs, hostsAndInfo) numStarting += 1 numUnderCurrRoot += 1 hostsAndInfo[idxToStart]['pid'] = mpdPID hostsSeen[hostsAndInfo[idxToStart]['host']] = 1 fd2idx[mpdFD] = idxToStart fdsToSelect.append(mpdFD) idxToStart += 1 else: if possRoots: currRoot = possRoots.pop() numUnderCurrRoot = 0 selectTime = 0.01 else: selectTime = 0.1 try: (readyFDs, unused1, unused2) = select(fdsToSelect, [], [], selectTime) except error, errmsg: mpd_print(1, 'mpdboot: select failed: errmsg=:%s:' % (errmsg)) exit(-1) for fd in readyFDs: handle_mpd_output(fd, fd2idx, hostsAndInfo) numStarted += 1 numStarting -= 1 possRoots.append(fd2idx[fd]) fdsToSelect.remove(fd) fd.close()
def mpdlistjobs(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb signal.signal(signal.SIGINT, sig_handler) mpd_set_my_id(myid='mpdlistjobs') uname = '' jobid = '' sjobid = '' jobalias = '' sssPrintFormat = 0 if len(sys.argv) > 1: aidx = 1 while aidx < len(sys.argv): if sys.argv[aidx] == '-h' or sys.argv[aidx] == '--help': usage() if sys.argv[aidx] == '-u': # or --user= uname = sys.argv[aidx + 1] aidx += 2 elif sys.argv[aidx].startswith('--user'): splitArg = sys.argv[aidx].split('=') try: uname = splitArg[1] except: print 'mpdlistjobs: invalid argument:', sys.argv[aidx] usage() aidx += 1 elif sys.argv[aidx] == '-j': # or --jobid= jobid = sys.argv[aidx + 1] aidx += 2 sjobid = jobid.split('@') # jobnum and originating host elif sys.argv[aidx].startswith('--jobid'): splitArg = sys.argv[aidx].split('=') try: jobid = splitArg[1] sjobid = jobid.split('@') # jobnum and originating host except: print 'mpdlistjobs: invalid argument:', sys.argv[aidx] usage() aidx += 1 elif sys.argv[aidx] == '-a': # or --alias= jobalias = sys.argv[aidx + 1] aidx += 2 elif sys.argv[aidx].startswith('--alias'): splitArg = sys.argv[aidx].split('=') try: jobalias = splitArg[1] except: print 'mpdlistjobs: invalid argument:', sys.argv[aidx] usage() aidx += 1 elif sys.argv[aidx] == '--sss': sssPrintFormat = 1 aidx += 1 else: print 'unrecognized arg: %s' % sys.argv[aidx] sys.exit(-1) parmdb = MPDParmDB( orderedSources=['cmdline', 'xml', 'env', 'rcfile', 'thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD': 0, 'MPD_SECRETWORD': '', } for (k, v) in parmsToOverride.items(): parmdb[('thispgm', k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if (hasattr(os, 'getuid') and os.getuid() == 0) or parmdb['MPD_USE_ROOT_MPD']: fullDirName = os.path.abspath(os.path.split( sys.argv[0])[0]) # normalize mpdroot = os.path.join(fullDirName, 'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot, secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = {'cmd': 'mpdlistjobs'} conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=5.0) if not msg: mpd_print(1, 'no msg recvd from mpd before timeout') if msg['cmd'] != 'local_mpdid': # get full id of local mpd for filters later mpd_print( 1, 'did not recv local_mpdid msg from local mpd; instead, recvd: %s' % msg) else: if len(sjobid) == 1: sjobid.append(msg['id']) done = 0 while not done: msg = conSock.recv_dict_msg() if not msg.has_key('cmd'): mpd_print(1, 'mpdlistjobs: INVALID msg=:%s:' % (msg)) sys.exit(-1) if msg['cmd'] == 'mpdlistjobs_info': smjobid = msg['jobid'].split( ' ') # jobnum, mpdid, and alias (if present) if len(smjobid) < 3: smjobid.append('') print_based_on_uname = 0 # default print_based_on_jobid = 0 # default print_based_on_jobalias = 0 # default if not uname or uname == msg['username']: print_based_on_uname = 1 if not jobid and not jobalias: print_based_on_jobid = 1 print_based_on_jobalias = 1 else: if sjobid and sjobid[0] == smjobid[0] and sjobid[1] == smjobid[ 1]: print_based_on_jobid = 1 if jobalias and jobalias == smjobid[2]: print_based_on_jobalias = 1 if not smjobid[2]: smjobid[2] = ' ' # just for printing if print_based_on_uname and (print_based_on_jobid or print_based_on_jobalias): if sssPrintFormat: print "%s %s %s" % (msg['host'], msg['clipid'], msg['sid']) else: print 'jobid = %s@%s' % (smjobid[0], smjobid[1]) print 'jobalias = %s' % (smjobid[2]) print 'username = %s' % (msg['username']) print 'host = %s' % (msg['host']) print 'pid = %s' % (msg['clipid']) print 'sid = %s' % (msg['sid']) print 'rank = %s' % (msg['rank']) print 'pgm = %s' % (msg['pgm']) print else: # mpdlistjobs_trailer done = 1 conSock.close()
def mpdsigjob(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(argv) < 3 or argv[1] == '-h' or argv[1] == '--help': usage() signal(SIGINT, sig_handler) mpd_set_my_id(myid='mpdsigjob') sigtype = argv[1] if sigtype.startswith('-'): sigtype = sigtype[1:] if sigtype.startswith('SIG'): sigtype = sigtype[3:] import signal as tmpsig # just to get valid SIG's if sigtype.isdigit(): if int(sigtype) > tmpsig.NSIG: print 'invalid signum: %s' % (sigtype) exit(-1) else: if not tmpsig.__dict__.has_key('SIG' + sigtype): print 'invalid sig type: %s' % (sigtype) exit(-1) jobalias = '' jobnum = '' mpdid = '' single_or_group = 'g' i = 2 while i < len(argv): if argv[i] == '-a': if jobnum: # should not have both alias and jobid print '** cannot specify both jobalias and jobid' usage() jobalias = argv[i + 1] i += 1 jobnum = '0' elif argv[i] == '-j': if jobalias: # should not have both alias and jobid print '** cannot specify both jobalias and jobid' usage() jobid = argv[i + 1] i += 1 sjobid = jobid.split('@') jobnum = sjobid[0] if len(sjobid) > 1: mpdid = sjobid[1] elif argv[i] == '-s': single_or_group = 's' elif argv[i] == '-g': single_or_group = 'g' else: print '** unrecognized arg: %s' % (argv[i]) usage() i += 1 parmdb = MPDParmDB( orderedSources=['cmdline', 'xml', 'env', 'rcfile', 'thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD': 0, 'MPD_SECRETWORD': '', } for (k, v) in parmsToOverride.items(): parmdb[('thispgm', k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if getuid() == 0 or parmdb['MPD_USE_ROOT_MPD']: fullDirName = path.abspath(path.split(argv[0])[0]) # normalize mpdroot = path.join(fullDirName, 'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot, secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = { 'cmd': 'mpdsigjob', 'sigtype': sigtype, 'jobnum': jobnum, 'mpdid': mpdid, 'jobalias': jobalias, 's_or_g': single_or_group, 'username': mpd_get_my_username() } conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=5.0) if not msg: mpd_print(1, 'no msg recvd from mpd before timeout') if msg['cmd'] != 'mpdsigjob_ack': if msg['cmd'] == 'already_have_a_console': mpd_print( 1, 'mpd already has a console (e.g. for long ringtest); try later' ) else: mpd_print(1, 'unexpected message from mpd: %s' % (msg)) exit(-1) if not msg['handled']: print 'job not found' exit(-1) conSock.close()
def mpdsigjob(): import sys # to get access to excepthook in next line sys.excepthook = mpd_uncaught_except_tb if len(argv) < 3 or argv[1] == '-h' or argv[1] == '--help': usage() signal(SIGINT, sig_handler) mpd_set_my_id(myid='mpdsigjob') sigtype = argv[1] if sigtype.startswith('-'): sigtype = sigtype[1:] if sigtype.startswith('SIG'): sigtype = sigtype[3:] import signal as tmpsig # just to get valid SIG's if sigtype.isdigit(): if int(sigtype) > tmpsig.NSIG: print 'invalid signum: %s' % (sigtype) exit(-1) else: if not tmpsig.__dict__.has_key('SIG' + sigtype): print 'invalid sig type: %s' % (sigtype) exit(-1) jobalias = '' jobnum = '' mpdid = '' single_or_group = 'g' i = 2 while i < len(argv): if argv[i] == '-a': if jobnum: # should not have both alias and jobid print '** cannot specify both jobalias and jobid' usage() jobalias = argv[i+1] i += 1 jobnum = '0' elif argv[i] == '-j': if jobalias: # should not have both alias and jobid print '** cannot specify both jobalias and jobid' usage() jobid = argv[i+1] i += 1 sjobid = jobid.split('@') jobnum = sjobid[0] if len(sjobid) > 1: mpdid = sjobid[1] elif argv[i] == '-s': single_or_group = 's' elif argv[i] == '-g': single_or_group = 'g' else: print '** unrecognized arg: %s' % (argv[i]) usage() i += 1 parmdb = MPDParmDB(orderedSources=['cmdline','xml','env','rcfile','thispgm']) parmsToOverride = { 'MPD_USE_ROOT_MPD' : 0, 'MPD_SECRETWORD' : '', } for (k,v) in parmsToOverride.items(): parmdb[('thispgm',k)] = v parmdb.get_parms_from_env(parmsToOverride) parmdb.get_parms_from_rcfile(parmsToOverride) if getuid() == 0 or parmdb['MPD_USE_ROOT_MPD']: fullDirName = path.abspath(path.split(argv[0])[0]) # normalize mpdroot = path.join(fullDirName,'mpdroot') conSock = MPDConClientSock(mpdroot=mpdroot,secretword=parmdb['MPD_SECRETWORD']) else: conSock = MPDConClientSock(secretword=parmdb['MPD_SECRETWORD']) msgToSend = {'cmd' : 'mpdsigjob', 'sigtype': sigtype, 'jobnum' : jobnum, 'mpdid' : mpdid, 'jobalias' : jobalias, 's_or_g' : single_or_group, 'username' : mpd_get_my_username() } conSock.send_dict_msg(msgToSend) msg = conSock.recv_dict_msg(timeout=5.0) if not msg: mpd_print(1,'no msg recvd from mpd before timeout') if msg['cmd'] != 'mpdsigjob_ack': if msg['cmd'] == 'already_have_a_console': mpd_print(1,'mpd already has a console (e.g. for long ringtest); try later') else: mpd_print(1,'unexpected message from mpd: %s' % (msg) ) exit(-1) if not msg['handled']: print 'job not found' exit(-1) conSock.close()