Ë
    ™V.jÏ  ã                   ó   — d 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 dd	lmZ dd
lmZ ddlmZ ddlmZ dZ ee«      Zej6                  ej8                  cZZ G d„ dej:                  «      Zy)z)Worker <-> Worker communication Bootstep.é    )Údefaultdict)Úpartial)Úheappush)Ú
itemgetter)ÚConsumer)Ú	DummyLock)ÚContentDisallowedÚDecodeError)Ú	bootsteps)Ú
get_logger)ÚBunché   )ÚMingle)ÚGossipc            	       ó°   ‡ — e Zd ZdZd ZefZ eddddddd«      Zd	d
hZ		 	 dˆ fd„	Z
d„ Zdd„Zd„ Zd„ Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   zfBootstep consuming events from other workers.

    This keeps the logical clock value up to date.
    ÚidÚclockÚhostnameÚpidÚtopicÚactionÚcverÚamqpÚredisc                 óì  •— | xr | j                  |j                  «      | _        |j                  | _        | |_        |j                  j                  j
                  | _        |j                  | _        dj                  | j                  t        |j                  «      g«      | _
        t        t        «       t        «       t        «       ¬«      | _        |j                  | _        | j                  rw|j                  j                  j                  | j                   | j"                  d¬«      | _        |j&                  rt)        «       |_        | j$                  j,                  | _        || _        || _        d | _        t7        t8        «      | _        i | _        | j>                  | j@                  dœ| _!        |j                  jD                  | _"        d| jF                  i| _$        tK        ‰| �˜  |fi |¤Ž y )NÚ.)Ú	node_joinÚ
node_leaveÚ	node_lostr   )Úon_node_joinÚon_node_leaveÚmax_tasks_in_memory)zworker.electzworker.elect.ackÚtask)'Úcompatible_transportÚappÚenabledÚgossipÚeventsÚReceiverr   ÚjoinÚstrr   Úfull_hostnamer   ÚsetÚonÚtimerÚStater    r!   ÚstateÚhubr   Ú_mutexÚeventÚupdate_stateÚintervalÚheartbeat_intervalÚ_trefr   ÚlistÚconsensus_requestsÚconsensus_repliesÚon_electÚon_elect_ackÚevent_handlersr   Ú	call_taskÚelection_handlersÚsuperÚ__init__)ÚselfÚcÚwithout_gossipr6   r7   ÚkwargsÚ	__class__s         €ú_C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/worker/consumer/gossip.pyrB   zGossip.__init__$   s{  ø€ à)Ð)ÒN¨d×.GÑ.GÈÏÉÓ.NˆŒØ—5‘5ˆŒØˆŒØŸ™Ÿ™×-Ñ-ˆŒØŸ
™
ˆŒØ ŸX™X t§}¡}´c¸!¿%¹%³jÐ&AÓBˆÔÜÜ“eÜ“uÜ“eô
ˆŒð —W‘WˆŒ
Ø�<Š<ØŸ™Ÿ™×+Ñ+Ø!×.Ñ.Ø"×0Ñ0Ø$%ð ,ó ˆDŒJð
 �uŠuÜ$›;�”Ø $§
¡
× 0Ñ 0ˆDÔØ ˆŒØ"4ˆÔØˆŒ
Ü"-¬dÓ"3ˆÔØ!#ˆÔà ŸM™MØ $× 1Ñ 1ñ
ˆÔð —U‘U—[‘[ˆŒ
ð �D—N‘Nð"
ˆÔô 	‰Ñ˜Ñ%˜fÓ%ó    c                 ó’   — |j                  «       5 }|j                  j                  | j                  v cd d d «       S # 1 sw Y   y xY w©N)Úconnection_for_readÚ	transportÚdriver_typeÚcompatible_transports)rC   r%   Úconns      rH   r$   zGossip.compatible_transportM   s4   € Ø×$Ñ$Ô&¨$Ø—>‘>×-Ñ-°×1KÑ1KÐK÷ '×&Ò&ús	   ‘"=½Ac                 ób   — g | j                   |<   | j                  j                  d|||d¬«       y )Nzworker-electr   )r   r   r   r   )r;   Ú
dispatcherÚsend)rC   r   r   r   s       rH   ÚelectionzGossip.electionQ   s5   € Ø%'ˆ×Ñ˜rÑ"Ø�‰×ÑØØ˜ v°Að 	õ 	
rI   c                 ó°   — 	 | j                   j                  |«      j                  «        y # t        $ r }t        j                  d|«       Y d }~y d }~ww xY w)NzCould not call task: %r)r%   Ú	signatureÚapply_asyncÚ	ExceptionÚloggerÚ	exception)rC   r#   Úexcs      rH   r?   zGossip.call_taskX   sF   € ð	=Ø�H‰H×Ñ˜tÓ$×0Ñ0Õ2øÜò 	=Ü×ÑÐ6¸×<Ñ<ûð	=ús   ‚), ¬	AµAÁAc                 ó  — 	 | j                  |«      \  }}}}}}}t	        | j
                  |   ||› d|› �||f«       | j                  j                  d|¬«       y # t        $ r }	t        j                  d|	«      cY d }	~	S d }	~	ww xY w)Nz!election request missing field %sr   zworker-elect-ack)r   )Ú_cons_stamp_fieldsÚKeyErrorrY   rZ   r   r:   rR   rS   )
