Ë
    OÇ»i3  ã                   ó´   — d dl Z d dlmZmZ d dlmZmZ d dlmZ d dl	m
Z d dlmZmZ dZdZ G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)é    N)ÚABCÚabstractmethod)ÚAsyncDatabaseÚ	Databases)ÚWeightedList)ÚState)ÚNoValidDatabaseExceptionÚTemporaryUnavailableExceptioné
   é   c                   ó<   — e Zd Zedefd„«       Zededdfd„«       Zy)ÚAsyncFailoverStrategyÚreturnc              ƒ   ó   K  — y­w)z.Select the database according to the strategy.N© ©Úselfs    ú\/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/redis/asyncio/multidb/failover.pyÚdatabasezAsyncFailoverStrategy.database   ó   è ø€ ð 	ùó   ‚Ú	databasesNc                  ó   — y)z&Set the database strategy operates on.Nr   ©r   r   s     r   Úset_databasesz#AsyncFailoverStrategy.set_databases   s   € ð 	ó    )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r      s=   „ Øð ò ó ðð ð yð °Tò ó ñr   r   c                   ó‚   — e Zd Zeedefd„«       «       Zeedefd„«       «       Zeede	fd„«       «       Z
edefd„«       Zy)ÚFailoverStrategyExecutorr   c                  ó   — y)z The number of failover attempts.Nr   r   s    r   Úfailover_attemptsz*FailoverStrategyExecutor.failover_attempts   ó   € ð 	r   c                  ó   — y)z$The delay between failover attempts.Nr   r   s    r   Úfailover_delayz'FailoverStrategyExecutor.failover_delay#   r$   r   c                  ó   — y)zThe strategy to execute.Nr   r   s    r   Ústrategyz!FailoverStrategyExecutor.strategy)   r$   r   c              ƒ   ó   K  — y­w)zExecute the failover strategy.Nr   r   s    r   Úexecutez FailoverStrategyExecutor.execute/   r   r   N)r   r   r   Úpropertyr   Úintr#   Úfloatr&   r   r(   r   r*   r   r   r   r!   r!      s…   „ ØØð 3ò ó ó ðð Øð ò ó ó ðð ØðÐ/ò ó ó ðð ð˜}ò ó ñr   r!   c                   ó2   — e Zd ZdZd„ Zdefd„Zdeddfd„Zy)ÚWeightBasedFailoverStrategyz6
    Failover strategy based on database weights.
    c                 ó"   — t        «       | _        y ©N)r   Ú
_databasesr   s    r   Ú__init__z$WeightBasedFailoverStrategy.__init__:   s   € Ü&›.ˆr   r   c              ƒ   óž   K  — | j                   D ]0  \  }}|j                  j                  t        j                  k(  sŒ.|c S  t        d«      ‚­w)Nz-No valid database available for communication)r2   ÚcircuitÚstateÚCBStateÚCLOSEDr	   )r   r   Ú_s      r   r   z$WeightBasedFailoverStrategy.database=   sH   è ø€ ØŸ?™?ò 	 ‰KˆHaØ×Ñ×%Ñ%¬¯©Ó7Ø’ð	 ô 'Ð'VÓWÐWùs
   ‚:A½Ar   Nc                 ó   — || _         y r1   )r2   r   s     r   r   z)WeightBasedFailoverStrategy.set_databasesD   s	   € Ø#ˆr   )	r   r   r   Ú__doc__r3   r   r   r   r   r   r   r   r/   r/   5   s-   „ ñò)ðX ó Xð$ yð $°Tô $r   r/   c                   ó€   — e Zd ZdZeefdededefd„Z	e
defd„«       Ze
defd„«       Ze
defd	„«       Zdefd
„Zdd„Zy)ÚDefaultFailoverStrategyExecutorz+
    Executes given failover strategy.
    r(   r#   r&   c                 óJ   — || _         || _        || _        d| _        d| _        y ©Nr   )Ú	_strategyÚ_failover_attemptsÚ_failover_delayÚ_next_attempt_tsÚ_failover_counter)r   r(   r#   r&   s       r   r3   z(DefaultFailoverStrategyExecutor.__init__M   s+   € ð "ˆŒØ"3ˆÔØ-ˆÔØ%&ˆÔØ&'ˆÕr   r   c                 ó   — | j                   S r1   )rA   r   s    r   r#   z1DefaultFailoverStrategyExecutor.failover_attemptsY   s   € à×&Ñ&Ð&r   c                 ó   — | j                   S r1   )rB   r   s    r   r&   z.DefaultFailoverStrategyExecutor.failover_delay]   s   € à×#Ñ#Ð#r   c                 ó   — | j                   S r1   )r@   r   s    r   r(   z(DefaultFailoverStrategyExecutor.strategya   s   € à~‰~Ðr   c              ƒ   óF  K  — 	 | j                   j                  «       ƒ d {  –—† }| j                  «        |S 7 Œ# t        $ rÛ}| j                  dk(  r<t        j
                  «       | j                  z   | _        | xj                  dz  c_        nUt        j
                  «       | j                  k\  r4| xj                  | j                  z  c_        | xj                  dz  c_        | j                  | j                  kD  r| j                  «        |‚t        d«      ‚d }~ww xY w­w)Nr   é   zhNo database connections currently available. This is a temporary condition - please retry the operation.)
r@   r   Ú_resetr	   rC   ÚtimerB   rD   rA   r
   )r   r   Úes      r   r*   z'DefaultFailoverStrategyExecutor.executee   sí   è ø€ ð	Ø!Ÿ^™^×4Ñ4Ó6×6ˆHØK‰KŒMØˆOð 7ùô (ò 	Ø×$Ñ$¨Ò)Ü(,¯	©	«°d×6JÑ6JÑ(JÔ%Ø×&Ò&¨!Ñ+Ö&Ü—‘“ × 5Ñ 5Ò5Ø×%Ò%¨×)=Ñ)=Ñ=Õ%Ø×&Ò&¨!Ñ+Õ&à×%Ñ%¨×(?Ñ(?Ò?Ø—‘”Øä3ðRóð ûð	üs2   ‚D!„: ¡8¢: ·D!¸: º	DÁCDÄDÄD!Nc                 ó    — d| _         d| _        y r?   )rC   rD   r   s    r   rJ   z&DefaultFailoverStrategyExecutor._reset{   s   € Ø !ˆÔØ!"ˆÕr   )r   N)r   r   r   r;   ÚDEFAULT_FAILOVER_ATTEMPTSÚDEFAULT_FAILOVER_DELAYr   r,   r-   r3   r+   r#   r&   r(   r   r*   rJ   r   r   r   r=   r=   H   s“   „ ñð ";Ø 6ñ	
(à'ð
(ð ð
(ð ó	
(ð ð' 3ò 'ó ð'ð ð$ ò $ó ð$ð ðÐ/ò ó ðð˜}ó ô,#r   r=   )rK   Úabcr   r   Úredis.asyncio.multidb.databaser   r   Úredis.data_structurer   Úredis.multidb.circuitr   r7   Úredis.multidb.exceptionr	   r
   rN   rO   r   r!   r/   r=   r   r   r   ú<module>rU      sY   ðÛ ß #ç CÝ -Ý 2÷ð
 Ð ØÐ ô	˜Cô 	ô˜sô ô2$Ð"7ô $ô&5#Ð&>õ 5#r   