def closeClient(c): try: self._doResponse(c.request, marshaller.package(Messages.CLOSED(namespace=namespace))) PyRQTimeUtils.delayTime(1) c.request.shutdown(socket.SHUT_WR) c.request.close() del c except Exception, _e: pass
def _stall(self, where, clientData, quiet): if not quiet: self.logger.debug("STALL %(W)s.\r\n"%{"W":where}) try: t = clientData["stall"][where] if not quiet: self.logger.info("STALL time: %(W)s\r\n"%{"W":t}) debugger = self.getDebugger() if (t!=None) and (t>0): if debugger: uu = debugger.delay_start(self.peerName, PyRQTimeUtils.getTime(), t, where) PyRQTimeUtils.delayTime(t) if (t!=None) and (t>0): if debugger: uu = debugger.delay_end(self.peerName, PyRQTimeUtils.getTime(), uu=uu) except Exception, _e: pass
def get(self, block=True, timeout=None): data = None # Calculate the maxTime: pollInterval = self._pollInterval timeStart = PyRQTimeUtils.getTime() maxTime = None if block==True: try: maxTime = timeStart + timeout except: pass if not self._quiet: self._logger.debug("GET blocking, maxTime: %(MT)s, timeStart: %(TS)s"%{"MT":maxTime, "TS":timeStart, "TO":timeout}) else: if not self._quiet: self._logger.debug("GET non-blocking") try: while True: timeDelay = None with self._lock: if self._closed==True: break if block==False: if len(self._data)==0: raise Empty() data = self._data.pop(0) break else: if len(self._data)==0: timeNow = PyRQTimeUtils.getTime() # Calculate the maxTime: if maxTime==None: remainingTime = pollInterval else: remainingTime = maxTime-timeNow if not self._quiet: self._logger.debug("GET blocking, maxTime: %(MT)s, timeStart: %(TS)s, timeNow: %(TN)s, remainingTime: %(RT)s"%{"TN":timeNow, "MT":maxTime, "TS":timeStart, "TO":timeout, "RT":remainingTime}) if remainingTime<=0: raise Empty() else: # Wait for minPeriod and try again: timeDelay = min(pollInterval, min(pollInterval, remainingTime)) else: data = self._data.pop(0) break if timeDelay!=None: PyRQTimeUtils.delayTime(timeDelay) except Exception, _e: raise
def get(self, block=True, timeout=None): data = None # Calculate the maxTime: pollInterval = self._pollInterval timeStart = PyRQTimeUtils.getTime() maxTime = None if block==True: try: maxTime = timeStart + timeout except: pass try: while True: timeDelay = None with self._lock: if self._closed==True: break if block==False: if len(self._data)==0: raise Empty() data = self._data.pop(0) break else: if len(self._data)==0: timeNow = PyRQTimeUtils.getTime() # Calculate the maxTime: if maxTime==None: remainingTime = pollInterval else: remainingTime = maxTime-timeNow if remainingTime<=0: raise Empty() else: # Wait for minPeriod and try again: timeDelay = min(pollInterval, min(pollInterval, remainingTime)) else: data = self._data.pop(0) break if timeDelay!=None: PyRQTimeUtils.delayTime(timeDelay) except Exception, _e: # self._logger.error("EEEEEEEERRRRRRRRROOOOOOOOORRRRRRRR.total: %(T)s.\r\n%(NS)s\r\n"%{"T":self._totalGot, "NS":traceback.format_exc()}) raise
self.logger.debug("PUT %(R)s OK from: %(W)s. "%{"R":ref, "W":iface.getLastSockDetails()}) with plock: ePuts.append(eData) self.logger.info("PUT %(R)s now: %(RR)s."%{"R":ref, "RR":len(ePuts)}) self.logger.error("PUT %(R)s COMPLETE."%{"R":ref}) putters.release() # Now create the data: for k in xrange(0, numData): J = k+1 delay = self.random.random() eData = "hello.world...%(C)s"%{"C":J} allPutData.append(eData) dataQ.put((delay, eData)) self.logger.debug("DATA contains %(D)s items...\r\n"%{"D":numData}) while dataQ.qsize()!=numData: PyRQTimeUtils.delayTime(1) putterThreads = [] for i in xrange(0, numPutters): k = i+1 t = threading.Thread(target=doPut, args=[initialDelay, k, putTimeout, dataQ]) t.setDaemon(True) t.setName("Parallel_PUT_%(C)s"%{"C":k}) self._timers.append(t) t.start() putterThreads.append(t) for k in xrange(0, numPutters): putters.acquire() # Now wait for all the data to be received: maxPutDelay = (1+(count*numGetters*1))*2 self.logger.info("Now waiting for all data to be put and got for MAX: %(T)s seconds..."%{"T":maxPutDelay}) gotData = []
t.start() del self._clients[namespace] # Now discard the buffer and queue: try: qData = clientData["queues"][namespace] except Exception, _e: pass else: # Tell each GET client to close: q = qData.q() for _ in xrange(numClients): try: q.put(_CLOSE(), block=False) except Exception, _e: pass PyRQTimeUtils.delayTime(1) qData.close() del clientData["queues"][namespace] clientData["stale-queues"].append(namespace) if debugger: debugger.closeClients_end(self.peerName, PyRQTimeUtils.getTime(), uu=uu) def _getPeerName(self): name = self.request.getpeername() return ":".join([str(name[0]), str(name[1])]) def setup(self): self.peerName = self._getPeerName() debugger = self.getDebugger(inst=RRQDebugger()) if debugger: uu = debugger.setup_start(self.peerName, PyRQTimeUtils.getTime()) quiet = self.getQuiet() self.logger = self.getNewLogger(self.peerName)