§
    ˜Štjˆ>  ã            	       ó^  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Zd dl
mc mZ d dlZd dlmZmZmZmZmZ d dl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 m!Z! d dl"m#Z# d d	l$m%Z% d
Z&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2de3deee4         eeee4         f         fd„Z5dedede3ddfd„Z6deee4ej7        f                  fd„Z8de4de4de9fd„Z:d eee4ej7        f                  d!ee4ee4         f         de4ddfd"„Z;d eee4ej7        f                  d!ee4ee4         f         dee4e4f         fd#„Z<d$e4de4fd%„Z=d&e4de>fd'„Z?d(e4d)ee4e4f         de>fd*„Z@d+e4de4fd,„ZAd-ejB        d.e4dee4         fd/„ZCd0e4de4de9fd1„ZDd(e4de4dee4         fd2„ZEd3ee4         de4fd4„ZFde4dee4ee4         f         fd5„ZGde4ddfd6„ZHd7„ ZIded8e4de4ddfd9„ZJejK         L                    e d:¬;¦  «        d>d<„¦   «         ZMejK         L                    e d:¬;¦  «        ejK        jN        d>d=„¦   «         ¦   «         ZOdS )?é    N)ÚDictÚListÚOptionalÚTupleÚcast)Ú	ClientAPI)Ú
Collection)Ú
EmbeddingsÚ	Metadatas)ÚMULTI_REGION_ENABLED)Ú_create_isolated_database_mcmrÚ_create_mcmr_clients)Úwait_for_version_increase)Úcreate_batches)ÚchromaÚchroma2zgarbage-collector-0zhttp://localhost:9000)zchroma-storagezchroma-storage2ÚminioÚminio123z	us-east-1é   é   éð   é<   g      >@Úround_indexÚreturnc                 ó\  ‡ — ˆ fd„t          t          ¦  «        D ¦   «         }ˆ fd„t          t          ¦  «        D ¦   «         }ˆ fd„t          t          ¦  «        D ¦   «         }ˆ fd„t          t          ¦  «        D ¦   «         }|t          t          |¦  «        t          t          |¦  «        |fS )Nc           	      óH   •— g | ]}d ‰› d|› dt          j        ¦   «         › �‘ŒS )zround-z-record-ú-)ÚuuidÚuuid4©Ú.0Úrecord_indexr   s     €ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/test/property/test_add_gc.pyú
<listcomp>z&_records_for_round.<locals>.<listcomp>.   sH   ø€ ð ð ð àð 	D�ÐCÐC lÐCÐCµT´Z±\´\ÐCÐCðð ð ó    c                 óN   •— g | ]!}t          ‰¦  «        t          |¦  «        d g‘Œ"S )ç      ð?)Úfloatr    s     €r#   r$   z&_records_for_round.<locals>.<listcomp>2   s@   ø€ ð ð ð àõ 
ˆ{Ñ	Ô	�U <Ñ0Ô0°#Ð6ðð ð r%   c                 ó   •— g | ]}‰|d œ‘ŒS ))ÚroundÚrecord© r    s     €r#   r$   z&_records_for_round.<locals>.<listcomp>6   s1   ø€ ð ð ð àð ¨Ð6Ð6ðð ð r%   c                 ó    •— g | ]
}d ‰› d|› �‘ŒS )zround z record r,   r    s     €r#   r$   z&_records_for_round.<locals>.<listcomp>:   s9   ø€ ð ð ð àð 	5�Ð4Ð4 lÐ4Ð4ðð ð r%   )ÚrangeÚRECORDS_PER_ROUNDr   r
   r   )r   ÚidsÚ
