Beispiel #1
0
	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)
Beispiel #2
0
	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()
Beispiel #3
0
	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()
Beispiel #4
0
def initTAMGR():
	""" Create TA_MGR. """
	global TA_CHLDS, TA
	TA_CHLDS = CHLDHELPER.childHelper(None, 0, 0)
	TA = TAManager()
Beispiel #5
0
	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()
Beispiel #6
0
	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__