def get_root_scheduler(address, port): """ This function will retrive a root scheduler from the root-scheduler service, if it is online. Otherwise it will return None if it isn't available, or if an error happens. """ try: _, root_client = create_root_client(port, address) resp = root_client.get_schedulers() if resp.result != GetSchedulersResultCode.OK: return root_role = resp.schedulers[0].role root_sch_host = Host(ROOT_SCHEDULER_ID, address, port) root_sch = Scheduler(root_role.id, ROOT_SCHEDULER_TYPE, root_sch_host) scheduler_children = root_role.scheduler_children or [] for child in scheduler_children: owner_host = Host(child.owner_host, child.address, child.port) leaf = Scheduler(child.id, LEAF_SCHEDULER_TYPE, owner_host, root_sch) owner_host.parent = leaf root_sch.add_child(leaf) return root_sch except Exception, e: log.exception(e)
def get_root_scheduler(address, port): """ This function will retrive a root scheduler from the root-scheduler service, if it is online. Otherwise it will return None if it isn't available, or if an error happens. """ try: _, root_client = create_root_client(port, address) resp = root_client.get_schedulers() if resp.result != GetSchedulersResultCode.OK: return root_role = resp.schedulers[0].role root_sch_host = Host(ROOT_SCHEDULER_ID, address, port) root_sch = Scheduler(root_role.id, ROOT_SCHEDULER_TYPE, root_sch_host) scheduler_children = root_role.scheduler_children or [] for child in scheduler_children: owner_host = Host(child.owner_host, child.address, child.port) leaf = Scheduler(child.id, LEAF_SCHEDULER_TYPE, owner_host, root_sch) owner_host.parent = leaf root_sch.add_child(leaf) return root_sch except Exception, e: log.exception(e)
def setUp(self): self.set_up_kazoo_base() self.zk_client = self._get_nonchroot_client() self.zk_client.start() self.runtime = RuntimeUtils(self.id()) # Create zk paths self.zk_client.create(MISSING_PREFIX) self.zk_client.create(HOSTS_PREFIX) self.zk_client.create(ROLES_PREFIX) self.root_conf = {} self.root_conf['healthcheck'] = {} self.root_conf['zookeeper'] = {} self.root_conf['zookeeper']['quorum'] = ("localhost:%i" % (DEFAULT_ZK_PORT, )) self.root_conf['healthcheck']['timeout_ms'] = ROOT_SCHEDULER_TIME_OUT self.root_conf['healthcheck']['period_ms'] = ROOT_SCHEDULER_PERIOD # start root scheduler self.root_host = "localhost" self.root_port = 15000 self.root_conf['bind'] = self.root_host self.root_conf['port'] = self.root_port self.runtime.start_root_scheduler(self.root_conf) (self.root_transport, self.root_sch_client) = create_root_client(self.root_port, self.root_host) # start chairman self.chairman_host = 'localhost' self.chairman_port = 13000 self.leaf_fanout = 2 self.runtime.start_chairman(self.chairman_host, self.chairman_port, self.leaf_fanout) (self.chairman_transport, self.chairman_client) = \ create_chairman_client(self.chairman_host, self.chairman_port) # Wait for chairman and root scheduler to finish their elections _wait_on_code(self.root_sch_client.get_schedulers, GetSchedulersResultCode.OK) _wait_on_code(self.chairman_client.get_schedulers, GetSchedulersResultCode.OK, GetSchedulersRequest)
def test_update_status(self): agent_host = 'localhost' agent_port1 = 20000 config = self.runtime.get_agent_config(agent_host, agent_port1, self.chairman_host, self.chairman_port) res = self.runtime.start_agent(config) _wait_for_configuration(self.root_sch_client, 1) root = get_hierarchy_from_zk(self.zk_client) # Update the hierarchy status root.update_status() # verify that the root scheduler and leaf are online assert_that(root.owner.status, is_(STATUS_ONLINE)) assert_that(len(root.children), is_(1)) assert_that(root.children.values()[0].owner.status, is_(STATUS_ONLINE)) # Kill both root scheduler and leaf host stop_service(self.runtime.root_procs[0]) self.runtime.stop_agent(res[0]) # Update the hierarchy status root.update_status() assert_that(root.owner.status, is_(STATUS_OFFLINE)) assert_that(root.children.values()[0].owner.status, is_(STATUS_OFFLINE)) # Start the root scheduler and leaf scheduler self.runtime.start_root_scheduler(self.root_conf) config = self.runtime.get_agent_config(agent_host, agent_port1, self.chairman_host, self.chairman_port) res = self.runtime.start_agent(config) (self.root_transport, self.root_sch_client) = create_root_client(self.root_port, self.root_host) # Wait for the root scheduler's leader election _wait_on_code(self.root_sch_client.get_schedulers, GetSchedulersResultCode.OK) # Check the status again root.update_status() # verify that the root scheduler and leaf are online assert_that(root.owner.status, is_(STATUS_ONLINE)) assert_that(root.children.values()[0].owner.status, is_(STATUS_ONLINE))
def setUp(self): self.set_up_kazoo_base() self.zk_client = self._get_nonchroot_client() self.zk_client.start() self.runtime = RuntimeUtils(self.id()) # Create zk paths self.zk_client.create(MISSING_PREFIX) self.zk_client.create(HOSTS_PREFIX) self.zk_client.create(ROLES_PREFIX) self.root_conf = {} self.root_conf["healthcheck"] = {} self.root_conf["zookeeper"] = {} self.root_conf["zookeeper"]["quorum"] = "localhost:%i" % (DEFAULT_ZK_PORT,) self.root_conf["healthcheck"]["timeout_ms"] = ROOT_SCHEDULER_TIME_OUT self.root_conf["healthcheck"]["period_ms"] = ROOT_SCHEDULER_PERIOD # start root scheduler self.root_host = "localhost" self.root_port = 15000 self.root_conf["bind"] = self.root_host self.root_conf["port"] = self.root_port self.runtime.start_root_scheduler(self.root_conf) (self.root_transport, self.root_sch_client) = create_root_client(self.root_port, self.root_host) # start chairman self.chairman_host = "localhost" self.chairman_port = 13000 self.leaf_fanout = 2 self.runtime.start_chairman(self.chairman_host, self.chairman_port, self.leaf_fanout) (self.chairman_transport, self.chairman_client) = create_chairman_client(self.chairman_host, self.chairman_port) # Wait for chairman and root scheduler to finish their elections _wait_on_code(self.root_sch_client.get_schedulers, GetSchedulersResultCode.OK) _wait_on_code(self.chairman_client.get_schedulers, GetSchedulersResultCode.OK, GetSchedulersRequest)
def test_update_status(self): agent_host = "localhost" agent_port1 = 20000 config = self.runtime.get_agent_config(agent_host, agent_port1, self.chairman_host, self.chairman_port) res = self.runtime.start_agent(config) _wait_for_configuration(self.root_sch_client, 1) root = get_hierarchy_from_zk(self.zk_client) # Update the hierarchy status root.update_status() # verify that the root scheduler and leaf are online assert_that(root.owner.status, is_(STATUS_ONLINE)) assert_that(len(root.children), is_(1)) assert_that(root.children.values()[0].owner.status, is_(STATUS_ONLINE)) # Kill both root scheduler and leaf host stop_service(self.runtime.root_procs[0]) self.runtime.stop_agent(res[0]) # Update the hierarchy status root.update_status() assert_that(root.owner.status, is_(STATUS_OFFLINE)) assert_that(root.children.values()[0].owner.status, is_(STATUS_OFFLINE)) # Start the root scheduler and leaf scheduler self.runtime.start_root_scheduler(self.root_conf) config = self.runtime.get_agent_config(agent_host, agent_port1, self.chairman_host, self.chairman_port) res = self.runtime.start_agent(config) (self.root_transport, self.root_sch_client) = create_root_client(self.root_port, self.root_host) # Wait for the root scheduler's leader election _wait_on_code(self.root_sch_client.get_schedulers, GetSchedulersResultCode.OK) # Check the status again root.update_status() # verify that the root scheduler and leaf are online assert_that(root.owner.status, is_(STATUS_ONLINE)) assert_that(root.children.values()[0].owner.status, is_(STATUS_ONLINE))