embeddingsÚ	metadatasÚ	documentss   `    r#   Ú_records_for_roundr4   +   sì   ø€ ðð ð ð å!Õ"3Ñ4Ô4ðñ ô €Cðð ð ð å!Õ"3Ñ4Ô4ðñ ô €Jðð ð ð å!Õ"3Ñ4Ô4ðñ ô €Iðð ð ð å!Õ"3Ñ4Ô4ðñ ô €Ið ••Z Ñ,Ô,­dµ9¸iÑ.HÔ.HÈ)ÐSÐSr%   ÚclientÚ
collectionc                 óp   — t          |¦  «        \  }}}}t          | ||||¬¦  «        D ]} |j        |Ž  Œd S )N)Úapir0   r1   r2   r3   )r4   r   Úadd)r5   r6   r   r0   r1   r2   r3   Úbatchs           r#   Ú
_add_roundr;   A   sc   € Ý,>¸{Ñ,KÔ,KÑ)€Cˆ�Y 	ÝØØØØØðñ ô ð ð ˆð 	ˆ
Œ˜ÐÐÐðð r%   c            
      ó
  — g } t           D ]x}	 t          j        ddd|t          ddgt          j        t          j        dd¬¦  «        }n$# t
          $ r t          j        d	¦  «         Y nw xY w|                      ||f¦  «         Œy| S )
NÚkubectlÚlogsz-nz--tail=0z--followTé   )ÚstdoutÚstderrÚtextÚbufsizez3kubectl is required to watch garbage collector logs)	ÚGC_NAMESPACESÚ
subprocessÚPopenÚGC_POD_NAMEÚPIPEÚFileNotFoundErrorÚpytestÚskipÚappend)ÚwatchersÚ	namespaceÚprocs      r#   Ú_start_gc_log_watchersrP   M   s¸   € Ø€HÝ"ð +ð +ˆ	ð	OÝÔ#àØØØÝØØðõ "”Ý!”ØØðñ ô ˆDˆDøõ !ð 	Oð 	Oð 	OÝŒKÐMÑNÔNÐNÐNÐNð	Oøøøà�Š˜ DÐ)Ñ*Ô*Ð*Ð*Ø€Os   �9AÁA(Á'A(ÚoutputÚcollection_uuidc                 óŒ   — d}	 |                       d|¦  «        }|dk    rdS || ||dz   …         v rdS |t          d¦  «        z   }ŒB)Nr   TzHard deleting collectionséÿÿÿÿFi   )ÚfindÚlen)rQ   rR   ÚoffsetÚhard_delete_indexs       r#   Ú_hard_delete_log_foundrY   f   sl   € Ø€FðFØ"ŸKšKÐ(CÀVÑLÔLÐØ Ò"Ð"Ø�5Ø˜fÐ%6Ð9JÈTÑ9QÐ%QÔRÐRÐRØ�4Ø"¥SÐ)DÑ%EÔ%EÑEˆðFr%   rM   Úcaptured_stdoutc           	      óÖ  — t          j        ¦   «         }	 | D ]3\  }}|j        €Œ|                     |j        t           j        |¦  «         Œ4t          j        ¦   «         t          z   }t          j        ¦   «         |k     �r>|                     ¦   «         �r)t          dt          d|t          j        ¦   «         z
  ¦  «        ¦  «        }|                     |¬¦  «        D ]´\  }}	t          t          |j        ¦  «        }|j                             ¦   «         }
|
dk    r|                     |j        ¦  «         ŒY||                              |
¦  «         t'          d                     ||         ¦  «        |¦  «        r |                     ¦   «          d S Œµt          j        ¦   «         |k     r|                     ¦   «         �°)|                     ¦   «          d S # |                     ¦   «          w xY w)Nr'   g        ©ÚtimeoutÚ )Ú	selectorsÚDefaultSelectorr@   ÚregisterÚ
EVENT_READÚtimeÚ	monotonicÚGC_HARD_DELETE_TIMEOUT_SECONDSÚget_mapÚminÚmaxÚselectr   ÚstrÚdataÚfileobjÚreadlineÚ
unregisterrL   rY   ÚjoinÚclose)rM   rZ   rR   ÚselectorrN   rO   Údeadliner]   ÚkeyÚ_Úlines              r#   Ú_wait_for_gc_hard_delete_logrv   q   sÐ  € õ
 Ô(Ñ*Ô*€HðØ'ð 	Lð 	L‰OˆI�tØŒ{Ð"ØØ×Ò˜dœk­9Ô+?ÀÑKÔKÐKÐKå”>Ñ#Ô#Õ&DÑDˆÝŒnÑÔ Ò)Ñ)¨h×.>Ò.>Ñ.@Ô.@Ñ)Ý˜#�s 3¨µ4´>Ñ3CÔ3CÑ(CÑDÔDÑEÔEˆGØ"Ÿ/š/°'˜/Ñ:Ô:ð 
ð 
‘��QÝ ¥ c¤hÑ/Ô/�	Ø”{×+Ò+Ñ-Ô-�Ø˜2’:�:Ø×'Ò'¨¬Ñ4Ô4Ð4ØØ 	Ô*×1Ò1°$Ñ7Ô7Ð7Ý)Ø—G’G˜O¨IÔ6Ñ7Ô7¸ñô ð ð à�ŠÑÔÐÐÐðõ ŒnÑÔ Ò)Ð)¨h×.>Ò.>Ñ.@Ô.@Ñ)ð 	�ŠÑÔÐÐÐøˆ�ŠÑÔÐÐøøøs   •E$G Æ-G ÇG(c                 óL  — i }| D ]\  }}|                      ¦   «          Œ| D ]‚\  }}	 |                     d¬¦  «        \  }}n@# t          j        $ r. |                     ¦   «          |                     ¦   «         \  }}Y nw xY w|r||                              |¦  «         |||<   Œƒ|S )Né   r\   )Ú	terminateÚcommunicaterE   ÚTimeoutExpiredÚkillrL   )rM   rZ   Úcaptured_stderrrt   rO   rN   r@   rA   s           r#   Ú_stop_gc_log_watchersr~   �   sÝ   € ð €OØð ð ‰ˆˆ4Ø�ŠÑÔÐÐà#ð ,ð ,‰ˆ	�4ð	0Ø!×-Ò-°aÐ-Ñ8Ô8‰NˆF�F�FøÝÔ(ð 	0ð 	0ð 	0Ø�IŠI‰KŒKˆKØ!×-Ò-Ñ/Ô/‰NˆF�F�F�Fð	0øøøð ð 	6Ø˜IÔ&×-Ò-¨fÑ5Ô5Ð5Ø%+ˆ˜	Ñ"Ð"ØÐs   §AÁ:A>Á=A>Úvaluec                 óD   — t           j                             | d¬¦  «        S )Nz-_.~©Úsafe)ÚurllibÚparseÚquote)r   s    r#   Ú
_aws_quoter†   £   s   € ÝŒ<×Ò˜e¨&ÐÑ1Ô1Ð1r%   Ú
date_stampc                 ó  — t          j        dt          › �                     d¦  «        |                      d¦  «        t          j        ¦  «                             ¦   «         }t          j        |t                               d¦  «        t          j        ¦  «                             ¦   «         }t          j        |dt          j        ¦  «                             ¦   «         }t          j        |dt          j        ¦  «                             ¦   «         S )NÚAWS4úutf-8s   s3s   aws4_request)ÚhmacÚnewÚMINIO_SECRET_KEYÚencodeÚhashlibÚsha256ÚdigestÚMINIO_REGION)r‡   Údate_keyÚ
region_keyÚservice_keys       r#   Ú_signing_keyr–   §   sÌ   € ÝŒxØ!ÕÐ!Ð!×(Ò(¨Ñ1Ô1Ø×Ò˜'Ñ"Ô"ÝŒñô ÷ ‚f�h„hð	 õ
 ”Ø•,×%Ò% gÑ.Ô.µ´ñô ç‚f�h„hð õ ”(˜: u­g¬nÑ=Ô=×DÒDÑFÔF€KÝŒ8�K µ'´.ÑAÔA×HÒHÑJÔJÐJr%   ÚbucketÚqueryc                 óº  — t           j                             t          ¦  «        }t          j                             t          j        j        ¦  «        }|                     d¦  «        }|                     d¦  «        }t          j
        d¦  «                             ¦   «         }d| › �}t           j                             |d¬¦  «        }d                     d„ t          |                     ¦   «         ¦  «        D ¦   «         ¦  «        }	d	|j        › d
|› d|› d�}
d}d                     d||	|
||g¦  «        }|› dt"          › d�}d                     d||t          j
        |                     d¦  «        ¦  «                             ¦   «         g¦  «        }t'          j        t+          |¦  «        |                     d¦  «        t          j
        ¦  «                             ¦   «         }dt,          › d|› d|› d|› �}t           j                             |j        |j        |d|	df¦  «        }t           j                             ||||dœd¬¦  «        }	 t           j                             |t8          ¬¦  «        5 }|                     ¦   «         cd d d ¦  «         S # 1 swxY w Y   d S # t           j        j        $ rf}|                     ¦   «                               dd¬¦  «        }tC          j"        dt          › d| › d|j#        › d|j$        › d|›�
¦  «         Y d }~d S d }~wt           j        j%        $ r-}tC          j"        dt          › d| › d |› �¦  «         Y d }~d S d }~ww xY w)!Nz%Y%m%dT%H%M%SZz%Y%m%dr%   ú/z/-_.~r�   ú&c              3   ó^   K  — | ](\  }}t          |¦  «        › d t          |¦  «        › �V — Œ)dS )ú=N)r†   )r!   rs   r   s      r#   ú	<genexpr>z$_minio_signed_get.<locals>.<genexpr>½   sS   è è € ð ð Ù5?°S¸%�:�c‰?Œ?Ð0Ð0�Z¨Ñ.Ô.Ð0Ð0ðð ð ð ð ð r%   zhost:z
x-amz-content-sha256:z
x-amz-date:ú
z$host;x-amz-content-sha256;x-amz-dateÚGETz/s3/aws4_requestzAWS4-HMAC-SHA256rŠ   zAWS4-HMAC-SHA256 Credential=z, SignedHeaders=z, Signature=r^   )ÚAuthorizationzx-amz-content-sha256z
x-amz-date)ÚheadersÚmethodr\   Úreplace)Úerrorsz)Failed to list MinIO objects from S3 API z: HTTP ú z; body=z"Failed to connect to MinIO S3 API z: )&rƒ   r„   ÚurlparseÚMINIO_S3_ENDPOINTÚdatetimeÚnowÚtimezoneÚutcÚstrftimer�   r�   Ú	hexdigestr…   ro   ÚsortedÚitemsÚnetlocr’   rŽ   r‹   rŒ   r–   ÚMINIO_ACCESS_KEYÚ
urlunparseÚschemeÚrequestÚRequestÚurlopenÚ!MINIO_OBJECT_LIST_TIMEOUT_SECONDSÚreadÚerrorÚ	HTTPErrorÚdecoderJ   ÚfailÚcodeÚreasonÚURLError)r—   r˜   Úendpointrª   Úamz_dater‡   Úpayload_hashÚpathÚcanonical_uriÚcanonical_queryÚcanonical_headersÚsigned_headersÚcanonical_requestÚcredential_scopeÚstring_to_signÚ	signatureÚauthorizationÚurlrµ   ÚresponseÚeÚbodys                         r#   Ú_minio_signed_getrÒ   ´   sq  € ÝŒ|×$Ò$Õ%6Ñ7Ô7€HÝ
Ô
×
Ò
¥Ô 1Ô 5Ñ
6Ô
6€CØ�|Š|Ð,Ñ-Ô-€HØ—’˜hÑ'Ô'€JÝ”> #Ñ&Ô&×0Ò0Ñ2Ô2€Làˆvˆ<ˆ<€DÝ”L×&Ò& t°'Ð&Ñ:Ô:€MØ—h’hð ð ÝCIÈ%Ï+Ê+É-Ì-ÑCXÔCXðñ ô ñ ô €Oð	#�”ð 	#ð 	#Ø ,ð	#ð 	#àð	#ð 	#ð 	#ð ð
 <€NØŸ	š	àØØØØØð	
ñ	ô 	Ðð %ÐEÐE¥|ÐEÐEÐEÐØ—Y’YàØØÝŒNÐ,×3Ò3°GÑ<Ô<Ñ=Ô=×GÒGÑIÔIð		
ñô €Nõ ”Ý�ZÑ Ô Ø×Ò˜gÑ&Ô&ÝŒñô ÷ ‚i�k„kð	 ð	AÝ&ð	Að 	AØ)9ð	Að 	Aà'ð	Að 	Aà5>ð	Að 	Að õ Œ,×
!Ò
!àŒOØŒOØØØØð	
ñ	ô 	€Cõ Œn×$Ò$Øà*Ø$0Ø"ð
ð 
ð
 ð %ñ ô €Gð
ÝŒ^×#Ò#ØÕ>ð $ñ 
ô 
ð 	#àØ—=’=‘?”?ð	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øõ Œ<Ô!ð 
ð 
ð 
Ø�vŠv‰xŒx�Š˜w¨yˆÑ9Ô9ˆÝŒðUÝ ðUð UØ#)ðUð UØ23´&ðUð UØ;<¼8ðUð UØLPðUð Uñ	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøõ Œ<Ô ð 
ð 
ð 
ÝŒð1Ý ð1ð 1Ø#)ð1ð 1Ø-.ð1ð 1ñ	
ô 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øøøøð
øøøsI   É&J! É3JÊJ! ÊJÊJ! ÊJÊJ! Ê!MÊ5ALÌMÌ-"MÍMÚtagc                 ó:   — |                       dd¦  «        d         S )NÚ}r?   rT   )Úrsplit)rÓ   s    r#   Ú_xml_local_namer×   
  s   € Ø�:Š:�c˜1ÑÔ˜bÔ!Ð!r%   ÚelementÚnamec                 óR   — | D ]#}t          |j        ¦  «        |k    r	|j        c S Œ$d S ©N)r×   rÓ   rB   )rØ   rÙ   Úchilds      r#   Ú_child_textrÝ     s>   € Øð ð ˆÝ˜5œ9Ñ%Ô%¨Ò-Ð-Ø”:ÐÐÐð .àˆ4r%   rs   c                 ó   — d|› d�| v S )Nz/collection/z/versionfiles/r,   )rs   rR   s     r#   Ú_is_collection_version_file_keyrß     s   € Ø9˜/Ð9Ð9Ð9¸SÐ@Ð@r%   c                 óÜ  — g }d }	 dddœ}|�||d<   t          | |¦  «        }t          j        |¦  «        }|                     ¦   «         D ]V}t	          |j        ¦  «        dk    rŒt          |d¦  «        }|�)||v r%t          ||¦  «        s|                     |¦  «         ŒWt          |d¦  «        d	k    }	|	sn't          |d
¦  «        }|€t          j
        d¦  «         ŒÙt          |¦  «        S )NTÚ2Ú1000)z	list-typezmax-keyszcontinuation-tokenÚContentsÚKeyÚIsTruncatedÚtrueÚNextContinuationTokenzFMinIO returned a truncated object listing without a continuation token)rÒ   ÚETÚ
fromstringÚiterr×   rÓ   rÝ   rß   rL   rJ   r½   r¯   )
r—   rR   ÚkeysÚcontinuation_tokenr˜   rÑ   ÚrootrØ   rs   Úis_truncateds
             r#   Ú _list_minio_files_for_collectionrï     s#  € Ø€DØ(,ÐðØ!¨vÐ6Ð6ˆØÐ)Ø*<ˆEÐ&Ñ'å  ¨Ñ/Ô/ˆÝŒ}˜TÑ"Ô"ˆà—y’y‘{”{ð 		!ð 		!ˆGÝ˜wœ{Ñ+Ô+¨zÒ9Ð9ØÝ˜g uÑ-Ô-ˆCà�Ø# sÐ*Ð*Ý7¸¸_ÑMÔMð +ð —’˜CÑ Ô Ð øå" 4¨Ñ7Ô7¸6ÒAˆØð 	ØÝ(¨Ð/FÑGÔGÐØÐ%ÝŒKØXñô ð ð1õ8 �$‰<Œ<Ðr%   Úpathsc                 ó|   — d}| d |…         }t          | ¦  «        |k    rdndt          | ¦  «        |z
  › d�}|› |› �S )Né2   r^   z	 ... and z more©rV   )rð   Úsample_sizeÚsampleÚsuffixs       r#   Ú_format_minio_file_sampler÷   ;  s[   € Ø€KØ�<�K�<Ô €Få�%‰jŒj˜KÒ'Ð'ˆˆÐ-X½¸U¹¼ÀkÑ9QÐ-XÐ-XÐ-Xð ð Ð�fÐÐÐr%   c           
      ó²  ‡ — t          j        ¦   «         t          z   }i }	 ˆ fd„t          D ¦   «         }t	          |                     ¦   «         ¦  «        r|S t          j        ¦   «         |k    rWd„ |                     ¦   «         D ¦   «         }t          j        d‰ › d|› dd„ |                     ¦   «         D ¦   «         › �¦  «         t          j	        d¦  «         Œ¹)	NTc                 ó2   •— i | ]}|t          |‰¦  «        “ŒS r,   ©rï   ©r!   r—   rR   s     €r#   ú
<dictcomp>z8_wait_for_minio_files_for_collection.<locals>.<dictcomp>H  ó6   ø€ ð 
ð 
ð 
àð Õ4°V¸_ÑMÔMð
ð 
ð 
r%   c                 ó   — g | ]	\  }}|°|‘Œ
S r,   r,   ©r!   r—   rð   s      r#   r$   z8_wait_for_minio_files_for_collection.<locals>.<listcomp>O  s1   € ð ð ð Ù(˜6 5È5ðØðð ð r%   z;Expected MinIO to contain non-version files for collection zC in every test bucket before deletion, but these buckets had none: z. Found counts: c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r,   ró   rÿ   s      r#   rü   z8_wait_for_minio_files_for_collection.<locals>.<dictcomp>W  s$   € ÐUÐUÐU©M¨F°E�V�S ™ZœZÐUÐUÐUr%   r?   )
rc   rd   Ú#MINIO_OBJECT_APPEAR_TIMEOUT_SECONDSÚMINIO_BUCKETSÚallÚvaluesr°   rJ   r½   Úsleep)rR   rr   Úpaths_by_bucketÚmissing_bucketss   `   r#   Ú$_wait_for_minio_files_for_collectionr  D  s#  ø€ ÝŒ~ÑÔÕ"EÑE€HØ,.€Oðð
ð 
ð 
ð 
å'ð
ñ 
ô 
ˆõ ˆ×%Ò%Ñ'Ô'Ñ(Ô(ð 	#Ø"Ð"ÝŒ>ÑÔ˜xÒ'Ð'ðð Ø,;×,AÒ,AÑ,CÔ,Cðñ ô ˆOõ ŒKðYØ"ðYð Yà/>ðYð Yð VÐU¸_×=RÒ=RÑ=TÔ=TÐUÑUÔUð	Yð Yñô ð õ 	Œ
�1‰Œˆð%r%   c                 óî  ‡ — t          j        ¦   «         t          z   }i }	 ˆ fd„t          D ¦   «         }t	          |                     ¦   «         ¦  «        sd S t          j        ¦   «         |k    rud„ |                     ¦   «         D ¦   «         }d„ |                     ¦   «         D ¦   «         }t          j        d‰ › dd„ |                     ¦   «         D ¦   «         › d|› �¦  «         t          j	        d	¦  «         Œ×)
NTc                 ó2   •— i | ]}|t          |‰¦  «        “ŒS r,   rú   rû   s     €r#   rü   z1_wait_for_minio_files_deleted.<locals>.<dictcomp>`  rý   r%   c                 ó   — i | ]
\  }}|¯||“ŒS r,   r,   rÿ   s      r#   rü   z1_wait_for_minio_files_deleted.<locals>.<dictcomp>g  s3   € ð ð ð Ù"/ &¨%ÈeðØ˜ðð ð r%   c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r,   )r÷   rÿ   s      r#   rü   z1_wait_for_minio_files_deleted.<locals>.<dictcomp>j  s7   € ð ð ð á!�F˜Eð Õ1°%Ñ8Ô8ðð ð r%   z0Expected non-version MinIO files for collection zI to be deleted from every test bucket, but found files in these buckets: c                 ó4   — i | ]\  }}|t          |¦  «        “ŒS r,   ró   rÿ   s      r#   rü   z1_wait_for_minio_files_deleted.<locals>.<dictcomp>r  s$   € ÐOÐOÐO©M¨F°E�V�S ™ZœZÐOÐOÐOr%   z. Samples: r?   )
rc   rd   Ú#MINIO_OBJECT_DELETE_TIMEOUT_SECONDSr  Úanyr  r°   rJ   r½   r  )rR   rr   r  Ú	remainingÚsampless   `    r#   Ú_wait_for_minio_files_deletedr  \  sC  ø€ ÝŒ~ÑÔÕ"EÑE€HØ,.€Oðð
ð 
ð 
ð 
å'ð
ñ 
ô 
ˆõ �?×)Ò)Ñ+Ô+Ñ,Ô,ð 	ØˆFÝŒ>ÑÔ˜xÒ'Ð'ðð Ø3B×3HÒ3HÑ3JÔ3Jðñ ô ˆIðð à%.§_¢_Ñ%6Ô%6ðñ ô ˆGõ ŒKð&Ø"ð&ð &ð PÐO¸Y¿_º_Ñ=NÔ=NÐOÑOÔOð&ð &ð $ð	&ð &ñô ð õ 	Œ
�1‰Œˆð-r%   c                 ó2   — || t          |¦  «        z           S rÛ   ró   )r   Úround_arounds     r#   Úround_robinr  x  s   € Ø˜¥c¨,Ñ&7Ô&7Ñ7Ô8Ð8r%   Úcollection_namec                 ó¤  ‡— t          ¦   «         }d„ t          D ¦   «         }i }	 |                      |¦  «         t          ||‰¦  «         t	          ||¦  «        }n# t	          ||¦  «        }w xY wd„ |                     ¦   «         D ¦   «         }ˆfd„|                     ¦   «         D ¦   «         }|                     ¦   «         D ]'\  }}	t          |› dt          |	¦  «        › d�¦  «         Œ(|                     ¦   «         D ]#\  }}
|
rt          |› d|
dd …         › �¦  «         Œ$|s,J d‰› d	d
„ |                     ¦   «         D ¦   «         › �¦   «         ‚d S )Nc                 ó   — i | ]}|g “ŒS r,   r,   )r!   rN   s     r#   rü   z@_delete_collection_and_assert_gc_hard_delete.<locals>.<dictcomp>€  s   € ÐDÐDÐD¨�y "ÐDÐDÐDr%   c                 ó@   — i | ]\  }}|d                       |¦  «        “ŒS )r^   )ro   )r!   rN   Úliness      r#   rü   z@_delete_collection_and_assert_gc_hard_delete.<locals>.<dictcomp>ˆ  s5   € ð ð ð Ù&6 i°ˆ	�2—7’7˜5‘>”>ðð ð r%   c                 ó:   •— g | ]\  }}t          |‰¦  «        ¯|‘ŒS r,   )rY   )r!   rN   r@   rR   s      €r#   r$   z@_delete_collection_and_assert_gc_hard_delete.<locals>.<listcomp>‹  s=   ø€ ð ð ð áˆI�vÝ! &¨/Ñ:Ô:ðØðð ð r%   z GC stdout captured z bytesz GC stderr: iüÿÿz:Expected garbage collector logs to hard delete collection z. Captured stdout tails: c                 ó*   — i | ]\  }}||d d…         “ŒS )i0øÿÿNr,   )r!   rN   r@   s      r#   rü   z@_delete_collection_and_assert_gc_hard_delete.<locals>.<dictcomp>š  s'   € Ð\Ð\Ð\Ñ+<¨9°fˆY˜˜u˜v˜vœÐ\Ð\Ð\r%   )rP   rD   Údelete_collectionrv   r~   r°   ÚprintrV   )r5   r  rR   rM   rZ   r}   Ústdout_by_namespaceÚmatching_namespacesrN   r@   rA   s     `        r#   Ú,_delete_collection_and_assert_gc_hard_deleter!  |  sÝ  ø€ õ &Ñ'Ô'€HØDÐDµmÐDÑDÔD€OØ&(€OðKØ× Ò  Ñ1Ô1Ð1Ý$ X¨ÀÑPÔPÐPå/°¸/ÑJÔJˆˆøÕ/°¸/ÑJÔJˆÐJÐJÐJÐJðð Ø:I×:OÒ:OÑ:QÔ:Qðñ ô Ððð ð ð à!4×!:Ò!:Ñ!<Ô!<ðñ ô Ðð 1×6Ò6Ñ8Ô8ð Eð EÑˆ	�6Ý�ÐCÐCµ°F±´ÐCÐCÐCÑDÔDÐDÐDØ,×2Ò2Ñ4Ô4ð >ð >Ñˆ	�6Øð 	>Ý�YÐ<Ð<¨F°5°6°6¬NÐ<Ð<Ñ=Ô=Ð=øàð ð ð	`Øð	`ð 	`à\Ð\Ð@S×@YÒ@YÑ@[Ô@[Ð\Ñ\Ô\ð	`ð 	`ñô Ðð ð s   ¤&A ÁA-z;MCMR GC coverage requires a multi-region Kubernetes cluster)r¿   c                  ó  — t          ¦   «         \  } }t          | |d¦  «         dt          j        ¦   «         j        › �}|                      |¬¦  «        }|                     |¬¦  «         t          | |t          |j	        ¦  «        ¦  «         d S )Nútilt-spanningÚtest_add_gc_empty_©rÙ   )
r   r   r   r   ÚhexÚcreate_collectionÚget_collectionr!  rj   Úid)Úclient1Úclient2r  r6   s       r#   Ú.test_add_gc_hard_deletes_empty_mcmr_collectionr,  ž  s–   € õ
 ,Ñ-Ô-Ñ€GˆWÝ" 7¨G°_ÑEÔEÐEà=­4¬:©<¬<Ô+;Ð=Ð=€OØ×*Ò*°Ð*Ñ@Ô@€JØ×Ò ÐÑ0Ô0Ð0å0Ø�¥# j¤mÑ"4Ô"4ñô ð ð ð r%   c            
      óv  — t          ¦   «         \  } }t          | |d¦  «         | |g}dt          j        ¦   «         j        › �}|                      |¬¦  «        }|                     |¬¦  «        }t          |j        ¦  «        }||g}t          t          |                     ¦   «         d         ¦  «        }t          t          |                     ¦   «         d         ¦  «        }	t          t          ¦  «        D ]U}
