
    &`i
                     @    d dl mZmZmZ d dlmZ  G d d          ZdS )    )ListSetTuple)	constantsc                       e Zd ZdZd ZdedefdZdededefdZdefd	Zd
e	e         de
eeef                  fdZdS )NodeTrackeraJ  Map nodes to their corresponding logs.

    We need to be a little careful here. At an given point in time, node_id <->
    ip can be interchangeably used, but the node_id -> ip relation is not
    bijective _across time_ since IP addresses can be reused. Therefore, we
    should treat node_id as the only unique identifier.
    c                 "    i | _         g | _        d S N)node_mapping	lru_order)selfs    x/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/autoscaler/_private/node_tracker.py__init__zNodeTracker.__init__   s         node_idvaluec                 D   || j         v rd S t          | j                  t          | j                   k    sJ t          | j                  t          j        k    r"| j                            d          }| j         |= || j         |<   | j                            |           d S )Nr   )r   lenr   r   AUTOSCALER_MAX_NODES_TRACKEDpopappend)r   r   r   s      r   _add_node_mappingzNodeTracker._add_node_mapping   s    d'''F4>""c$*;&<&<<<<<t~)"HHHn((++G!'*%*'"g&&&&&r   ip	node_typec                 L    || j         vr|                     |||f           dS dS )z
        Begin to track a new node.

        Args:
            node_id: The node id.
            ip: The node ip address.
            node_type: The node type.
        N)r   r   )r   r   r   r   s       r   trackzNodeTracker.track#   s:     $+++""7RO<<<<< ,+r   c                 `    || j         v r$| j                            |           | j         |= dS dS )zGracefully stop tracking a node. If a node is intentionally removed from
        the cluster, we should stop tracking it so we don't mistakenly mark it
        as failed.

        Args:
            node_id: The node id which failed.
        N)r   r   remove)r   r   s     r   untrackzNodeTracker.untrack/   sA     d'''N!!'***!'*** ('r   non_failed_idsreturnc                     | j                                         |z
  g }t          fd| j                  D ]"}|                    | j         |                    #|S )a  Get the information about all failed nodes. A failed node is any node which
        we began to track that is not pending or alive (i.e. not failed).

        Args:
            non_failed_ids: Nodes are failed unless they are in this set.

        Returns:
            List[Tuple[str, str]]: A list of tuples. Each tuple is the ip
            address and type of a failed node.
        c                     | v S r
    )r   failed_nodess    r   <lambda>z6NodeTracker.get_all_failed_node_info.<locals>.<lambda>K   s    g.E r   )r   keysfilterr   r   )r   r    failed_infor   r%   s       @r   get_all_failed_node_infoz$NodeTracker.get_all_failed_node_info;   sm     (--//.@EEEEt~VV 	; 	;Gt09::::r   N)__name__
__module____qualname____doc__r   strr   r   r   r   r   r   r*   r$   r   r   r   r      s           ' 'S ' ' ' '
=S 
=c 
=c 
= 
= 
= 
=
+s 
+ 
+ 
+ 
+!#h	eCHo	     r   r   N)typingr   r   r   ray.autoscaler._privater   r   r$   r   r   <module>r2      sq    # # # # # # # # # # - - - - - -G G G G G G G G G Gr   