def remote_register_engine(self, engine_reference, id=None, pid=None, pproperties=None): # First adapt the engine_reference to a basic non-queued engine engine = IEngineBase(engine_reference) if pproperties: engine.properties = pickle.loads(pproperties) # Make it an IQueuedEngine before registration remote_engine = IEngineQueued(engine) # Get the ip/port of the remote side peer_address = engine_reference.tracker.broker.transport.getPeer() ip = peer_address.host port = peer_address.port reg_dict = self.service.register_engine(remote_engine, id, ip, port, pid) # Now setup callback for disconnect and unregistering the engine def notify(*args): return self.service.unregister_engine(reg_dict['id']) engine_reference.tracker.broker.notifyOnDisconnect(notify) engine.notifier = notify engine.stopNotifying = engine_reference.tracker.broker.dontNotifyOnDisconnect return reg_dict
def register_engine(self, engine_ref, id=None, ip=None, port=None, pid=None): self.engine = IEngineQueued(IEngineBase(engine_ref)) return {'id': id}
def register_engine(self, remoteEngine, id=None, ip=None, port=None, pid=None): """Register new engine connection""" # What happens if these assertions fail? assert IEngineCore.providedBy(remoteEngine), \ "engine passed to register_engine doesn't provide IEngineCore" assert IEngineSerialized.providedBy(remoteEngine), \ "engine passed to register_engine doesn't provide IEngineSerialized" assert IEngineQueued.providedBy(remoteEngine), \ "engine passed to register_engine doesn't provide IEngineQueued" assert isinstance(id, int) or id is None, \ "id to register_engine must be an integer or None" assert isinstance(ip, str) or ip is None, \ "ip to register_engine must be a string or None" assert isinstance(port, int) or port is None, \ "port to register_engine must be an integer or None" assert isinstance(pid, int) or pid is None, \ "pid to register_engine must be an integer or None" desiredID = id if desiredID in self.engines.keys(): desiredID = None if desiredID in self.availableIDs: getID = desiredID self.availableIDs.remove(desiredID) else: getID = self.availableIDs.pop() remoteEngine.id = getID remoteEngine.service = self self.engines[getID] = remoteEngine # Log the Engine Information for monitoring purposes self._logEngineInfoToFile(getID, ip, port, pid) msg = "registered engine with id: %i" % getID log.msg(msg) for i in range(len(self._onRegister)): (f, args, kwargs, ifid) = self._onRegister[i] try: if ifid: f(getID, *args, **kwargs) else: f(*args, **kwargs) except: self._onRegister.pop(i) # Call functions when the nth engine is registered and them remove them for i, (n, f, args, kwargs) in enumerate(self._onNRegistered): if len(self.engines.keys()) == n: try: try: f(*args, **kwargs) except: log.msg( "Function %r failed when the %ith engine registered" % (f, n)) finally: self._onNRegistered.pop(i) return {'id': getID}
def register_engine(self, remoteEngine, id=None, ip=None, port=None, pid=None): """Register new engine connection""" # What happens if these assertions fail? assert IEngineCore.providedBy(remoteEngine), \ "engine passed to register_engine doesn't provide IEngineCore" assert IEngineSerialized.providedBy(remoteEngine), \ "engine passed to register_engine doesn't provide IEngineSerialized" assert IEngineQueued.providedBy(remoteEngine), \ "engine passed to register_engine doesn't provide IEngineQueued" assert isinstance(id, int) or id is None, \ "id to register_engine must be an integer or None" assert isinstance(ip, str) or ip is None, \ "ip to register_engine must be a string or None" assert isinstance(port, int) or port is None, \ "port to register_engine must be an integer or None" assert isinstance(pid, int) or pid is None, \ "pid to register_engine must be an integer or None" desiredID = id if desiredID in self.engines.keys(): desiredID = None if desiredID in self.availableIDs: getID = desiredID self.availableIDs.remove(desiredID) else: getID = self.availableIDs.pop() remoteEngine.id = getID remoteEngine.service = self self.engines[getID] = remoteEngine # Log the Engine Information for monitoring purposes self._logEngineInfoToFile(getID, ip, port, pid) msg = "registered engine with id: %i" %getID log.msg(msg) for i in range(len(self._onRegister)): (f,args,kwargs,ifid) = self._onRegister[i] try: if ifid: f(getID, *args, **kwargs) else: f(*args, **kwargs) except: self._onRegister.pop(i) # Call functions when the nth engine is registered and them remove them for i, (n, f, args, kwargs) in enumerate(self._onNRegistered): if len(self.engines.keys()) == n: try: try: f(*args, **kwargs) except: log.msg("Function %r failed when the %ith engine registered" % (f, n)) finally: self._onNRegistered.pop(i) return {'id':getID}