Ejemplo n.º 1
0
    def get_actor_tree(self, workers_info_by_node, infeasible_tasks,
                       ready_tasks):
        now = time.time()
        # construct flattened actor tree
        flattened_tree = {"root": {"children": {}}}
        child_to_parent = {}
        with self._node_stats_lock:
            for addr, actor_id in self._addr_to_actor_id.items():
                flattened_tree[actor_id] = copy.deepcopy(self._default_info)
                flattened_tree[actor_id].update(
                    self._addr_to_extra_info_dict[addr])
                parent_id = self._addr_to_actor_id.get(
                    self._addr_to_owner_addr[addr], "root")
                child_to_parent[actor_id] = parent_id

            for node_id, workers_info in workers_info_by_node.items():
                for worker_info in workers_info:
                    if "coreWorkerStats" in worker_info:
                        core_worker_stats = worker_info["coreWorkerStats"]
                        addr = (core_worker_stats["ipAddress"],
                                str(core_worker_stats["port"]))
                        if addr in self._addr_to_actor_id:
                            actor_info = flattened_tree[
                                self._addr_to_actor_id[addr]]
                            format_reply_id(core_worker_stats)
                            actor_info.update(core_worker_stats)
                            actor_info["averageTaskExecutionSpeed"] = round(
                                actor_info["numExecutedTasks"] /
                                (now - actor_info["timestamp"] / 1000), 2)
                            actor_info["nodeId"] = node_id
                            actor_info["pid"] = worker_info["pid"]

            def _update_flatten_tree(task, task_spec_type, invalid_state_type):
                actor_id = ray.utils.binary_to_hex(
                    b64decode(task[task_spec_type]["actorId"]))
                caller_addr = (task["callerAddress"]["ipAddress"],
                               str(task["callerAddress"]["port"]))
                caller_id = self._addr_to_actor_id.get(caller_addr, "root")
                child_to_parent[actor_id] = caller_id
                task["state"] = -1
                task["invalidStateType"] = invalid_state_type
                task["actorTitle"] = task["functionDescriptor"][
                    "pythonFunctionDescriptor"]["className"]
                format_reply_id(task)
                flattened_tree[actor_id] = task

            for infeasible_task in infeasible_tasks:
                _update_flatten_tree(infeasible_task, "actorCreationTaskSpec",
                                     "infeasibleActor")

            for ready_task in ready_tasks:
                _update_flatten_tree(ready_task, "actorCreationTaskSpec",
                                     "pendingActor")

        # construct actor tree
        actor_tree = flattened_tree
        for actor_id, parent_id in child_to_parent.items():
            actor_tree[parent_id]["children"][actor_id] = actor_tree[actor_id]
        return actor_tree["root"]["children"]
Ejemplo n.º 2
0
 def _update_from_actor_tasks(task, task_spec_type,
                              invalid_state_type):
     actor_id = ray.utils.binary_to_hex(
         b64decode(task[task_spec_type]["actorId"]))
     task["state"] = -1
     task["invalidStateType"] = invalid_state_type
     task["actorTitle"] = task["functionDescriptor"][
         "pythonFunctionDescriptor"]["className"]
     format_reply_id(task)
     actors[actor_id] = task
Ejemplo n.º 3
0
 def _update_flatten_tree(task, task_spec_type, invalid_state_type):
     actor_id = ray.utils.binary_to_hex(
         b64decode(task[task_spec_type]["actorId"]))
     caller_addr = (task["callerAddress"]["ipAddress"],
                    str(task["callerAddress"]["port"]))
     caller_id = self._addr_to_actor_id.get(caller_addr, "root")
     child_to_parent[actor_id] = caller_id
     task["state"] = -1
     task["invalidStateType"] = invalid_state_type
     task["actorTitle"] = task["functionDescriptor"][
         "pythonFunctionDescriptor"]["className"]
     format_reply_id(task)
     flattened_tree[actor_id] = task
Ejemplo n.º 4
0
 def _update_from_actor_tasks(task, task_spec_type,
                              invalid_state_type):
     actor_id = ray.utils.binary_to_hex(
         b64decode(task[task_spec_type]["actorId"]))
     if invalid_state_type == "pendingActor":
         task["state"] = -1
     elif invalid_state_type == "infeasibleActor":
         task["state"] = -2
     else:
         raise ValueError(f"Invalid argument"
                          "invalid_state_type={invalid_state_type}")
     task["actorTitle"] = task["functionDescriptor"][
         "pythonFunctionDescriptor"]["className"]
     format_reply_id(task)
     actors[actor_id] = task
