Ë
    lQêjQ4  ã                   ó  — d dl Z d dlZd dlmZmZmZmZmZmZ d dl	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZ d dlmZmZmZmZ d dlmZmZmZ d d	lmZ d d
l m!Z!m"Z" dZ#dZ$dZ%dZ& G d„ dee«      Z' G d„ dee«      Z( G d„ dee«      Z)y)é    N)ÚAnyÚCallableÚDictÚListÚOptionalÚcast)ÚclientÚconfigÚwatch)ÚApiException)ÚEnforceOverridesÚoverride)ÚRoutingModeÚSystem)ÚMemberÚ
MemberlistÚMemberlistProviderÚSegmentDirectory)ÚOpenTelemetryGranularityÚadd_attributes_to_current_spanÚtrace_method)ÚSegment)ÚassignÚmurmur3hasheré<   Úchromazchroma.clusterzsvc.cluster.localc                   ót   ‡ — e Zd ZU dZeed<   defˆ fd„Zedefd„«       Z	ede
ddfd	„«       Zdeddfd
„Zˆ xZS )ÚMockMemberlistProviderz&A mock memberlist provider for testingÚ_memberlistÚsystemc                 ó€   •— t         ‰| �  |«       t        ddd¬«      t        ddd¬«      t        dd	d
¬«      g| _        y )NÚaz10.0.0.1Únode1©ÚidÚipÚnodeÚbz10.0.0.2Únode2Úcz10.0.0.3Únode3)ÚsuperÚ__init__r   r   ©Úselfr    Ú	__class__s     €úx/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/segment/impl/distributed/segment_directory.pyr-   zMockMemberlistProvider.__init__#   s>   ø€ Ü‰Ñ˜Ô ä�c˜j¨wÔ7Ü�c˜j¨wÔ7Ü�c˜j¨wÔ7ð
ˆÕó    Úreturnc                 ó   — | j                   S ©N)r   ©r/   s    r1   Úget_memberlistz%MockMemberlistProvider.get_memberlist+   s   € à×ÑÐr2   Ú
memberlistNc                  ó   — y r5   © ©r/   r8   s     r1   Úset_memberlist_namez*MockMemberlistProvider.set_memberlist_name/   s   € àr2   c                 óD   — || _         | j                  D ]
  } ||«       Œ y)z]Updates the memberlist and calls all registered callbacks. This mocks an update from a k8s CRN)r   Ú	callbacks©r/   r8   Úcallbacks      r1   Úupdate_memberlistz(MockMemberlistProvider.update_memberlist3   s%   € à%ˆÔØŸ™ò 	!ˆHÙ�ZÕ ñ	!r2   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r-   r   r7   Ústrr<   rA   Ú__classcell__©r0   s   @r1   r   r      sh   ø… Ù0àÓð
˜võ 
ð ð  
ò  ó ð ð ð¨cð °dò ó ðð!¨Jð !¸4÷ !r2   r   c                   ó’  ‡ — e Zd ZU dZej
                  ed<   ee   ed<   ee	   ed<   e
j                  ed<   ee
j                     ed<   e
j                  ed<   e
j                  ed<   d	efˆ fd
„Zedˆ fd„«       Zedˆ fd„«       Zedd„«       Zede	fd„«       Zededdfd„«       Zde	fd„Zdd„Zdeeef   de	fd„Zde	ddfd„Zˆ xZS )Ú CustomResourceMemberlistProviderzMA memberlist provider that uses a k8s custom resource to store the memberlistÚ_kubernetes_apiÚ_memberlist_nameÚ_curr_memberlistÚ_curr_memberlist_mutexÚ_watch_threadÚ_kill_watch_threadÚ_done_waiting_for_resetr    c                 ó>  •— t         ‰| �  |«       t        j                  «        t	        j
                  «       | _        d | _        d | _        d | _	        t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        y r5   )r,   r-   r
   Úload_configr	   ÚCustomObjectsApirL   rP   rM   rN   Ú	threadingÚLockrO   ÚEventrQ   rR   r.   s     €r1   r-   z)CustomResourceMemberlistProvider.__init__E   sr   ø€ Ü‰Ñ˜Ô Ü×ÑÔÜ%×6Ñ6Ó8ˆÔØ!ˆÔØ $ˆÔØ $ˆÔÜ&/§n¡nÓ&6ˆÔ#Ü"+§/¡/Ó"3ˆÔÜ'0§¡Ó'8ˆÕ$r2   r3   Nc                 óÂ   •— | j                   €t        d«      ‚| j                  «        | j                  j	                  «        | j                  «        t        ‰| �  «       S )Nz+Memberlist name must be set before starting)rM   Ú
ValueErrorr7   rR   ÚclearÚ_watch_worker_memberlistr,   Ústart©r/   r0   s    €r1   r]   z&CustomResourceMemberlistProvider.startP   sQ   ø€ à× Ñ Ð(ÜÐJÓKÐKØ×ÑÔØ×$Ñ$×*Ñ*Ô,Ø×%Ñ%Ô'Ü‰w‰}‹Ðr2   c                 ó2  •— d | _         d | _        | j                  j                  «        | j                  �| j                  j                  «        d | _        | j                  j                  «        | j                  j                  «        t        ‰| �%  «       S r5   )
rN   rM   rQ   ÚsetrP   Újoinr[   rR   r,   Ústopr^   s    €r1   rb   z%CustomResourceMemberlistProvider.stopY   s}   ø€ à $ˆÔØ $ˆÔð 	×Ñ×#Ñ#Ô%Ø×ÑÐ)Ø×Ñ×#Ñ#Ô%Ø!ˆÔØ×Ñ×%Ñ%Ô'Ø×$Ñ$×*Ñ*Ô,Ü‰w‰|‹~Ðr2   c           
      ó‚  — | j                   j                  j                  d«      st        d«      ‚| j                  rƒ| j
                  j                  «        | j                  j                  t        dt        d| j                  ddg idœ¬«       | j
                  j                  d	«       t        j                  d
«       y y )NÚallow_resetz�Resetting the database is not allowed. Set `allow_reset` to true in the config in tests or other non-production environments where reset should be permitted.Úv1ÚmemberlistsÚ
MemberListÚmembers)ÚkindÚspec)ÚgroupÚversionÚ	namespaceÚpluralÚnameÚbodyg      @g      à?)Ú_systemÚsettingsÚrequirerZ   rM   rR   r[   rL   Úpatch_namespaced_custom_objectÚKUBERNETES_GROUPÚKUBERNETES_NAMESPACEÚwaitÚtimeÚsleepr6   s    r1   Úreset_statez,CustomResourceMemberlistProvider.reset_stateg   s²   € ð
 �|‰|×$Ñ$×,Ñ,¨]Ô;Üð póð ð × Ò Ø×(Ñ(×.Ñ.Ô0Ø× Ñ ×?Ñ?Ü&ØÜ.Ø$Ø×*Ñ*à(Ø&¨˜Oñð @ô 
ð ×(Ñ(×-Ñ-¨cÔ2ô �J‰J�s�Oð# !r2   c                 ó\   — | j                   €| j                  «       | _         | j                   S r5   )rN   Ú_fetch_memberlistr6   s    r1   r7   z/CustomResourceMemberlistProvider.get_memberlistƒ   s+   € à× Ñ Ð(Ø$(×$:Ñ$:Ó$<ˆDÔ!Ø×$Ñ$Ð$r2   r8   c                 ó   — || _         y r5   )rM   r;   s     r1   r<   z4CustomResourceMemberlistProvider.set_memberlist_name‰   s
   € à *ˆÕr2   c                 ó  — | j                   j                  t        dt        d| j                  › ¬«      }t        t        t        t        f   |«      }d|vrg S t        t        t        t        f   |d   «      }| j                  |«      S )Nre   rf   )rk   rl   rm   rn   ro   rj   )
rL   Úget_namespaced_custom_objectru   rv   rM   r   r   rG   r   Ú_parse_response_memberlist)r/   Úapi_responseÚresponse_specs      r1   r|   z2CustomResourceMemberlistProvider._fetch_memberlist�   sƒ   € Ø×+Ñ+×HÑHÜ"ØÜ*Ø Ø×)Ñ)Ð*ð Ió 
ˆô œD¤¤c ™N¨LÓ9ˆØ˜Ñ%ØˆIÜœT¤#¤s (™^¨\¸&Ñ-AÓBˆØ×.Ñ.¨}Ó=Ð=r2   c                 óœ   ‡ — dˆ fd„}‰ j                   €/t        j                  |d¬«      }|j                  «        |‰ _         y t	        d«      ‚)Nc                  ó  •‡— t        j                  «       Šdˆˆfd„} ‰j                  j                  «       s#	  | «        ‰j                  j                  «       sŒ#y # t        $ r}|j
                  dk(  r	 Y d }~Œ:d }~ww xY w)Nc            	      ó¬  •— ‰j                  ‰j                  j                  t        dt        dd‰j
                  › �t        ¬«      D ]ÿ  } t        t        t        t        f   | «      } | d   d   }t        t        t        t        f   |«      }‰j                  5  ‰j                  |«      ‰_        d d d «       ‰j                  ‰j                  «       ‰j                  j                   j#                  d«      sŒ±‰j$                  j'                  «       rŒÌt)        ‰j                  «      dkD  sŒå‰j$                  j+                  «        �Œ y # 1 sw Y   ŒœxY w)	Nre   rf   zmetadata.name=)rk   rl   rm   rn   Úfield_selectorÚtimeout_secondsÚobjectrj   rd   r   )ÚstreamrL   Úlist_namespaced_custom_objectru   rv   rM   ÚWATCH_TIMEOUT_SECONDSr   r   rG   r   rO   r€   rN   Ú_notifyrq   rr   rs   rR   Úis_setÚlenr`   )Úeventr‚   r/   Úws     €€r1   Údo_watchz^CustomResourceMemberlistProvider._watch_worker_memberlist.<locals>.run_watch.<locals>.do_watch¡   s  ø€ ØŸX™XØ×(Ñ(×FÑFÜ*Ø Ü2Ø(Ø%3°D×4IÑ4IÐ3JÐ#KÜ$9ð &ó ò ;�Eô !¤¤c¬3 h¡°Ó7�EØ$)¨(¡O°FÑ$;�MÜ$(¬¬c´3¨h©¸Ó$G�MØ×4Ñ4ñ Ø04×0OÑ0OØ)ó1˜Ô-÷ð —L‘L ×!6Ñ!6Ô7àŸ™×-Ñ-×5Ñ5°mÕDØ $× <Ñ <× CÑ CÕ EÜ × 5Ñ 5Ó6¸Ó:à×4Ñ4×8Ñ8Ö:ñ-;÷ð ús   ÂE
Å
E	iš  ©r3   N)r   ÚWatchrQ   r�   r   Ústatus)r‘   Úer�   r/   s     @€r1   Ú	run_watchzLCustomResourceMemberlistProvider._watch_worker_memberlist.<locals>.run_watchž   sk   ù€ Ü—‘“ˆAö;ð6 ×-Ñ-×4Ñ4Ô6ðÙ”Jð ×-Ñ-×4Ñ4Õ6ð øô	 $ò à—x‘x 3’Øÿøðús   ¹A Á	A?Á%A:Á:A?T)ÚtargetÚdaemonz"A watch thread is already running.r’   )rP   rV   ÚThreadr]   Ú	Exception)r/   r–   Úthreads   `  r1   r\   z9CustomResourceMemberlistProvider._watch_worker_memberlist›   sF   ø€ õ%	ðN ×ÑÐ%Ü×%Ñ%¨Y¸tÔDˆFØ�L‰LŒNØ!'ˆDÕäÐ@ÓAÐAr2   Úapi_response_specc                 óš   — d|vrg S g }|d   D ]:  }|d   }d|v r|d   nd}d|v r|d   nd}|j                  t        |||¬«      «       Œ< |S )Nrh   Ú	member_idÚ	member_ipÚ Úmember_node_namer$   )Úappendr   )r/   rœ   ÚparsedÚmr%   r&   r'   s          r1   r€   z;CustomResourceMemberlistProvider._parse_response_memberlistÌ   sv   € ð Ð-Ñ-ØˆIØˆØ" 9Ñ-ò 	;ˆAØ�;‘ˆBØ#.°!Ñ#3��;’¸ˆBØ,>À!Ñ,C�1Ð'Ò(ÈˆDØ�M‰Mœ& B¨2°DÔ9Õ:ð		;ð
 ˆr2   c                 ó6   — | j                   D ]
  } ||«       Œ y r5   )r>   r?   s      r1   rŒ   z(CustomResourceMemberlistProvider._notifyÙ   s   € ØŸ™ò 	!ˆHÙ�ZÕ ñ	!r2   r’   )rB   rC   rD   rE   r	   rU   rF   r   rG   r   rV   rW   r™   rX   r   r-   r   r]   rb   rz   r7   r<   r|   r\   r   r   r€   rŒ   rH   rI   s   @r1   rK   rK   :   s  ø… ÙWà×,Ñ,Ó,Ø˜s‘mÓ#Ø˜zÑ*Ó*Ø%ŸN™NÓ*Ø˜I×,Ñ,Ñ-Ó-Ø!Ÿ™Ó'Ø&Ÿ_™_Ó,ð	9˜võ 	9ð ôó ðð ôó ðð òó ðð6 ð% 
