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)
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)