Ejemplo n.º 5
0
    def get_actors(self, workers_info_by_node, infeasible_tasks, ready_tasks):
        now = time.time()
        actors: Dict[str, Dict[str, any]] = {}
        # construct flattened actor tree
        with self._node_stats_lock:
            for addr, actor_id in self._addr_to_actor_id.items():
                actors[actor_id] = copy.deepcopy(self._default_info)
                actors[actor_id].update(self._addr_to_extra_info_dict[addr])

            for node_id, workers_info in workers_info_by_node.items():
                for worker_info in workers_info:
                    if "coreWorkerStats" in worker_info:
                        core_worker_stats = worker_info["coreWorkerStats"]
                        addr = (core_worker_stats["ipAddress"],
                                str(core_worker_stats["port"]))
                        if addr in self._addr_to_actor_id:
                            actor_info = actors[self._addr_to_actor_id[addr]]
                            format_reply_id(core_worker_stats)
                            actor_info.update(core_worker_stats)
                            actor_info["averageTaskExecutionSpeed"] = round(
                                actor_info["numExecutedTasks"] /
                                (now - actor_info["timestamp"] / 1000), 2)
                            actor_info["nodeId"] = node_id
                            actor_info["pid"] = worker_info["pid"]

            def _update_from_actor_tasks(task, task_spec_type,
                                         invalid_state_type):
                actor_id = ray.utils.binary_to_hex(
                    b64decode(task[task_spec_type]["actorId"]))
                task["state"] = -1
                task["invalidStateType"] = invalid_state_type
                task["actorTitle"] = task["functionDescriptor"][
                    "pythonFunctionDescriptor"]["className"]
                format_reply_id(task)
                actors[actor_id] = task

            for infeasible_task in infeasible_tasks:
                _update_from_actor_tasks(infeasible_task,
                                         "actorCreationTaskSpec",
                                         "infeasibleActor")

            for ready_task in ready_tasks:
                _update_from_actor_tasks(ready_task, "actorCreationTaskSpec",
                                         "pendingActor")

        return actors
Ejemplo n.º 6
0
    def get_actors(self, workers_info_by_node, infeasible_tasks, ready_tasks):
        now = time.time()
        actors: Dict[str, Dict[str, any]] = {}
        # construct flattened actor tree
        with self._node_stats_lock:
            for addr, actor_id in self._addr_to_actor_id.items():
                actors[actor_id] = copy.deepcopy(self._default_info)
                actors[actor_id].update(self._addr_to_extra_info_dict[addr])

            for node_id, workers_info in workers_info_by_node.items():
                for core_worker_stats in workers_info:
                    addr = (core_worker_stats["ipAddress"],
                            str(core_worker_stats["port"]))
                    if addr in self._addr_to_actor_id:
                        actor_info = actors[self._addr_to_actor_id[addr]]
                        format_reply_id(core_worker_stats)
                        actor_info.update(core_worker_stats)
                        actor_info["averageTaskExecutionSpeed"] = round(
                            actor_info["numExecutedTasks"] /
                            (now - actor_info["timestamp"] / 1000), 2)
                        actor_info["nodeId"] = node_id
                        actor_info["pid"] = core_worker_stats["pid"]

            def _update_from_actor_tasks(task, task_spec_type,
                                         invalid_state_type):
                actor_id = ray.utils.binary_to_hex(
                    b64decode(task[task_spec_type]["actorId"]))
                if invalid_state_type == "pendingActor":
                    task["state"] = -1
                elif invalid_state_type == "infeasibleActor":
                    task["state"] = -2
                else:
                    raise ValueError(
                        "Invalid argument"
                        f"invalid_state_type={invalid_state_type}")
                task["actorTitle"] = task["functionDescriptor"][
                    "pythonFunctionDescriptor"]["className"]
                format_reply_id(task)
                actors[actor_id] = task

            for infeasible_task in infeasible_tasks:
                _update_from_actor_tasks(infeasible_task,
                                         "actorCreationTaskSpec",
                                         "infeasibleActor")

            for ready_task in ready_tasks:
                _update_from_actor_tasks(ready_task, "actorCreationTaskSpec",
                                         "pendingActor")
        actor_groups = _group_actors_by_python_class(actors)
        stats_by_group = {
            name: _get_actor_group_stats(group)
            for name, group in actor_groups.items()
        }

        response_data = {}
        for name, group in actor_groups.items():
            response_data[name] = {
                "entries": group,
                "summary": stats_by_group[name]
            }
        return response_data