t          |
|¦  «        }t          |
|¦  «        }t          |||
¦  «         t!          | ||¦  «        }t!          |||	¦  «        }	ŒVt#          |¦  «        }|                     ¦   «         D ]+\  }}t'          d|› dt)          |¦  «        › d|› d�¦  «         Œ,t+          | ||¦  «         t-          |¦  «         d S )	Nr#  Útest_add_gc_r%  ÚversionzMinIO bucket z contained z files for collection z before deletion)r   r   r   r   r&  r'  r(  rj   r)  r   ÚintÚ	get_modelr.   ÚCOMPACTION_ROUNDSr  r;   r   r  r°   r  rV   r!  r  )r*  r+  Úclientsr  Úcoll1Úcoll2rR   ÚcollectionsÚcurrent_version1Úcurrent_version2r   Úwriter_clientÚwriter_collectionÚ#minio_files_before_delete_by_bucketr—   rð   s                   r#   Ú(test_add_gc_hard_deletes_mcmr_collectionr<  ¯  sù  € õ ,Ñ-Ô-Ñ€GˆWÝ" 7¨G°_ÑEÔEÐEØ˜Ð €Gà7¥T¤Z¡\¤\Ô%5Ð7Ð7€OØ×%Ò%¨?Ð%Ñ;Ô;€EØ×"Ò"¨Ð"Ñ8Ô8€EÝ˜%œ(‘m”m€OØ˜%�.€Kå�C §¢Ñ!2Ô!2°9Ô!=Ñ>Ô>ÐÝ�C §¢Ñ!2Ô!2°9Ô!=Ñ>Ô>ÐåÕ.Ñ/Ô/ð 

ð 

ˆÝ# K°Ñ9Ô9ˆÝ'¨°[ÑAÔAÐÝ�=Ð"3°[ÑAÔAÐAå4Ø�_Ð&6ñ
ô 
Ðõ 5Ø�_Ð&6ñ
ô 
ÐÐõ +OØñ+ô +Ð'ð =×BÒBÑDÔDð 
ð 
‰ˆ�Ýð1˜Fð 1ð 1­s°5©z¬zð 1ð 1Øð1ð 1ð 1ñ	
ô 	
ð 	
ð 	
õ
 1Ø� /ñô ð õ " /Ñ2Ô2Ð2Ð2Ð2r%   )r   N)Pr©   r�   r‹   r_   rE   rc   Úurllib.errorrƒ   Úurllib.parseÚurllib.requestÚxml.etree.ElementTreeÚetreeÚElementTreerè   r   Útypingr   r   r   r   r   rJ   Úchromadb.apir   Úchromadb.api.models.Collectionr	   Úchromadb.api.typesr
   r   Úchromadb.test.conftestr   Ú$chromadb.test.property.test_add_mcmrr   r   Ú-chromadb.test.utils.wait_for_version_increaser   Úchromadb.utils.batch_utilsr   rD   rG   r¨   r  r²   r�   r’   r2  r/   re   r  r  r¸   r0  rj   r4   r;   rF   rP   ÚboolrY   rv   r~   r†   Úbytesr–   rÒ   r×   ÚElementrÝ   rß   rï   r÷   r  r  r  r!  ÚmarkÚskipifr,  Úskip_single_regionr<  r,   r%   r#   ú<module>rQ     s¯  ðØ €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à €€€à "Ð "Ð "Ð "Ð "Ð "Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð TÐ SÐ SÐ SÐ SÐ SØ 5Ð 5Ð 5Ð 5Ð 5Ð 5ð &€Ø#€Ø+Ð Ø5€ØÐ ØÐ Ø€ØÐ ØÐ Ø!$Ð Ø&(Ð #Ø&(Ð #Ø$(Ð !ðTØðTà
