Example #1
0
    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)
Example #2
0
    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)
Example #3
0
 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)
Example #4
0
    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
Example #5
0
 def get_host_byname():
     name = socket.gethostname()
     return ignore_exception(socket.gethostbyname)(name)
Example #6
0
 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)()
Example #7
0
 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)()
Example #8
0
 def close(self):
     self._running = False
     ignore_exception(self.client.close)()
Example #9
0
 def stop(self):
     self.instance and ignore_exception(
         self.instance.agent.service.deregister)(self.serverid)
Example #10
0
    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)()