o
    Rh                      @   s~   d dl Z d dlZd dlZd dlZd dlZddlmZ d dlZejdkr*d dl	m
Z
 nd dlZejejd 	 G dd dZdS )	    N   )LeaderElectionRecord   r   )
HTTPStatus)levelc                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )LeaderElectionc                 C   s(   |d u r	t d d | _|| _d| _d S )Nzargument config not passedr   )sysexitobserved_recordelection_configobserved_time_milliseconds)selfr    r   j/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/kubernetes/leaderelection/leaderelection.py__init__)   s
   

zLeaderElection.__init__c                 C   sR   |   r'td| jjj dt_tj	| jj
d  |   | j  d S d S )Nz{} successfully acquired leaseT)target)acquirelogginginfoformatr   lockidentity	threadingdaemonThreadonstarted_leadingstart
renew_looponstopped_leading)r   r   r   r   run7   s   zLeaderElection.runc                 C   s<   t d| jjj | jj}	 |  }|rdS t	| q)Nz{} is a followerT)
r   r   r   r   r   r   retry_periodtry_acquire_or_renewtimesleep)r   r!   	succeededr   r   r   r   E   s   
zLeaderElection.acquirec                 C   s   t d | jj}| jjd }	 tt d | }d}tt d |k r<|  }|r-nt| tt d |k s&|rDt| qd S )NzGLeader has entered renew loop and will try to update lease continuously  TF)	r   r   r   r!   renew_deadlineintr#   r"   r$   )r   r!   r'   timeoutr%   r   r   r   r   R   s    


zLeaderElection.renew_loopc                 C   sH  t   }tj|}| jj| jjj| jjj\}}t| jjj	t
| jjt
|t
|}|stjdkrNt|jd tjkrMtd| jjj|j dS nt|jd tjkrhtd| jjj|j dS td|j | jjj| jjj| jjj|d}|du rtd|j dS || _tt   d | _d	S |d u r| |S |jd u s|jd u s|jd u s|jd u r| |S | jr| jj|jkrtd
|j | jd u s|j | jj kr|| _tt   d | _| jjj	| jjkr| j| jjd  t|d krtd|j dS | jjj	| jjkr| jj|_| |S )Nr   codez'Error retrieving resource lock {} as {}Fz{} is trying to create a lock)name	namespaceelection_recordz{} Failed to create lockr&   TzLeader has switched to {}zByet to finish lease_duration, lease held by {} and has not expired)!r#   datetimefromtimestampr   r   getr+   r,   r   r   strlease_durationr	   version_infojsonloadsbodyr   	NOT_FOUNDr   r   r   reasonhttplibholder_identitycreater   r(   r   update_lockacquire_time
renew_time__dict__)r   now_timestampnowlock_statusold_election_recordleader_election_recordcreate_statusr   r   r   r"   k   sb   



 

z#LeaderElection.try_acquire_or_renewc                 C   sj   | j j| j jj| j jj|}|du rtd|j dS || _	t
t d | _td|j dS )NFz{} failed to acquire leaser&   z)leader {} has successfully acquired leaseT)r   r   updater+   r,   r   r   r   r:   r   r(   r#   r   )r   rD   update_statusr   r   r   r<      s   zLeaderElection.update_lockN)	__name__
__module____qualname__r   r    r   r   r"   r<   r   r   r   r   r   (   s    Gr   )r.   r	   r#   r4   r   leaderelectionrecordr   r   r3   httpr   r9   basicConfigINFOr   r   r   r   r   <module>   s   
