
    Zi                     .   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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Zd dlmZ 	 ddededededef
dZ de!e         ddfdZ"ddZ#deddfdZ$dedededdfdZ%deddfdZ&dS )     N)Event)Client)
Collection)cli)build_cli_args)SettingsSystem)get_sql)SqliteDB)Table)
invariants         ?hostportmax_retriesinitial_delayreturnc                    |}t          |          D ]x}	 t          j        | |          }|                                }|dk    r dS n# t          $ r t          d           Y nw xY w||dz
  k     rt          j        |           |dz  }ydS )a9  Wait for server to be ready using exponential backoff.
    Args:
        client: ChromaDB client instance
        max_retries: Maximum number of retry attempts
        initial_delay: Initial delay in seconds before first retry
    Returns:
        bool: True if server is ready, False if max retries exceeded
    r   r   r   Tz!Heartbeat failed, trying again...      F)rangechromadb
HttpClient	heartbeat	Exceptionprinttimesleep)r   r   r   r   delayattemptclientr   s           S/root/projects/butler/venv/lib64/python3.11/site-packages/chromadb/test/test_cli.pywait_for_serverr%      s     E%%  	(d>>>F((**I1}}tt  	 	 	5666D	 [1_$$JuQJE5s   0A		A%$A%argsc                 D    | t           _        t          j                     d S )N)sysargvr   app)r&   s    r$   	start_appr+   2   s    CHGIIIII    c                     ddd} ddg}|                     t          di |            t          |           t          j        t
          |f          }|                                 t          j        d           t          dd	          s
J d
            |
                                 |                                 d S )Nchroma_test_dataiA  )pathr   chromaruntargetr&   r   	localhostr   z4Server failed to start within maximum retry attempts )extendr   r   multiprocessingProcessr+   startr   r    r%   	terminatejoin)kwargsr&   server_processs      r$   test_appr>   6   s    ($77FeDKK(((()))	$KKK$,ITGLLLNJqMMM$777oo9oooor,   sqlite_persistentc                    | }|                     t                    }|j        }|                    dd           |                    |           t          j        |          }|                    d          }|                    d          }dt          dt          dd fd} ||d	            ||d
           |
                                5 }t          d          }	|                                                    |	                              d          }
t          |
          \  }}|                    ||           |                                g k    sJ 	 d d d            n# 1 swxY w Y   ddd|j        j        dgt(          _        t-          j                     |
                                5 }t          d          }	|                                                    |	                              d          }
t          |
          \  }}|                    ||           |                                }t1          |          dk    sJ |d         d         dk    sJ 	 d d d            n# 1 swxY w Y   t3          |d          r|`|j                            d          j        sJ t9          j        |||gd           d S )Nautomatically_purgeFcollection1collection2
collectionnumr   c                     d t          |          D             }t          j                            |d          }|                     ||           d S )Nc                 ,    g | ]}t          |          S r5   )str).0is     r$   
<listcomp>z4test_vacuum.<locals>.add_records.<locals>.<listcomp>T   s    ***!s1vv***r,   r   )ids
embeddings)r   nprandomrandadd)rD   rE   rL   rM   s       r$   add_recordsz test_vacuum.<locals>.add_recordsS   sL    **uSzz***Y^^C++
3:66666r,   d   i  maintenance_log*r0   vacuum--path--forcer   r   r   configT)instancer   rY   set_parameter
set_configr   from_systemcreate_collectionr   inttxr   querybuilderfrom_selectr
   executefetchallsettingspersist_directoryr(   r)   r   r*   lenhasattrget_parametervaluer   log_size_below_max)r?   systemsqliterY   r#   rB   rC   rR   curtqsqlparamsrowss                 r$   test_vacuumru   E   s+   F__X&&F ]F
.666
f ''F**=99K**=99K7
 7 7 7 7 7 7
 KS!!!KU### 
 $#$$!!''**11#66ajjVC   ||~~#####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ (Hfo.OQZ[CHGIII 
 &#$$!!''**11#66ajjVC   ||~~4yyA~~~~AwqzX%%%%%& & & & & & & & & & & & & & & vx   
M=&&'<==CCCC !&;*DdKKKKKs&   BE&&E*-E*3B/I//I36I3rf   ready_eventshutdown_eventc                 |   t          |           }|                                 |                    t                    }|                                5 }|                    d           |                                 |                                 d d d            n# 1 swxY w Y   |                                 d S )N)rf   z"INSERT INTO tenants DEFAULT VALUES)	r	   r9   rZ   r   r`   rd   setwaitstop)rf   rv   rw   rm   rn   ro   s         r$   simulate_transactional_writer|   {   s     X&&&F
LLNNN__X&&F	 8999              
 KKMMMMMs   >BB!$B!c                    t          j        d          }|                                }|                                }|                    t          | j        ||f          }|                                 |                                 	 ddd| j        j        dddgt          _
        t          j                     |                                }d	|j                                        v sJ 	 |                                 |                                 d
S # |                                 |                                 w xY w)zVVacuum command should fail with details if there is a long-lived lock on the database.spawnr2   r0   rV   rW   rX   z	--timeout10zFailed to vacuum ChromaN)r7   get_contextr   r8   r|   rf   r9   rz   rg   r(   r)   r   r*   
readouterrerrstripry   r;   )r?   capfdctxrv   rw   processcaptureds          r$   test_vacuum_errors_if_lockedr      s"   

%g
.
.C))++KYY[[Nkk+(+~F   G MMOOOh2C2L2^`ikvx|}			##%%(HL,>,>,@,@@@@@@ 	s   
A!D *E )r   r   )r   N)'r7   multiprocessing.contextr(   r   multiprocessing.synchronizer   r   chromadb.api.clientr   chromadb.api.models.Collectionr   chromadb.clir   chromadb.cli.clir   chromadb.configr   r	   chromadb.db.baser
   chromadb.db.impl.sqliter   pypikar   numpyrN   chromadb.test.propertyr   rH   r_   floatboolr%   listr+   r>   ru   r|   r   r5   r,   r$   <module>r      s	           



  - - - - - -  & & & & & & 5 5 5 5 5 5       + + + + + + , , , , , , , , $ $ $ $ $ $ , , , , , ,           - - - - - -
 25 ). 
   :DI $       3L6 3Ld 3L 3L 3L 3Ll%*<A	   F d      r,   