def stop(self): if self.died_event.ready(): msg = 'service {} already stopped' logger.debug(msg.format(self.service_cls.name)) return if self.being_kill: msg = 'service {} already being kill, wait' logger.debug(msg.format(self.service_cls.name)) ignore_exception(self.died_event.wait)() return msg = 'stopping service {} entrypoints {}' logger.debug(msg.format(self.service_cls.name, self.entrypoints)) self.entrypoints.all.stop() msg = 'wait service {} entrypoints {} stop' logger.debug(msg.format(self.service_cls.name, self.entrypoints)) self.worker_pool.waitall() msg = 'service {} entrypoints {} stopped' logger.debug(msg.format(self.service_cls.name, self.entrypoints)) msg = 'stopping service {} dependencies {}' logger.debug(msg.format(self.service_cls.name, self.dependencies)) self.dependencies.all.stop() msg = 'service {} dependencies {} stopped' logger.debug(msg.format(self.service_cls.name, self.dependencies)) self._kill_manage_threads() self.started = False self.died_event.ready() or self.died_event.send(None)
def kill(self): if self.died_event.ready(): msg = 'service {} already stopped' logger.debug(msg.format(self.service_cls.name)) return if self.being_kill: msg = 'service {} already being kill, wait' logger.debug(msg.format(self.service_cls.name)) ignore_exception(self.died_event.wait)() return self.being_kill = True msg = 'killing service {} entrypoints {}' logger.debug(msg.format(self.service_cls.name, self.entrypoints)) ignore_exception(self.entrypoints.all.kill)() ignore_exception(self._kill_worker_threads)() msg = 'service {} entrypoints {} killed' logger.debug(msg.format(self.service_cls.name, self.entrypoints)) msg = 'killing service {} dependencies {}' logger.debug(msg.format(self.service_cls.name, self.dependencies)) ignore_exception(self.dependencies.all.kill()) msg = 'service {} dependencies {} killed' logger.debug(msg.format(self.service_cls.name, self.dependencies)) ignore_exception(self._kill_manage_threads)() self.started = False self.died_event.ready() or self.died_event.send(None)
def update_etcd_services(self, e): if not self.services: services = {} for s in self.instance.range(self.watching, prefix=True).kvs: name = self.get_serv_name(s.key) data = ignore_exception(json.loads)(s.value) data and services.setdefault(name, []) data and ( data not in services[name]) and services[name].append(data) self.services = services elif e.type == Etcd3EventType.DELETE: name = self.get_serv_name(e.key) data = ignore_exception(json.loads)(e.value) data and (data in self.services[name] ) and self.services[name].remove(data) elif e.type == Etcd3EventType.PUT: name = self.get_serv_name(e.key) data = ignore_exception(json.loads)(e.value) data and self.services.setdefault(name, []) data and (data not in self.services[name] ) and self.services[name].append(data) self.allotter and self.allotter.set(self)
def acquire(self): def check_available(): self._instance_excinfo = None self._instance.extend.standard.who_am_i() def start_reconnect(exc_info): connection = self.connect(self.servers, self.usrname, self.usrpass, self.base_dc, **self.options) self._instance = connection def reset_reconnect(exc_info): self._instance = None self._instance_excinfo = exc_info expect_exception = (AttributeError, LDAPException, socket.error) start_reconnect = ignore_exception(start_reconnect, reset_reconnect) auto_sleep_retry(check_available, start_reconnect, expect_exception, max_retries=self.retries, time_sleep=0.001) self._instance_excinfo and self._raise(self._instance_excinfo) return self._instance
def get_host_byname(): name = socket.gethostname() return ignore_exception(socket.gethostbyname)(name)
def del_wsock(self, sockid): channel = self.wsocket_2_channel.pop(sockid, set()) for sockid_channel in channel: self.unsubscribe(sockid_channel, sockid) ws_sock = self.sockets.pop(sockid, None) ws_sock and ignore_exception(ws_sock.close)()
def stop(self): self.watchobj and self.watchobj.stop() self.leaseobj and self.leaseobj.cancel_keepalive() self.leaseobj and ignore_exception(self.leaseobj.revoke)() self.instance and ignore_exception(self.instance.close)()
def close(self): self._running = False ignore_exception(self.client.close)()
def stop(self): self.instance and ignore_exception( self.instance.agent.service.deregister)(self.serverid)
def _link_manage_results(self, gt): def exc_func(exc_info): exc_type, exc_value, exc_trace = exc_info self.consumers_ready.send_exception(exc_value) ignore_exception(gt.wait, exc_func=exc_func)()