📄 mpd.py
字号:
# permit anyone to run but use THEIR own username # thus, override any username specified by the user if self.conSock.realUsername != 'root': msg['username'] = self.conSock.realUsername msg['users'] = { (0,msg['nprocs']-1) : self.conSock.realUsername } # msg['mpdid_mpdrun_start'] = self.myId msg['nstarted_on_this_loop'] = 0 msg['first_loop'] = 1 msg['ringsize'] = 0 msg['ring_ncpus'] = 0 if msg.has_key('try_1st_locally'): self.do_mpdrun(msg) else: self.ring.rhsSock.send_dict_msg(msg) # send ack after job is going elif msg['cmd'] == 'get_mpdrun_values': msgToSend = { 'cmd' : 'response_get_mpdrun_values', 'mpd_version' : mpd_version(), 'mpd_ifhn' : self.myIfhn } self.conSock.send_dict_msg(msgToSend) elif msg['cmd'] == 'mpdtrace': msgToSend = { 'cmd' : 'mpdtrace_info', 'dest' : self.myId, 'id' : self.myId, 'ifhn' : self.myIfhn, 'lhsport' : '%s' % (self.ring.lhsPort), 'lhsifhn' : '%s' % (self.ring.lhsIfhn), 'rhsport' : '%s' % (self.ring.rhsPort), 'rhsifhn' : '%s' % (self.ring.rhsIfhn) } self.ring.rhsSock.send_dict_msg(msgToSend) msgToSend = { 'cmd' : 'mpdtrace_trailer', 'dest' : self.myId } self.ring.rhsSock.send_dict_msg(msgToSend) # do not send an ack to console now; will send trace info later elif msg['cmd'] == 'mpdallexit': if self.conSock.realUsername != self.myRealUsername: msgToSend = { 'cmd':'invalid_username_to_make_this_request' } self.conSock.send_dict_msg(msgToSend) self.streamHandler.del_handler(self.conSock) self.conSock.close() self.conSock = 0 return # self.allExiting = 1 # doesn't really help here self.ring.rhsSock.send_dict_msg( {'cmd' : 'mpdallexit', 'src' : self.myId} ) self.conSock.send_dict_msg( {'cmd' : 'mpdallexit_ack'} ) elif msg['cmd'] == 'mpdexit': if self.conSock.realUsername != self.myRealUsername: msgToSend = { 'cmd':'invalid_username_to_make_this_request' } self.conSock.send_dict_msg(msgToSend) self.streamHandler.del_handler(self.conSock) self.conSock.close() self.conSock = 0 return if msg['mpdid'] == 'localmpd': msg['mpdid'] = self.myId self.ring.rhsSock.send_dict_msg( {'cmd' : 'mpdexit', 'src' : self.myId, 'done' : 0, 'dest' : msg['mpdid']} ) elif msg['cmd'] == 'mpdringtest': msg['src'] = self.myId self.ring.rhsSock.send_dict_msg(msg) # do not send an ack to console now; will send ringtest info later elif msg['cmd'] == 'mpdlistjobs': msgToSend = { 'cmd' : 'local_mpdid', 'id' : self.myId } self.conSock.send_dict_msg(msgToSend) for jobid in self.activeJobs.keys(): for manPid in self.activeJobs[jobid]: msgToSend = { 'cmd' : 'mpdlistjobs_info', 'dest' : self.myId, 'jobid' : jobid, 'username' : self.activeJobs[jobid][manPid]['username'], 'host' : self.myHost, 'ifhn' : self.myIfhn, 'clipid' : str(self.activeJobs[jobid][manPid]['clipid']), 'sid' : str(manPid), # may chg to actual sid later 'pgm' : self.activeJobs[jobid][manPid]['pgm'], 'rank' : self.activeJobs[jobid][manPid]['rank'] } self.conSock.send_dict_msg(msgToSend) msgToSend = { 'cmd' : 'mpdlistjobs_trailer', 'dest' : self.myId } self.ring.rhsSock.send_dict_msg(msgToSend) # do not send an ack to console now; will send listjobs info later elif msg['cmd'] == 'mpdkilljob': # permit anyone to kill but use THEIR own username # thus, override any username specified by the user if self.conSock.realUsername != 'root': msg['username'] = self.conSock.realUsername msg['src'] = self.myId msg['handled'] = 0 if msg['mpdid'] == '': msg['mpdid'] = self.myId self.ring.rhsSock.send_dict_msg(msg) # send ack to console after I get this msg back and do the kill myself elif msg['cmd'] == 'mpdsigjob': # permit anyone to sig but use THEIR own username # thus, override any username specified by the user if self.conSock.realUsername != 'root': msg['username'] = self.conSock.realUsername msg['src'] = self.myId msg['handled'] = 0 if msg['mpdid'] == '': msg['mpdid'] = self.myId self.ring.rhsSock.send_dict_msg(msg) # send ack to console after I get this msg back elif msg['cmd'] == 'verify_hosts_in_ring': msgToSend = { 'cmd' : 'verify_hosts_in_ring', 'dest' : self.myId, 'host_list' : msg['host_list'] } self.ring.rhsSock.send_dict_msg(msgToSend) # do not send an ack to console now; will send trace info later else: msgToSend = { 'cmd' : 'invalid_msg_received_from_you' } self.conSock.send_dict_msg(msgToSend) badMsg = 'invalid msg received from console: %s' % (str(msg)) mpd_print(1, badMsg) if syslog_module_available: syslog.syslog(syslog.LOG_ERR,badMsg) def handle_man_input(self,sock): msg = sock.recv_dict_msg() if not msg: for jobid in self.activeJobs.keys(): deleted = 0 for manPid in self.activeJobs[jobid]: if sock == self.activeJobs[jobid][manPid]['socktoman']: del self.activeJobs[jobid][manPid] if len(self.activeJobs[jobid]) == 0: del self.activeJobs[jobid] deleted = 1 break if deleted: break self.streamHandler.del_handler(sock) sock.close() return if not msg.has_key('cmd'): mpd_print(1, 'INVALID msg for man request msg=:%s:' % (msg) ) msgToSend = { 'cmd' : 'invalid_msg' } sock.send_dict_msg(msgToSend) self.streamHandler.del_handler(sock) sock.close() return if msg['cmd'] == 'client_info': jobid = msg['jobid'] manPid = msg['manpid'] self.activeJobs[jobid][manPid]['clipid'] = msg['clipid'] elif msg['cmd'] == 'spawn': msg['cmd'] = 'mpdrun' # handle much like an mpdrun from a console msg['mpdid_mpdrun_start'] = self.myId msg['nstarted_on_this_loop'] = 0 msg['first_loop'] = 1 msg['jobalias'] = '' msg['stdin_dest'] = '0' msg['ringsize'] = 0 msg['ring_ncpus'] = 0 msg['gdb'] = 0 msg['totalview'] = 0 self.ring.rhsSock.send_dict_msg(msg) elif msg['cmd'] == 'publish_name': self.pmi_published_names[msg['service']] = msg['port'] msgToSend = { 'cmd' : 'publish_result', 'info' : 'ok' } sock.send_dict_msg(msgToSend) elif msg['cmd'] == 'lookup_name': if self.pmi_published_names.has_key(msg['service']): msgToSend = { 'cmd' : 'lookup_result', 'info' : 'ok', 'port' : self.pmi_published_names[msg['service']] } sock.send_dict_msg(msgToSend) else: msg['cmd'] = 'pmi_lookup_name' # add pmi_ msg['src'] = self.myId msg['port'] = 0 # invalid self.ring.rhsSock.send_dict_msg(msg) elif msg['cmd'] == 'unpublish_name': if self.pmi_published_names.has_key(msg['service']): del self.pmi_published_names[msg['service']] msgToSend = { 'cmd' : 'unpublish_result', 'info' : 'ok' } sock.send_dict_msg(msgToSend) else: msg['cmd'] = 'pmi_unpublish_name' # add pmi_ msg['src'] = self.myId self.ring.rhsSocket.send_dict_msg(msg) else: mpd_print(1, 'INVALID request from man msg=:%s:' % (msg) ) msgToSend = { 'cmd' : 'invalid_request' } sock.send_dict_msg(msgToSend) def handle_lhs_input(self,sock): msg = self.ring.lhsSock.recv_dict_msg() if not msg: # lost lhs; don't worry mpd_print(0, "CLOSING self.ring.lhsSock ", self.ring.lhsSock ) self.streamHandler.del_handler(self.ring.lhsSock) self.ring.lhsSock.close() self.ring.lhsSock = 0 return if msg['cmd'] == 'mpdrun': if msg.has_key('mpdid_mpdrun_start') \ and msg['mpdid_mpdrun_start'] == self.myId: if msg['first_loop']: self.currRingSize = msg['ringsize'] self.currRingNCPUs = msg['ring_ncpus'] if msg['nstarted'] == msg['nprocs']: if self.conSock: msgToSend = {'cmd' : 'mpdrun_ack', 'ringsize' : self.currRingSize, 'ring_ncpus' : self.currRingNCPUs} self.conSock.send_dict_msg(msgToSend) return if not msg['first_loop'] and msg['nstarted_on_this_loop'] == 0: if msg.has_key('jobid'): msgToSend = {'cmd' : 'abortjob', 'src' : self.myId, 'jobid' : msg['jobid'], 'reason' : 'some_procs_not_started'} self.ring.rhsSock.send_dict_msg(msgToSend) if self.conSock: msgToSend = {'cmd' : 'job_failed', 'reason' : 'some_procs_not_started', 'remaining_hosts' : msg['hosts']} self.conSock.send_dict_msg(msgToSend) return msg['first_loop'] = 0 msg['nstarted_on_this_loop'] = 0 self.do_mpdrun(msg) elif msg['cmd'] == 'mpdtrace_info': if msg['dest'] == self.myId: if self.conSock: self.conSock.send_dict_msg(msg) else: self.ring.rhsSock.send_dict_msg(msg) elif msg['cmd'] == 'mpdtrace_trailer': if msg['dest'] == self.myId: if self.conSock: self.conSock.send_dict_msg(msg) else: msgToSend = { 'cmd' : 'mpdtrace_info', 'dest' : msg['dest'], 'id' : self.myId, 'ifhn' : self.myIfhn, 'lhsport' : '%s' % (self.ring.lhsPort), 'lhsifhn' : '%s' % (self.ring.lhsIfhn), 'rhsport' : '%s' % (self.ring.rhsPort), 'rhsifhn' : '%s' % (self.ring.rhsIfhn) } self.ring.rhsSock.send_dict_msg(msgToSend) self.ring.rhsSock.send_dict_msg(msg) elif msg['cmd'] == 'mpdlistjobs_info': if msg['dest'] == self.myId: if self.conSock: self.conSock.send_dict_msg(msg) else: self.ring.rhsSock.send_dict_msg(msg) elif msg['cmd'] == 'mpdlistjobs_trailer': if msg['dest'] == self.myId: if self.conSock: self.conSock.send_dict_msg(msg) else: for jobid in self.activeJobs.keys(): for manPid in self.activeJobs[jobid]: msgToSend = { 'cmd' : 'mpdlistjobs_info', 'dest' : msg['dest'], 'jobid' : jobid, 'username' : self.activeJobs[jobid][manPid]['username'], 'host' : self.myHost, 'clipid' : str(self.activeJobs[jobid][manPid]['clipid']), 'sid' : str(manPid), # may chg to actual sid later 'pgm' : self.activeJobs[jobid][manPid]['pgm'], 'rank' : self.activeJobs[jobid][manPid]['rank'] } self.ring.rhsSock.send_dict_msg(msgToSend) self.ring.rhsSock.send_dict_msg(msg) elif msg['cmd'] == 'mpdallexit': if self.allExiting: # already seen this once self.exiting = 1 # set flag to exit main loop self.allExiting = 1 self.ring.rhsSock.send_dict_msg(msg) elif msg['cmd'] == 'mpdexit': if msg['dest'] == self.myId:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -