
    Bvh9                     X   d dl Z d dlZd dlZd dlZd dl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 e       d	ed
dfd       Z e       d	ed
dfd       Z e       d	ed
dfd       Z e       d	ed
dfd       Z e       d	ed
dfd       Z e       d	ed
dfd       Zy)    N)	ClientAPI)SealLogRequestMigrateLogRequest)LogServiceStub)resetskip_if_not_cluster)
invariants)wait_for_version_increased   clientreturnc                    t        j                          }t        j                  |       t        d|       t	        |        | j                  ddddd      }t        j                  d       t        d|j                         t        j                  d      }t        |      }t        t        |j                        	      }|j                  |d
      }g }g }t        t        t        z         D ]o  }	|j!                  t        |	             |j!                  t"        j                  j%                  dd      d          |j'                  t        |	      g|d   g       q g }
t        t        t        z         D ]N  }	|j)                  t        |	      gdg      }t+        |d         dk(  rt        d|	       |
j!                  |       P t-        |
      D ]f  \  }	}t+        |d         rMt/        t1        |d   d   ||	         D cg c]   \  }}t3        j4                  ||z
        dk  " c}}      r_J J d        y c c}}w )NGenerating data with seed test   zhnsw:construction_efzhnsw:search_efzhnsw:Mnamemetadata   failing over forlocalhost:50052collection_id<   timeout   r   ids
embeddingsr"   r!   includemissing resultMbP?missing a result)timerandomseedprintr   create_collectionsleepidgrpcinsecure_channelr   r   strSealLograngeRECORDSappendnprandaddgetlen	enumerateallzipmathfabs)r   r*   
collectionchannellog_service_stubrequestresponser!   r"   iresultsresultxys                 U/RAG/venv/lib/python3.12/site-packages/chromadb/test/distributed/test_log_failover.pytest_log_immediate_failoverrK      s    99;D
KK	
&-	&M))*-PST * J
 	JJqM	
jmm,##$56G%g.3z}}+=>G'''<H CJ7W$%

3q6"))..A.q12Q"2' 	 	
 & G7W$%SVH|nEvl#$)"A&v	 &
 !)Fvl#$s6,CWXYCZ\fgh\i?jk?jVa		!a%(50?jklll,,,5	 *ks   %H?c                    t        j                          }t        j                  |       t        d|       t	        |        | j                  ddddd      }t        j                  d       t        d|j                         t        j                  d      }t        |      }g }g }t        t              D ]o  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       q t%        t        |j                              }|j'                  |d      }	t        t        t        t        z         D ]o  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       q g }
t        t        t        z         D ]N  }|j)                  t        |      gdg      }t+        |d         d
k(  rt        d|       |
j                  |       P t-        |
      D ]f  \  }}t+        |d         rMt/        t1        |d   d
   ||         D cg c]   \  }}t3        j4                  ||z
        dk  " c}}      r_J J d        y c c}}w )Nr   r   r   r   r   r   r   r   r   r   r   r    r   r   r   r"   r#   r%   r&   r'   )r(   r)   r*   r+   r   r,   r-   r.   r/   r0   r   r3   r4   r5   r1   r6   r7   r8   r   r2   r9   r:   r;   r<   r=   r>   r?   r   r*   r@   rA   rB   r!   r"   rE   rC   rD   rF   rG   rH   rI   s                 rJ   test_log_failoverrN   F   sl    99;D
KK	
&-	&M))*-PST * J
 	JJqM	
jmm,##$56G%g. CJ7^

3q6"))..A.q12Q"2' 	 	
  3z}}+=>G'''<H 7Gg-.

3q6"))..A.q12Q"2' 	 	
 / G7W$%SVH|nEvl#$)"A&v	 &
 !)Fvl#$s6,CWXYCZ\fgh\i?jk?jVa		!a%(50?jklll,,,5	 *ks   %Kc                    t        j                          }t        j                  |       t        d|       t	        |        | j                  ddddd      }t        j                  d       t        d|j                         t        j                  d      }t        |      }g }g }t        t              D ]  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       |t        dz  k(  s}t%        | |j&                  d
        t)        t        |j                              }|j+                  |d      }	t        t        t        t        z         D ]o  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       q g }
t        t        t        z         D ]N  }|j-                  t        |      gdg      }t/        |d         d
k(  rt        d|       |
j                  |       P t1        |
      D ]f  \  }}t/        |d         rMt3        t5        |d   d
   ||         D cg c]   \  }}t7        j8                  ||z
        dk  " c}}      r_J J d        y c c}}w )Nr   r   r   r   r   r   r   r   r   r   r   r       r   r   r   r"   r#   r%   r&   r'   )r(   r)   r*   r+   r   r,   r-   r.   r/   r0   r   r3   r4   r5   r1   r6   r7   r8   r
   r   r   r2   r9   r:   r;   r<   r=   r>   r?   rM   s                 rJ   !test_log_failover_with_compactionrQ   }   s    99;D
KK	
&-	&M))*-PST * J
 	JJqM	
jmm,##$56G%g. CJ7^

3q6"))..A.q12Q"2' 	 	
 ! &fjooqA' * 3z}}+=>G'''<H 7Gg-.

3q6"))..A.q12Q"2' 	 	
 / G7W$%SVH|nEvl#$)"A&v	 &
 !)Fvl#$s6,CWXYCZ\fgh\i?jk?jVa		!a%(50?jklll,,,5	 *ks   0%K)c                    t        j                          }t        j                  |       t        d|       t	        |        | j                  ddddd      }t        j                  d       g }g }t        t              D ]o  }|j                  t        |             |j                  t        j                  j                  dd      d          |j                  t        |      g|d	   g
       q |d   |t        dz     |d	   g}g }|D ]*  }|j                  |gdddg      }	|j                  |	       , t        d|j                         t!        j"                  d      }
t%        |
      }t'        t        |j                              }|j)                  |d      }g }|D ]*  }|j                  |gdddg      }	|j                  |	       , t+        t-        ||            D ]  \  }\  }}t/        |d   d         t/        |d   d         k(  sJ d| d       |d   d   |d   d   k(  sJ d| d       t+        t-        |d   d   |d   d               D ]W  \  }\  }}t1        t-        ||      D cg c]   \  }}t3        j4                  ||z
        dk  " c}}      rKJ d| d| d         t        }t        ||t        z         D ]o  }|j                  t        |             |j                  t        j                  j                  dd      d          |j                  t        |      g|d	   g
       q |j                  |d   gddg      }t/        |d   d         dk(  sJ d       |j                  |d	   gddg      }t/        |d   d         dk(  sJ d       t        t/        |            D ]  }|j7                  t        |      gdg      }	t/        |	d         dkD  sJ d| d        t1        t-        |	d   d   ||         D cg c]   \  }}t3        j4                  ||z
        dk  " c}}      rJ d!|         y c c}}w c c}}w )"Nr   r   r   r   r   r   r   r   r   r    rP      r"   	distances)query_embeddings	n_resultsr$   r   r   r   r   r   r!   zQuery z% returned different number of resultsz returned different IDsr&   z result z embeddings differz'Failed to query old data after failoverz'Failed to query new data after failoverr#   zMissing result for ID z after failover with new datazEmbedding mismatch for ID )r(   r)   r*   r+   r   r,   r-   r3   r4   r5   r1   r6   r7   r8   queryr.   r/   r0   r   r   r2   r;   r=   r:   r<   r>   r?   r9   )r   r*   r@   r!   r"   rE   rU   baseline_resultsquery_embeddingrG   rA   rB   rC   rD   post_failover_resultsbaselinepost_failoverjbase_embpost_embrH   rI   post_failover_startold_data_querynew_data_querys                            rJ   'test_log_failover_with_query_operationsrc      s    99;D
KK	
&-	&M))*-PST * J
 	JJqM CJ7^

3q6"))..A.q12Q"2' 	 	
  #1z'1*'=z"~N+!!-.!;/ " 

 	' , 

jmm,##$56G%g. 3z}}+=>G'''<H +!!-.!;/ " 

 	$$V, , )2#6FH]2^(_$$Hm8E?1%&#mE.B1.E*FFy&QRPSSxHyyFq!]5%9!%<<aqcI`>aa<'0Xl5KA5NP]^jPklmPn1o'p#A#(s8X?VW?VVa		!a%(50?VWX  D\bcdbeemnomp  qC  [D  DX (q	 )` "&(;g(EF

3q6"))..A.q12Q"2' 	 	
 G  %%$Q- & N
 ~e$Q'(A-X/XX-  %%$R.) & N
 ~e$Q'(A-X/XX- 3s8_SVH|nE6,'(1,g0FqcIf.gg,3vl?STU?VXbcdXe;fg;f!QDIIa!e$u,;fgh  	K  mG  HI  GJ  kK  	Kh = XB hs   7%Q%Qc                 R   t        j                          }t        j                  |       t        d|       t	        |        | j                  ddddd      }t        j                  d       t        d|j                         t        j                  d      }t        |      }g }g }t        t              D ]o  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       q t%        t        |j                              }|j'                  |d      }	t)        t        |j                              }|j+                  |d      }	t-        | |j.                  d
       t        j                  d       t        t        t        t        z         D ]o  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       q g }
t        t        t        z         D ]N  }|j1                  t        |      gdg      }t3        |d         d
k(  rt        d|       |
j                  |       P t5        |
      D ]f  \  }}t3        |d         rMt7        t9        |d   d
   ||         D cg c]   \  }}t;        j<                  ||z
        dk  " c}}      r_J J d        y c c}}w Nr   r   r   r   r   r   r   r   r   r   r   r    r   r   r   Z   r"   r#   r%   r&   r'   )r(   r)   r*   r+   r   r,   r-   r.   r/   r0   r   r3   r4   r5   r1   r6   r7   r8   r   r2   r   
MigrateLogr
   r   r9   r:   r;   r<   r=   r>   r?   rM   s                 rJ   .test_log_failover_with_compaction_and_gc_delayrh   !  s    99;D
KK	
&-	&M))*-PST * J
 	JJqM	
jmm,##$56G%g. CJ7^

3q6"))..A.q12Q"2' 	 	
  3z}}+=>G'''<Hc*--.@AG**7B*?Hfjooq9JJrN 7Gg-.

3q6"))..A.q12Q"2' 	 	
 / G7W$%SVH|nEvl#$)"A&v	 &
 !)Fvl#$s6,CWXYCZ\fgh\i?jk?jVa		!a%(50?jklll,,,5	 *k   *%L#c                 R   t        j                          }t        j                  |       t        d|       t	        |        | j                  ddddd      }t        j                  d       t        d|j                         t        j                  d      }t        |      }g }g }t        t              D ]o  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       q t%        | |j&                  d
       t)        t        |j                              }|j+                  |d      }	t-        t        |j                              }|j/                  |d      }	t        j                  d       t        t        t        t        z         D ]o  }|j                  t        |             |j                  t        j                  j!                  dd	      d
          |j#                  t        |      g|d   g       q g }
t        t        t        z         D ]N  }|j1                  t        |      gdg      }t3        |d         d
k(  rt        d|       |
j                  |       P t5        |
      D ]f  \  }}t3        |d         rMt7        t9        |d   d
   ||         D cg c]   \  }}t;        j<                  ||z
        dk  " c}}      r_J J d        y c c}}w re   )r(   r)   r*   r+   r   r,   r-   r.   r/   r0   r   r3   r4   r5   r1   r6   r7   r8   r
   r   r   r2   r   rg   r9   r:   r;   r<   r=   r>   r?   rM   s                 rJ   -test_log_failover_with_migration_and_gc_delayrk   ^  s    99;D
KK	
&-	&M))*-PST * J
 	JJqM	
jmm,##$56G%g. CJ7^

3q6"))..A.q12Q"2' 	 	
  fjooq93z}}+=>G'''<Hc*--.@AG**7B*?H 	JJrN 7Gg-.

3q6"))..A.q12Q"2' 	 	
 / G7W$%SVH|nEvl#$)"A&v	 &
 !)Fvl#$s6,CWXYCZ\fgh\i?jk?jVa		!a%(50?jklll,,,5	 *kri   )r/   r>   r)   r(   numpyr6   chromadb.apir   chromadb.proto.logservice_pb2r   r   "chromadb.proto.logservice_pb2_grpcr   chromadb.test.conftestr   r   chromadb.test.propertyr	   -chromadb.test.utils.wait_for_version_increaser
   r4   rK   rN   rQ   rc   rh   rk        rJ   <module>ru      s*        " K = . S
)-)-	)- )-V 4-4-	4- 4-l A-A-	A- A-F ]K]K	]K ]K~ :-:-	:- :-x :-:-	:- :-rt   