ò %ó ð%ð
 ð+¨cð +°dò +ó ð+ð> :ó >ó/BðbØ!% c¨3 h¡ðà	óð! *ð !°÷ !r2   rK   c                   ó0  ‡ — e Zd ZU eed<   ej                  ed<   ee   ed<   e	ed<   de
fˆ fd„Zedˆ fd	„«       Zedˆ fd
„«       Zedededee   fd„«       Zedeegdf   ddfd„«       Z edej0                  «      deddfd„«       Zdedee   fd„Zˆ xZS )ÚRendezvousHashSegmentDirectoryÚ_memberlist_providerrO   rN   Ú_routing_moder    c                 óD  •— t         ‰| �  |«       | j                  t        «      | _        |j
                  j                  d«      }| j                  j                  |«       |j
                  j                  d«      | _        d | _        t        j                  «       | _        y )NÚworker_memberlist_nameÚ%chroma_segment_directory_routing_mode)r,   r-   rs   r   r¨   rr   r<   r©   rN   rV   rW   rO   )r/   r    Úmemberlist_namer0   s      €r1   r-   z'RendezvousHashSegmentDirectory.__init__ä   s~   ø€ Ü‰Ñ˜Ô Ø$(§L¡LÔ1CÓ$DˆÔ!Ø Ÿ/™/×1Ñ1Ð2JÓKˆØ×!Ñ!×5Ñ5°oÔFØ#Ÿ_™_×4Ñ4Ø3ó
ˆÔð !%ˆÔÜ&/§n¡nÓ&6ˆÕ#r2   r3   Nc                 ó¨   •— | j                   j                  «       | _        | j                   j                  | j                  «       t
        ‰| �  «       S r5   )r¨   r7   rN   Ú$register_updated_memberlist_callbackÚ_update_memberlistr,   r]   r^   s    €r1   r]   z$RendezvousHashSegmentDirectory.startð   sE   ø€ à $× 9Ñ 9× HÑ HÓ JˆÔØ×!Ñ!×FÑFØ×#Ñ#ô	
ô ‰w‰}‹Ðr2   c                 ój   •— | j                   j                  | j                  «       t        ‰| �  «       S r5   )r¨   Ú&unregister_updated_memberlist_callbackr°   r,   rb   r^   s    €r1   rb   z#RendezvousHashSegmentDirectory.stopø   s.   ø€ à×!Ñ!×HÑHØ×#Ñ#ô	
ô ‰w‰|‹~Ðr2   ÚsegmentÚnc           	      ó<  — | j                   �t        | j                   «      dk(  rt        d«      ‚t        |t        | j                   «      «      }t	        | j                   D �cg c]+  }|j
                  dk7  xr t        |j
                  «      dk7  ‘Œ- c}«      xr | j                  t        j                  k(  }|rBt        |d   j                  | j                   D �cg c]  }|j
                  ‘Œ c}t        |«      }nAt        |d   j                  | j                   D �cg c]  }|j                  ‘Œ c}t        |«      }t        |«      }g }| j                   D ]´  }|xr |j
                  |v }	| xr |j                  |v }
