def process_request(self, request, client_address): """Fork a new subprocess to process the request.""" #traceback.print_stack() self.collect_children() chldPID = self.procHelper.makeChild() print "HTTP New Connection: Go Fork for accept: ", self.procHelper.PID2io(chldPID), chldPID parentrpid = os.getpid() pid = os.fork() if pid: # Parent process print "HTTPD Conn Parent:", self.procHelper.myPID ,chldPID self.procHelper.setIODebug(chldPID, 0, "HTTP->Connection") self.procHelper.initForParent(chldPID) self.procHelper.registerChild(chldPID, self.procHelper.myPID) sigset = self.procHelper self.procHelper.sendCommand(child = chldPID, command = "INTU_MCL", PID = chldPID, TID = 0, data = None) try: select.select([self.procHelper.PID2rfd(chldPID)], [],[], 0.1) except: pass tp = self.procHelper.readConn(chldPID) pid = int(tp[3]) l = sigset.getUserData() if l == None: l = [] l.append(pid) sigset.setUserData(l[:]) sigchldhandler(0, sigset) if self.active_children is None: self.active_children = [] self.active_children.append(pid) self.close_request(request) #print "PID", chldPID, "created ppid:", pid, sigset.getUserData() return else: # Child process. # This must never return, hence os._exit()! self.procHelper.setIODebug(chldPID, 0, "Connection->HTTP") gloPIO = self.procHelper.PID2io(chldPID) gloPPid = self.procHelper.myPID + 0 new_ph = CHLDHELPER.childHelper(gloPIO, gloPPid, chldPID) new_ph.setIODebug(chldPID, 0, "Connection->HTTP") new_ph.initForChild(gloPPid) self.procHelper = new_ph self.procHelper.parentppid = parentrpid print "HTTPD Conn Child:", chldPID, os.getpid(), self.procHelper.parentppid, self.procHelper.myPID, self.procHelper.gloPPid try: #print "I am new child:", os.getpid() self.procHelper.waitForParentCmd(timeout = 1) pcmd = self.procHelper.getParentCommand() self.procHelper.sendParentCommand(cmd = "IRSU_PPID", pid = chldPID, tid = 0, data=str(os.getpid())) self.finish_request(request, client_address) os._exit(0) except: try: self.handle_error(request, client_address) finally: os._exit(1)
def executeOne(self, key, hook, ci, name, Type, prms): " Execute post/pre/hook script." global OM_MGR chldPID = self.procHelper.makeChild() parentrpid = os.getpid() print "Executing With Container..", chldPID, self.mode, self.runit, prms pid = os.fork() if pid: self.procHelper.initForParent(chldPID) #self.procHelper.registerChild(chldPID, self.procHelper.myPID) self.procHelper.setIODebug(chldPID, 0, "TASession->ExecSession") return { "PID":chldPID, "key":key } else: # Child.. gloPIO = self.procHelper.PID2io(chldPID) gloPPid = self.procHelper.myPID + 0 new_ph = CHLDHELPER.childHelper(gloPIO, gloPPid, chldPID, "ExecSession->TASession(x1)") new_ph.parentppid = parentrpid new_ph.initForChild(gloPPid) new_ph.setIODebug(gloPPid, 0, "ExecSession->TASession(X2)") new_ph.modName = "ExecSession->TASession(X3)" new_ph.waitForParentCmd(1) new_ph.useDBSocket() while 1: if new_ph.waitForParentCmd(timeout = 2): break cmd = new_ph.getParentCommand() print "XXXXXXXXXXXX Exec Session Child: ", new_ph.myPID, os.getpid(), chldPID, new_ph.myPID, new_ph.gloPPid, cmd, "PRMS:", prms, hook runhook = hook[0](cAPI=ci[0], callerInfo=ci[1], chldHelper = new_ph, OMData = hook[1]) runhook.loadInstance(hook[2]) #def runOMNode(self, prms = {}, Type = "", name = "" ): cn = name[name.rfind(".")+1:] cv = runhook.runOMNode(prms=prms, Type = Type, name = cn) print os.getpid(), "Hook returned:", cv.execResult, COMARAPI.COMARValue.CVALget(cv.returnValue) rv = "%d %s" % (cv.execResult, COMARAPI.COMARValue.dump_value_xml(cv.returnValue)) print "XXXXXXXXX Exec Session RetVal:", rv new_ph.sendParentCommand("TRSU_FIN", new_ph.myPID, 0, rv) while 1: print "TACALL:434 Wait for parent LNTU_KILL" if new_ph.waitForParentCmd(timeout = 2): cmd = new_ph.getParentCommand() print "TACALL:437 CMD:",cmd if cmd[2] == "LNTU_KILL": break new_ph.exit()
def serve(self, use_PID, PPID, iochannel): print "RPC_UNIX: initializing..." self.procHelper = CHLDHELPER.childHelper(iochannel, PPID, use_PID) self.procHelper.extRFDHandler = self.handler self.procHelper.cmdHandler = self.cmdHandler self.procHelper.addSessionCommand(["INTU_COK", "LNTU_KILL", "INTU_AUTH", "TNTU_ARTA", "TRTU_SNDR", "TNTU_TANF"]) # setup the listening socket uc = UnixConn() uc.sock = self.make_named_pipe(rpc_file) uc.listen = 1 self.conns.append(uc) self.procHelper.addReadHnd(uc.sock.fileno()) # start listening print "RPC_UNIX: listening..." while True: #print "RPC_UNIX: PIO" ret = self.procHelper.ProcessIO() if ret == -2: print "RPC-UNIX: All childs and channels closed" self.procHelper.exit()
def initTAMGR(): """ Create TA_MGR. """ global TA_CHLDS, TA TA_CHLDS = CHLDHELPER.childHelper(None, 0, 0) TA = TAManager()
def runCmd(self, callModel, callType, callName, callPrms, callObj, callCode, caller="UI", wait_pid = 0, setvalue=None): print "\n\nJOBSESS:145 Start Transaction:", self.procHelper.modName, self.procHelper.myPID, "\n\n" chldPID = self.procHelper.makeChild() parentrpid = os.getpid() self.TIDS += 1 seq_key = str(self.TIDS) pid = os.fork() self.runCmdPid = os.getpid() if pid: self.procHelper.setIODebug(chldPID, 0, self.procHelper.modName + "->jobSessProvider") self.procHelper.initForParent(chldPID) self.procHelper.debug = 0 #self.procHelper.registerChild(chldPID, self.procHelper.myPID) print self.procHelper.myPID, "run Cmd...", chldPID, self.procHelper.chlds self.callData[chldPID] = [ callModel, callType, callName, callPrms, callObj, callCode, wait_pid ] self.control = "parent" return chldPID else: # Child.. # Job session only create a CALL Session and pass # required parameters. self.procHelper.setIODebug(chldPID, 0, "jobSessProvider->" + self.procHelper.modName) gloPIO = self.procHelper.PID2io(chldPID) gloPPid = self.procHelper.myPID + 0 #gloPIO, gloPPid, PID new_ph = CHLDHELPER.childHelper(gloPIO, gloPPid, chldPID, "jobSessProvider->" + self.procHelper.modName) new_ph.initForChild(gloPPid) new_ph.parentppid = parentrpid new_ph.useDBSocket() self.control = "child" #new_ph.initForChild(gloPPid) print "Call Session Start With pids: ", os.getpid(), chldPID, new_ph.parentppid, new_ph.myPID, new_ph.gloPPid self.procHelper = new_ph self.procHelper.clearSessionCommands() self.procHelper.addSessionCommand(["TRSU_OMC", "TRSU_OBJC", "TRTU_RUN", "TRSU_TAE", "TRSU_RTA", "TRSU_FIN", "TNSU_GET", "TNSU_GSID", "LNTU_KILL", "TRSU_SOBJ", "LNTU_KILL" ]) self.procHelper.cmdHandler = self.sessionCmdChildHandler prmArray = callPrms OM_MGR.setDBHelper(self.procHelper) TACALL.COMARAPI = COMARAPI TACALL.OM_MGR = OM_MGR callSession = TACALL.TAcallSession(sessMgr = new_ph, seq_key = seq_key, parent_seq = "0", Type = callType, Name = callName, prms = prmArray, conn = self.conn, user = self.user, caller = caller) if callModel == "OMCALL": callSession.initOMCALL(callName) elif callModel == "OBJCALL": callSession.initOBJCALL(callObj, callName) self.run_que.append(callSession) self.procHelper.minChild = 0 while 1: ret = self.procHelper.ProcessIO() print "STA LOOP 200", ret, self.runCmdPid, "pidof:", os.getpid(), "getppid:", os.getppid(), self.procHelper.modName #print SESSION.stackImage() if ret == -2: #self.procHelper.exit() #select.select([], [], [], 5) print self.procHelper.modName, "STA LOOP EXITED:", os.getpid() break elif type(ret) == type( () ): # A Command Return... command = ret[0] print self.procHelper.modName, "STA LOOP COMMAND:", os.getpid(), command new_ph.exit()
def setCOMARExtensions(self, myPID, parentPID, parentIO): self.procHelper = CHLDHELPER.childHelper(parentIO, parentPID, myPID, "HTTP-MainLoop") self.procHelper.setIODebug(parentPID, 0, "HTTP-MainLoop") self.procHelper.initForChild(parentPID) signal.signal(signal.SIGCHLD, sigchldhandler) print "HTTPD Socket Server: COMAR Ext:", self.procHelper.__class__