Exemple #1
0
    def _take_action(self, parsed_args):
        import zookeeper
        from oio.zk.client import get_meta0_paths, get_connected_handles
        self.logger.debug("Checking meta0 services")

        # TODO: tcp touch to the meta0 services

        # check they are registered in the ZK
        for zh in get_connected_handles(self.zookeeper()):
            for p in get_meta0_paths(zh, self.app.options.ns):
                try:
                    registered = set()
                    for n in zookeeper.get_children(zh.get(), p):
                        v, m = zookeeper.get(zh.get(), p + '/' + n)
                        registered.add(v)
                    known = set()
                    for t, i, p, s in self.filter_services(
                            self.catalog, 'meta0'):
                        known.add('%s:%d' % (i, p))
                    self.logger.info("meta0 known=%d zk_registered=%d",
                                     len(known), len(registered))
                    assert registered == known
                except Exception as ex:
                    self.logger.exception(
                        "Failed to list the meta0 services "
                        "from zookeeper: %s", ex)
                finally:
                    zh.close()

        yield ('OK', None)
Exemple #2
0
    def _take_action(self, parsed_args):
        from oio.zk.client import get_meta0_paths, get_connected_handles
        self.logger.debug("Checking meta0 services")

        # TODO: tcp touch to the meta0 services

        # check they are registered in the ZK
        for zh in get_connected_handles(self.zookeeper(), logger=self.logger):
            for path in get_meta0_paths(zh, self.app.options.ns):
                try:
                    zk_registered = set()
                    for node in zh.get().get_children(path):
                        addr, _ = zh.get().get(path + '/' + node)
                        if addr is not None:
                            addr = addr.decode('utf-8')
                        zk_registered.add(addr)
                    known = set()

                    for _, host, port, score in self.filter_services(
                            self.catalog, 'meta0'):
                        if score == 0:
                            self.success = False
                            yield ('Warn', '%s:%d is down' % (host, port))
                        known.add('%s:%d' % (host, port))
                    self.logger.info("meta0 known=%d zk_registered=%d",
                                     len(known), len(zk_registered))

                    for item in zk_registered - known:
                        self.success = False
                        yield ('Error', '%s unknown but present in zk' % item)

                    for item in known - zk_registered:
                        self.success = False
                        yield ('Error',
                               '%s known but not present in zk' % item)
                except Exception as ex:
                    self.success = False
                    yield ('Error', "Failed to list the meta0 services "
                           "from zookeeper: %s" % ex)
                finally:
                    zh.close()

        if self.success:
            yield ('OK', None)