|	s|
sŒ-|j                  �0|j                  dk7  r!|j                  › d�}|j                  |«       Œi| j!                  |j                  «      }|j                  › d|› dt"        › dt$        › d�}|j                  |«       Œ¶ |S c c}w c c}w c c}w )Nr   zMemberlist is not initializedr    Ú
collectionz:50051ú.)rN   rŽ   rZ   ÚminÚallr'   r©   r   ÚNODEr   Úhexr   r%   r`   r&   r¢   Úextract_service_namerv   ÚHEADLESS_SERVICE)r/   r³   r´   r¤   Úcan_use_node_routingÚassignmentsÚassignments_setÚout_endpointsÚmemberÚis_chosen_with_node_routingÚis_chosen_with_id_routingÚendpointÚservice_names                r1   Úget_segment_endpointsz4RendezvousHashSegmentDirectory.get_segment_endpointsÿ   s  € à× Ñ Ð(¬C°×0EÑ0EÓ,FÈ!Ò,KÜÐ<Ó=Ð=ô
 �”3�t×,Ñ,Ó-Ó.ˆô ¸D×<QÑ<QÖR°q�—‘˜2‘Ò2¤# a§f¡f£+°Ñ"2Ñ2ÒRÓSò 7Ø×"Ñ"¤k×&6Ñ&6Ñ6ð 	ñ  ä Ø˜Ñ%×)Ñ)Ø!%×!6Ñ!6Ö7˜A�—“Ò7ÜØó	‰Kô !Ø˜Ñ%×)Ñ)Ø#×4Ñ4Ö5˜!�—“Ò5ÜØó	ˆKô ˜kÓ*ˆØˆØ×+Ñ+ò 	3ˆFà$ÒG¨¯©¸Ð)Gð (ð )Ð(ÒI¨V¯Y©Y¸/Ð-Ið &ñ +Ò.Gð —9‘9Ð(¨V¯Y©Y¸"ª_Ø"(§)¡) ¨FÐ3�HØ!×(Ñ(¨Õ2à#'×#<Ñ#<¸V¿Y¹YÓ#G�LØ"(§)¡) ¨A¨l¨^¸1Ô=QÐ<RÐRSÔTdÐSeÐekÐl�HØ!×(Ñ(¨Õ2ð!	3ð" ÐùòM Sùò 8ùò 6s   Á"0HÃH
ÄH
r@   c                 ó   — t        «       ‚r5   )ÚNotImplementedError)r/   r@   s     r1   Ú!register_updated_segment_callbackz@RendezvousHashSegmentDirectory.register_updated_segment_callback:  s   € ô "Ó#Ð#r2   z1RendezvousHashSegmentDirectory._update_memberlistr8   c                 ó¨   — | j                   5  t        d|D �cg c]  }|j                  ‘Œ c}i«       || _        d d d «       y c c}w # 1 sw Y   y xY w)NÚnew_memberlist)rO   r   r%   rN   )r/   r8   r¤   s      r1   r°   z1RendezvousHashSegmentDirectory._update_memberlist@  sS   € ð
 ×(Ñ(ñ 	/Ü*Ø!°*Ö#=¨Q A§D£DÒ#=Ð>ôð %/ˆDÔ!÷		/ð 	/ùâ#=÷	/ð 	/ús   �A˜A«AÁAÁAÚpod_namec                 ój   — |j                  d«      }t        |«      dkD  rdj                  |d d «      S y )Nú-é   éÿÿÿÿ)ÚsplitrŽ   ra   )r/   rÍ   Úpartss      r1   r¼   z3RendezvousHashSegmentDirectory.extract_service_nameK  s3   € à—‘˜sÓ#ˆäˆu‹:˜Š>Ø—8‘8˜E # 2˜JÓ'Ð'Ør2   r’   )rB   rC   rD   r   rF   rV   rW   r   r   r   r   r-   r   r]   rb   r   Úintr   rG   rÇ   r   rÊ   r   r   ÚALLr°   r¼   rH   rI   s   @r1   r§   r§   Þ   sÿ   ø… Ø,Ó,Ø%ŸN™NÓ*Ø˜zÑ*Ó*ØÓð
7˜võ 
7ð ôó ðð ôó ðð ð8¨Wð 8¸ð 8ÀÀcÁò 8ó ð8ðt ð$Ø  ' ¨D Ñ1ð$à	ò$ó ð$ñ
 Ø;Ø ×$Ñ$óð/¨Zð /¸Dò /ó	ð/ð¨Sð °X¸c±]÷ r2   r§   )*rV   rx   Útypingr   r   r   r   r   r   Ú
kubernetesr	   r
   r   Úkubernetes.client.restr   Ú	overridesr   r   Úchromadb.configr   r   Úchromadb.segment.distributedr   r   r   r   Ú chromadb.telemetry.opentelemetryr   r   r   Úchromadb.typesr   Úchromadb.utils.rendezvous_hashr   r   r‹   rv   ru   r½   r   rK   r§   r:   r2   r1   ú<module>rß      s‹   ðÛ Û ß <× <ß ,Ñ ,Ý /ß 0ß /÷ó ÷ñ õ
 #ß @ð Ð ØÐ Ø#Ð Ø&Ð ô!Ð/Ð1Aô !ô8a!Ð'9Ð;Kô a!ôHsÐ%5Ð7Gõ sr2   