o
    1 i~!                     @   s@  d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1 e 2e3Z4G dd dZ5dS )    N)Queue)ListOptional)urlsplit)	GcsClient)_get_node_provider)AutoscalerEventLogger)KubeRayProvider)ReadOnlyProvider)AutoscalingConfigIConfigReaderProvider)InstanceManagerInstanceUpdatedSubscriber)InstanceStorage)ICloudInstanceProviderNodeProviderAdapter)RayInstaller)
Reconciler)InMemoryStorage)CloudInstanceUpdater)
RayStopper)ThreadedRayInstaller)AutoscalerMetricsReporter)ResourceDemandScheduler)get_cluster_resource_state)AutoscalingStatec                   @   sz   e Zd Z		ddedededee dee ddfdd	Z	d
e
defddZdededed
e
fddZdee fddZdS )
AutoscalerNsession_nameconfig_reader
gcs_clientevent_loggermetrics_reporterreturnc                 C   s   || _ | }td|   || _d| _d| _t | _	t | _
|| _|| _| || | j||| j| jd t| j| _dS )a>  
        Args:
            session_name: The current Ray session name.
            config_reader: The config reader.
            gcs_client: The GCS client.
            event_logger: The event logger for emitting cluster events.
            metrics_reporter: The metrics reporter for emitting cluster metrics.
        zUsing Autoscaling Config: 
N)r   configcloud_providerr    )_config_readerget_cached_autoscaling_configloggerinfodump_gcs_client_cloud_instance_provider_instance_managerr   _ray_stop_errors_queue_ray_install_errors_queueZ_event_logger_metrics_reporter_init_cloud_instance_provider_init_instance_managerr   
_scheduler)selfr   r   r    r!   r"   r$    r5   h/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/ray/autoscaler/v2/autoscaler.py__init__0   s$   zAutoscaler.__init__r$   c                 C   s   |  }|d dkr| |d< t|d|| _dS |jtjkr/| jj	|d< t
|d| _dS t||d}t||d| _dS )	z
        Initialize the cloud provider, and its dependencies (the v1 node provider)

        Args:
            config: The autoscaling config.
            config_reader: The config reader.

        typeZkuberayZhead_node_typeZcluster_nameZgcs_address)provider_config)v1_providerr   N)Zget_provider_configZget_head_node_typer	   Z
get_configr,   providerr   Z	READ_ONLYr+   addressr
   r   r   )r4   r$   r   r9   Znode_provider_v1r5   r5   r6   r1   W   s(   
z(Autoscaler._init_cloud_instance_providerr%   c              	   C   s   t |t d}g }|t|d |t|| jd | sKt|trKt	d| j
j j}|dus5J d|t||t|j|d| j| pGdd	 t||d
| _dS )zH
        Initialize the instance manager, and its dependencies.
        )Z
cluster_idZstorage)r%   )r    error_queuez//NzInvalid GCS address format)r;   r$   2   )head_node_ipinstance_storageZray_installerr=   Zmax_concurrent_installs)r@   Z"instance_status_update_subscribers)r   r   appendr   r   r.   Zdisable_node_updaters
isinstancer   r   r+   r<   hostnamer   r   r:   r/   Zget_max_num_worker_nodesr   r-   )r4   r   r%   r    r$   r@   Zsubscribersr?   r5   r5   r6   r2   y   s<   

z!Autoscaler._init_instance_managerc                 C   s   zQg }| j  s|| j   | j  rg }| j s)|| j  | j rt| j}| j  | j	 }t
j| j| j| j|| j | j |||| jd
W S  tyi } zt| W Y d}~dS d}~ww )a  Update the autoscaling state of the cluster by reconciling the current
        state of the cluster resources, the cloud providers as well as instance
        update subscribers with the desired state.

        Returns:
            AutoscalingState: The new autoscaling state of the cluster or None if
            the state is not updated.

        Raises:
            None: No exception.
        )
Zinstance_managerZ	schedulerr%   ray_cluster_resource_stateZnon_terminated_cloud_instancesZcloud_provider_errorsray_install_errorsray_stop_errorsautoscaling_configr"   N)r.   emptyrA   getr/   r   r+   r&   Z!refresh_cached_autoscaling_configr'   r   Z	reconciler-   r3   r,   Zget_non_terminatedZpoll_errorsr0   	Exceptionr(   	exception)r4   rF   rE   rD   rG   er5   r5   r6   update_autoscaling_state   s:   







z#Autoscaler.update_autoscaling_state)NN)__name__
__module____qualname__strr   r   r   r   r   r7   r   r1   r   r2   r   rM   r5   r5   r5   r6   r   /   sB    
'
"
0r   )6loggingqueuer   typingr   r   urllib.parser   Zray._rayletr   Z!ray.autoscaler._private.providersr   Zray.autoscaler.v2.event_loggerr   ZIray.autoscaler.v2.instance_manager.cloud_providers.kuberay.cloud_providerr	   ZKray.autoscaler.v2.instance_manager.cloud_providers.read_only.cloud_providerr
   Z)ray.autoscaler.v2.instance_manager.configr   r   r   Z3ray.autoscaler.v2.instance_manager.instance_managerr   r   Z3ray.autoscaler.v2.instance_manager.instance_storager   Z0ray.autoscaler.v2.instance_manager.node_providerr   r   Z0ray.autoscaler.v2.instance_manager.ray_installerr   Z-ray.autoscaler.v2.instance_manager.reconcilerr   Z*ray.autoscaler.v2.instance_manager.storager   ZEray.autoscaler.v2.instance_manager.subscribers.cloud_instance_updaterr   Z:ray.autoscaler.v2.instance_manager.subscribers.ray_stopperr   ZEray.autoscaler.v2.instance_manager.subscribers.threaded_ray_installerr   Z"ray.autoscaler.v2.metrics_reporterr   Zray.autoscaler.v2.schedulerr   Zray.autoscaler.v2.sdkr   Z!ray.core.generated.autoscaler_pb2r   	getLoggerrN   r(   r   r5   r5   r5   r6   <module>   s2    