rC   r4   Úid_r   r   r   r   r   Ú_r[   s
             rH   r<   zGossip.on_elect^   s›   € ð	Nà!%×!8Ñ!8¸Ó!?ñˆS�%˜ 3Ø�F˜Aô 	Ø×#Ñ# CÑ(Ø�x�j  # Ð'¨°Ð7ô	
ð 	�‰×ÑÐ/°CÐÕ8øô ò 	NÜ×#Ñ#Ð$GÈÓMÕMûð	Nús   ‚A Á	BÁ$A?Á9BÁ?Bc                 óF   •— t         ‰| �  |«       |j                  | _        y rK   )rA   ÚstartÚevent_dispatcherrR   )rC   rD   rG   s     €rH   rb   zGossip.startj   s   ø€ Ü‰‰�aÔØ×,Ñ,ˆ�rI   c                 ó€  — |d   }	 | j                   |   }t        | j                  j	                  «       «      }|j                  |d   «       t        |«      t        |«      k\  r§| j                  j                  | j                  |   «      \  }}}}|| j                  k(  r%t        d|«       	 | j                  |   }	 |	|«       nt        d||«       | j                  j                  |d «       | j                   j                  |d «       y y # t        $ r Y y w xY w# t        $ r t        j                  d|«       Y Œjw xY w)Nr   r   zI won the election %rzUnknown election topic %rznode %s elected for %r)r;   r^   r-   r1   Úalive_workersÚappendÚlenr   Ú	sort_heapr:   r,   Úinfor@   rY   rZ   Úpop)
rC   r4   r   Úrepliesre   r`   Úleaderr   r   Úhandlers
             rH   r=   zGossip.on_elect_ackn   s4  € Ø�4‰[ˆð	Ø×,Ñ,¨RÑ0ˆGô ˜DŸJ™J×4Ñ4Ó6Ó7ˆØ�‰�u˜ZÑ(Ô)äˆw‹<œ3˜}Ó-Ò-Ø'+§z¡z×';Ñ';Ø×'Ñ'¨Ñ+ó(Ñ$ˆAˆv�u˜fð ˜×+Ñ+Ò+ÜÐ,¨bÔ1ð$Ø"×4Ñ4°UÑ;�Gñ ˜F•OäÐ-¨v°rÔ:Ø×#Ñ#×'Ñ'¨¨DÔ1Ø×"Ñ"×&Ñ& r¨4Õ0ð .øô ò 	Ùð	ûô  ò IÜ×$Ñ$Ð%@À%ÖHðIús#   ‡D Â-D Ä	DÄDÄD=Ä<D=c                 ó|   — t        d|j                  «       | j                  | j                  j                  |«       y )Nz%s joined the party)Údebugr   Ú_call_handlersr.   r   ©rC   Úworkers     rH   r    zGossip.on_node_joinˆ   s+   € ÜÐ# V§_¡_Ô5Ø×Ñ˜DŸG™G×-Ñ-¨vÕ6rI   c                 ó|   — t        d|j                  «       | j                  | j                  j                  |«       y )Nz%s left)ro   r   rp   r.   r   rq   s     rH   r!   zGossip.on_node_leaveŒ   s*   € Üˆi˜Ÿ™Ô)Ø×Ñ˜DŸG™G×.Ñ.°Õ7rI   c                 ó|   — t        d|j                  «       | j                  | j                  j                  |«       y )Nzmissed heartbeat from %s)ri   r   rp   r.   r   rq   s     rH   Úon_node_lostzGossip.on_node_lost�   s+   € ÜÐ'¨¯©Ô9Ø×Ñ˜DŸG™G×-Ñ-¨vÕ6rI   c                 ó~   — |D ]  }	  ||i |¤Ž Œ y # t         $ r!}t        j                  d||«       Y d }~Œ4d }~ww xY w)Nz!Ignored error from handler %r: %r)rX   rY   rZ   )rC   ÚhandlersÚargsrF   rm   r[   s         rH   rp   zGossip._call_handlers”   sO   € ÛˆGðGÙ˜Ð( Ó(ñ  øô ò GÜ× Ñ Ø7¸À#÷Gñ GûðGús   ‡’	<›7·<c                 óº   — | j                   �| j                   j                  «        | j                  j                  | j                  | j
                  «      | _         y rK   )r8   Úcancelr/   Úcall_repeatedlyr6   Úperiodic)rC   s    rH   Úregister_timerzGossip.register_timerœ   s<   € Ø�:‰:Ð!Ø�J‰J×ÑÔØ—Z‘Z×/Ñ/°·±¸t¿}¹}ÓMˆ�
rI   c                 ó  — | j                   j                  }t        «       }|j                  «       D ]1  }|j                  rŒ|j                  |«       | j                  |«       Œ3 |D ]  }|j                  |j                  d «       Œ  y rK   )	r1   Úworkersr-   ÚvaluesÚaliveÚaddru   rj   r   )rC   r   Údirtyrr   s       rH   r|   zGossip.periodic¡   sh   € Ø—*‘*×$Ñ$ˆÜ“ˆØ—n‘nÖ&ˆFØ—<“<Ø—	‘	˜&Ô!Ø×!Ñ! &Õ)ð 'ó ˆFØ�K‰K˜Ÿ™¨Õ.ñ rI   c                 óæ   — | j                  «        | j                  |d| j                  ¬«      }t        ||j                  gt        | j                  |j                  «      |j                  d¬«      gS )Nzworker.#)Úrouting_keyÚ	queue_ttlT)ÚqueuesÚ
on_messageÚacceptÚno_ack)	r}   r)   r7   r   Úqueuer   rˆ   Úevent_from_messager‰   )rC   ÚchannelÚevs      rH   Úget_consumerszGossip.get_consumers«   sj   € Ø×ÑÔØ�]‰]˜7°
Ø%)×%<Ñ%<ð ó >ˆäØØ—H‘H�:Ü˜tŸ™°×0EÑ0EÓFØ—9‘9Øô
ð ð 	rI   c                 ó  — |j                   d   }|j                  dd«      d   dk(  ry 	 | j                  |   } ||j                  «      S # t        $ r Y nw xY w|j
                  j                  d«      xs |j                  d   }|| j                  k7  r^	  ||j                  «      \  }}| j                  |«       y # t        t        t        f$ r}t        j                  |«       Y d }~y d }~ww xY w| j                  j                  «        y )Nr…   r   r   r   r#   r   )Údelivery_infoÚsplitr>   Úpayloadr^   ÚheadersÚgetr   r5   r
   r	   Ú	TypeErrorrY   Úerrorr   Úforward)	rC   ÚprepareÚmessageÚ_typerm   r   r`   r4   r[   s	            rH   rˆ   zGossip.on_message·   sý   € Ø×%Ñ% mÑ4ˆð �;‰;�s˜AÓ˜qÑ! VÒ+Øð	,Ø×)Ñ)¨%Ñ0ˆGñ ˜7Ÿ?™?Ó+Ð+øô ò 	Ùð	úð —O‘O×'Ñ'¨