ˆ4�Œ9�j )¨T°#¬YÐ6Ô7ðTð Tð Tð Tð,	�yð 	¨jð 	Àsð 	Ètð 	ð 	ð 	ð 	ð  U¨3°
Ô0@Ð+@Ô%AÔ Bð ð ð ð ð2F 3ð F¸ð FÀð Fð Fð Fð FðØ�5˜˜jÔ.Ð.Ô/Ô0ðà˜#˜t Cœy˜.Ô)ðð ðð 
ð	ð ð ð ð<Ø�5˜˜jÔ.Ð.Ô/Ô0ðà˜#˜t Cœy˜.Ô)ðð 
ˆ#ˆsˆ(„^ðð ð ð ð(2�cð 2˜cð 2ð 2ð 2ð 2ð
K˜Sð 
K Uð 
Kð 
Kð 
Kð 
KðS
˜cð S
¨$¨s°C¨x¬.ð S
¸Uð S
ð S
ð S
ð S
ðl"˜ð " ð "ð "ð "ð "ð˜œð ¨3ð °8¸C´=ð ð ð ð ðA¨ð A¸sð AÀtð Að Að Að Að¨Sð À3ð È4ÐPSÌ9ð ð ð ð ðD T¨#¤Yð °3ð ð ð ð ð¸#ð À$ÀsÈDÐQTÌIÀ~ÔBVð ð ð ð ð0°3ð ¸4ð ð ð ð ð89ð 9ð 9ðØðØ(+ðØ>Aðà	ðð ð ð ðD „×ÒØÐØHð ñ ô ð
ð 
ð 
ñ	ô ð
ð „×ÒØÐØHð ñ ô ð „Ôð&3ð &3ð &3ñ  Ôñ	ô ð
&3ð &3ð &3r%   