Ó3ò 0Ø—O‘O JÑ/ð 	à�t—}‘}Ò$ð"Ù" 7§?¡?Ó3‘��5Ø×!Ñ! %Õ(øÜÔ!2´IÐ>ò "Ü—‘˜S×!Ñ!ûð"úð �J‰J×ÑÕ s)   ªA Á	AÁAÂ&B= Â=C0ÃC+Ã+C0)Fg      @g       @rK   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úlabelr   Úrequiresr   r]   rO   rB   r$   rT   r?   r<   rb   r=   r    r!   ru   rp   r}   r|   r�   rˆ   Ú__classcell__)rG   s   @rH   r   r      s’   ø„ ñð
 €EØˆy€HÙ#Øˆg�z 5¨'°8¸VóÐð $ WÐ-Ðà).Ø25õ'&òRLó
ò=ò
9ô-ò1ò47ò8ò7òGòNò
/ò
ö!rI   r   N)rŸ   Úcollectionsr   Ú	functoolsr   Úheapqr   Úoperatorr   Úkombur   Úkombu.asynchronous.semaphorer   Úkombu.exceptionsr	   r
   Úceleryr   Úcelery.utils.logr   Úcelery.utils.objectsr   Úmingler   Ú__all__rœ   rY   ro   ri   ÚConsumerStepr   © rI   rH   Ú<module>r±      s_   ðÙ /Ý #Ý Ý Ý å Ý 2ß ;å Ý 'Ý &å à
€á	�HÓ	€Ø�l‰l˜FŸK™K€€€tôw!ˆY×#Ñ#õ w!rI   