From 73c9c1ebdcd00d53483934e79ea6706e2d5a0586 Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Mon, 7 Jul 2025 11:33:01 +0200 Subject: [PATCH 1/6] Add compile-time checks for dumpless upgrade --- crates/milli/src/update/upgrade/mod.rs | 78 ++++++++++++++++++-------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/crates/milli/src/update/upgrade/mod.rs b/crates/milli/src/update/upgrade/mod.rs index 9f64ca0e3..c23e5c8b1 100644 --- a/crates/milli/src/update/upgrade/mod.rs +++ b/crates/milli/src/update/upgrade/mod.rs @@ -24,6 +24,57 @@ trait UpgradeIndex { fn target_version(&self) -> (u32, u32, u32); } +const UPGRADE_FUNCTIONS: &[&dyn UpgradeIndex] = &[ + &V1_12_To_V1_12_3 {}, + &V1_12_3_To_V1_13_0 {}, + &V1_13_0_To_V1_13_1 {}, + &V1_13_1_To_Latest_V1_13 {}, + &Latest_V1_13_To_Latest_V1_14 {}, + &Latest_V1_14_To_Latest_V1_15 {}, + // This is the last upgrade function, it will be called when the index is up to date. + // any other upgrade function should be added before this one. + &ToCurrentNoOp {}, +]; + +/// Causes a compile-time error if the argument is not in range of `0..UPGRADE_FUNCTIONS.len()` +macro_rules! function_index { + ($start:expr) => {{ + const _CHECK_INDEX: () = { + if $start >= $crate::update::upgrade::UPGRADE_FUNCTIONS.len() { + panic!("upgrade functions out of range") + } + }; + + $start + }}; +} + +const fn start(from: (u32, u32, u32)) -> Option { + let start = match from { + (1, 12, 0..=2) => function_index!(0), + (1, 12, 3..) => function_index!(1), + (1, 13, 0) => function_index!(2), + (1, 13, _) => function_index!(4), + (1, 14, _) => function_index!(5), + // We must handle the current version in the match because in case of a failure some index may have been upgraded but not other. + (1, 15, _) => function_index!(6), + // We deliberately don't add a placeholder with (VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH) here to force manually + // considering dumpless upgrade. + (_major, _minor, _patch) => return None, + }; + + Some(start) +} + +/// Causes a compile-time error if the latest package cannot be upgraded. +/// +/// This serves as a reminder to consider the proper dumpless upgrade implementation when changing the package version. +const _CHECK_PACKAGE_CAN_UPGRADE: () = { + if start((VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH)).is_none() { + panic!("cannot upgrade from latest package version") + } +}; + /// Return true if the cached stats of the index must be regenerated pub fn upgrade( wtxn: &mut RwTxn, @@ -36,33 +87,12 @@ where MSP: Fn() -> bool + Sync, { let from = index.get_version(wtxn)?.unwrap_or(db_version); - let upgrade_functions: &[&dyn UpgradeIndex] = &[ - &V1_12_To_V1_12_3 {}, - &V1_12_3_To_V1_13_0 {}, - &V1_13_0_To_V1_13_1 {}, - &V1_13_1_To_Latest_V1_13 {}, - &Latest_V1_13_To_Latest_V1_14 {}, - &Latest_V1_14_To_Latest_V1_15 {}, - // This is the last upgrade function, it will be called when the index is up to date. - // any other upgrade function should be added before this one. - &ToCurrentNoOp {}, - ]; - let start = match from { - (1, 12, 0..=2) => 0, - (1, 12, 3..) => 1, - (1, 13, 0) => 2, - (1, 13, _) => 4, - (1, 14, _) => 5, - // We must handle the current version in the match because in case of a failure some index may have been upgraded but not other. - (1, 15, _) => 6, - (major, minor, patch) => { - return Err(InternalError::CannotUpgradeToVersion(major, minor, patch).into()) - } - }; + let start = + start(from).ok_or_else(|| InternalError::CannotUpgradeToVersion(from.0, from.1, from.2))?; enum UpgradeVersion {} - let upgrade_path = &upgrade_functions[start..]; + let upgrade_path = &UPGRADE_FUNCTIONS[start..]; let mut current_version = from; let mut regenerate_stats = false; From a3254d7d7d9085aa8c83929cec1f64fb88c1e686 Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Mon, 7 Jul 2025 11:57:08 +0200 Subject: [PATCH 2/6] Implement dumpless upgrade from v1.15 to v1.16 --- crates/milli/src/update/upgrade/mod.rs | 4 ++ crates/milli/src/update/upgrade/v1_15.rs | 13 +++++++ crates/milli/src/update/upgrade/v1_16.rs | 48 ++++++++++++++++++++++++ crates/milli/src/vector/db.rs | 7 ++++ 4 files changed, 72 insertions(+) create mode 100644 crates/milli/src/update/upgrade/v1_16.rs diff --git a/crates/milli/src/update/upgrade/mod.rs b/crates/milli/src/update/upgrade/mod.rs index c23e5c8b1..f53319a37 100644 --- a/crates/milli/src/update/upgrade/mod.rs +++ b/crates/milli/src/update/upgrade/mod.rs @@ -2,6 +2,7 @@ mod v1_12; mod v1_13; mod v1_14; mod v1_15; +mod v1_16; use heed::RwTxn; use v1_12::{V1_12_3_To_V1_13_0, V1_12_To_V1_12_3}; use v1_13::{V1_13_0_To_V1_13_1, V1_13_1_To_Latest_V1_13}; @@ -10,6 +11,7 @@ use v1_15::Latest_V1_14_To_Latest_V1_15; use crate::constants::{VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH}; use crate::progress::{Progress, VariableNameStep}; +use crate::update::upgrade::v1_16::Latest_V1_15_To_V1_16_0; use crate::{Index, InternalError, Result}; trait UpgradeIndex { @@ -31,6 +33,7 @@ const UPGRADE_FUNCTIONS: &[&dyn UpgradeIndex] = &[ &V1_13_1_To_Latest_V1_13 {}, &Latest_V1_13_To_Latest_V1_14 {}, &Latest_V1_14_To_Latest_V1_15 {}, + &Latest_V1_15_To_V1_16_0 {}, // This is the last upgrade function, it will be called when the index is up to date. // any other upgrade function should be added before this one. &ToCurrentNoOp {}, @@ -58,6 +61,7 @@ const fn start(from: (u32, u32, u32)) -> Option { (1, 14, _) => function_index!(5), // We must handle the current version in the match because in case of a failure some index may have been upgraded but not other. (1, 15, _) => function_index!(6), + (1, 16, _) => function_index!(7), // We deliberately don't add a placeholder with (VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH) here to force manually // considering dumpless upgrade. (_major, _minor, _patch) => return None, diff --git a/crates/milli/src/update/upgrade/v1_15.rs b/crates/milli/src/update/upgrade/v1_15.rs index cea4783a1..9ca25d06b 100644 --- a/crates/milli/src/update/upgrade/v1_15.rs +++ b/crates/milli/src/update/upgrade/v1_15.rs @@ -1,4 +1,6 @@ use heed::RwTxn; +use roaring::RoaringBitmap; +use serde::{Deserialize, Serialize}; use super::UpgradeIndex; use crate::progress::Progress; @@ -26,3 +28,14 @@ impl UpgradeIndex for Latest_V1_14_To_Latest_V1_15 { (1, 15, 0) } } + +/// Parts of v1.15 `IndexingEmbeddingConfig` that are relevant for upgrade to v1.16 +/// +/// # Warning +/// +/// This object should not be rewritten to the DB, only read to get the name and `user_provided` roaring. +#[derive(Debug, Deserialize, Serialize)] +pub struct IndexEmbeddingConfig { + pub name: String, + pub user_provided: RoaringBitmap, +} diff --git a/crates/milli/src/update/upgrade/v1_16.rs b/crates/milli/src/update/upgrade/v1_16.rs new file mode 100644 index 000000000..f43efd77d --- /dev/null +++ b/crates/milli/src/update/upgrade/v1_16.rs @@ -0,0 +1,48 @@ +use heed::types::{SerdeJson, Str}; +use heed::RwTxn; + +use super::UpgradeIndex; +use crate::progress::Progress; +use crate::vector::db::{EmbedderInfo, EmbeddingStatus}; +use crate::{Index, InternalError, Result}; + +#[allow(non_camel_case_types)] +pub(super) struct Latest_V1_15_To_V1_16_0(); + +impl UpgradeIndex for Latest_V1_15_To_V1_16_0 { + fn upgrade( + &self, + wtxn: &mut RwTxn, + index: &Index, + _original: (u32, u32, u32), + _progress: Progress, + ) -> Result { + let v1_15_indexing_configs = index + .main + .remap_types::>>() + .get(wtxn, crate::index::main_key::EMBEDDING_CONFIGS)? + .unwrap_or_default(); + + let embedders = index.embedding_configs(); + for config in v1_15_indexing_configs { + let embedder_id = embedders.embedder_id(wtxn, &config.name)?.ok_or( + InternalError::DatabaseMissingEntry { + db_name: crate::index::db_name::VECTOR_EMBEDDER_CATEGORY_ID, + key: None, + }, + )?; + let info = EmbedderInfo { + embedder_id, + // v1.15 used not to make a difference between `user_provided` and `! regenerate`. + embedding_status: EmbeddingStatus::from_user_provided(config.user_provided), + }; + embedders.put_embedder_info(wtxn, &config.name, &info)?; + } + + Ok(false) + } + + fn target_version(&self) -> (u32, u32, u32) { + (1, 16, 0) + } +} diff --git a/crates/milli/src/vector/db.rs b/crates/milli/src/vector/db.rs index 0e890fac9..2fea75d68 100644 --- a/crates/milli/src/vector/db.rs +++ b/crates/milli/src/vector/db.rs @@ -117,6 +117,13 @@ impl EmbeddingStatus { Default::default() } + /// Create a new `EmbeddingStatus` that assumes that any `user_provided` docid is also skipping regenerate. + /// + /// Used for migration from v1.15 and earlier DBs. + pub(crate) fn from_user_provided(user_provided: RoaringBitmap) -> Self { + Self { user_provided, skip_regenerate_different_from_user_provided: Default::default() } + } + /// Whether the document contains user-provided vectors for that embedder. pub fn is_user_provided(&self, docid: DocumentId) -> bool { self.user_provided.contains(docid) From f7c8a77f89c2d449492421de2f812613bb8e4234 Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Mon, 7 Jul 2025 16:01:50 +0200 Subject: [PATCH 3/6] Update v1.12.0 DB to contain vectors --- .../upgrade/v1_12/v1_12_0.ms/auth/lock.mdb | Bin 8192 -> 8192 bytes .../data.mdb | Bin 163840 -> 229376 bytes .../lock.mdb | Bin 65664 -> 65664 bytes .../upgrade/v1_12/v1_12_0.ms/tasks/data.mdb | Bin 212992 -> 225280 bytes .../upgrade/v1_12/v1_12_0.ms/tasks/lock.mdb | Bin 8192 -> 8192 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/auth/lock.mdb b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/auth/lock.mdb index 4c80ffe2c03fba62008aca5da473370d7b421a38..80fb2b9d5b76d935cb8bddeabccb21fee83a51a6 100644 GIT binary patch delta 53 zcmZp0XmAj}ci{a#rUjiEtPBvq2&C3BF;2ACohYL*F+pTvg8(ao!H;~#jSJ)DCnoR! E0Ha9{P5=M^ delta 42 ucmZp0XmAj`ci{a#rUZQ*Rt5-QoM>r0(Zz@DfY@b+`_&s4#>-Dk;06F8#|_f} diff --git a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/indexes/381abe91-f939-4b91-92f2-01a24c2e8e3d/data.mdb b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/indexes/381abe91-f939-4b91-92f2-01a24c2e8e3d/data.mdb index c31db3415612b78106346996d5ff20d3fd293ae9..95ca0a9da78bb8e4d843ec3e7b4450b4b92fe076 100644 GIT binary patch literal 229376 zcmeF42YeL8`~Uau(v!PA0!S6Y(IOB`g#g*PP(%a-R74-BC2yQ6xQaDulDgKC4I{^SapgzKwmb z0j2;`fGNNfUqSTcj+W9^ot^vqE~)&xqHm!^EH@)0@&L(-_t z`dp&bl9E6S1d%F|*TmR(i#^C@&$Ol`xvZ>OZgr%E+N@Kx&BQk0E)A-s)+rTNN?Dtu z#Ukai+JY>p8TL`MxGoKOX z)yu8X>kyP^vr|IVhby~v)Pkr-8mbAjrlxXRY3Z4%u_@NkmIUSU{@JVCpi(I-)LAK| zd;__>BI-T!cqMBU>P+qvpnPhbYgMjuJ#J)rWY4%Dc)e8Rpa;syS0g7#UwQJCtS6Ssp z+fqNO)GJfTR+UwKv@N|-9*;`ps;gX)SZgM^Ea}{x96!;HT>cyb7^{;f#{2fcxDweFGp+}3R3h%8JmzL=et&POZ%0q%@x6Z}yAo?$Y-kvH)L{6fAvUurP$zZw2xD$EMX6krN41(*U%0j2;`fGNNf zU;xa6DEAiKn4^zg2vq&C16;eDod!~hq0}&UKHElZcyaN`R*Rab+6}2xRu3r$sTocdN_a~t z<%vpaSxMwUeoE?T>4=Ytg;a(5RjD@O(zD2aMBQttxqMcx_S-Mj<5?|2n^t@XhBfo<>htSbBE^~ z&t%VN&)S~XJPJLQdt`g`@d)(bJdV3>cAw@x)IHMO=w9kp;I_yu!>yZJfZH8iv2Lv{ zN7r8$tn<>H*6z^G(I#u7wY9a^G=-YwnruxUO`wL;99QZET~U7s;&^w5o)J&Hhte!$ zTa!axyxL3t8PZb5{Y>{=az6pN+d%FXkh=-wZUDLKK<*lly9(s40J+OR?h=su5y)Kx zauZfAwwQTS>7$<^QjG=-01YqCe;VAF7f0VIaSl z58%W3Q~W`GGe4P6HBwfvqt(gK$0j2;`fGNNfU!|q=E0Ui=1zPbesE|@V{;zg#NbP^bP4_;`_u{8}NBO1rdHF8Z zH{pLWg!|U^Tkm(pcLZPTJID99p}*cwf5K<4Ur$3W&*J|nLbDZ9fGNNfU@i4vyvV@zt| zkn{{G_?b;g>z0+2MC^1WQ3Ivj)bs>P3bA4%p%N`=@s=QaW^9@*kwl)eWZIsLC2{ti zwWe8nJ{#1tP0)x?Vm;F`!fGSN$T^nqcuTv;wrykM62mMBiI$MyxZs4y(6*5gmdLQU zg!s62ZNn^~p%!vh0*SGgX^qR0ieYLm#qS$Cwv~xQ79)`XrDE7gh`+K^TzE6FQltfjqtb?b5|>G3pX-;h{4t+K^7Br_|; zB3-hwq#+q(lSB$5)rm1xsH8D zZqyi43nE%i62&k+Jt;FbBiR~HMX^lGmRyF%F?3eY?j!}_~aq+S@!fq;#Djy z4WpH#b-0XJa%05GQSyk|LH2YziDQ;*RU>F}yp`IiL1Kz!2Pp-}AVDqVP><9c7f*d+ zjY>?lvI^T22N_OnTiCKloU~L6*HS*ww?Ygyo7_@T?8z(R)WWZKpI0rY&I1>-V>4)4 zH7-4k+_|GN(rI|P6ib>LwOf;u?uwuU()>x2!YGa+Uf82j%L=0obkgROnt|%vBR85l z$R+UN9zIott2Ut?tz^n7c{@msMmBqThFsDrsydM~&d|7Jr5Ls9sIVGq^4%v}|FA^1 zU{LQ!5?d}PH8z8O7TAW6UFppvU;HrgrYnCBk#`NfQ-fP6pBv=PRW5<4eJFW9k#mPg z7euxYOl~Q1U$-)akPZ2Brj;p_Y^rCpGKG;nDW6uRaI#e~Ct@p&gux?)F}05v%Z-ss z>@CN#vq^C=e}8qSAKJ$m=j}aFqVY^8^(F%BEM1 z8asWxyMb}?p<{&&jMH}Q=8RKz?{BT~@U7OoC2?NQvS*|Yx5USVhZud-fobJF=V~0e z{tLbLc=>%48<%3Cp(brHa!m$N|CX9uvXz8tO`~@;xo7B`Kc+(6rFtuLHF70V$Q${0 z*2>i#M16(yJ6kbsg8xq6e(j~T^7-%#r3Te|fq)q$qi1s0ES_g*)w`mg=647>`iN4RJ z)1>%+rF^OCT_9UxFH8ZZ08@Y|z!YE#Fa?+bOaZ0yDxUx6x=0VrAFgWtKimi{1z`R^+@vzc6!QE(xKUb8m-GMO29;8}n*R?sNK5GA z`G0V8Wixflo=;fC^Z(%HXz41x>!3#5Fe>M%!|(y}zE@eu8tUawUuD03IX<8|TfnDM z96&WyMvg|9DX9myL>#Qy@rB149un<2n(M_;U8tIyH* z*9Ysp^r!uH_|5T4_KWuWuZjP+hzjpA{?!{mZXu9c0OaNaxp_b?56I00a&v&(Y#=ua z$jt&<@L1y?Ii%Ycpw)CjUI^1G!#6?pYw$6Ug-da@~R4GeE8zkb4@) zbp>)y0l6+ft}~G91mrpbxo9Bw0LcBuar7flZZm6$3x6o5@ibY<+^G~3r>z%bA`@=N zW-F6@&pNtcP0u3#ra_#}EhMCM1m_k=@c{CGfq<;E05WGMEg>Mz5}TA_39x7GS!)ZR z4+}8SFL601QanwFl#@Iqh2+#MM%pC#kk_&eYo;9QpQO^Jyp*Xfq;)vw7DP`}^OT== z5FkH&AV7{pP&wnWehH~3y#{xVzrmm5dl^Fc|Lpd^S9!etyTI#x2gv;loK+XZ=@`2pPKyD|H+X3W0 z0&?4d+%_QhA&}b&}c&a%+Ly8X&hC$gKi$ z?*h4%K<*tNw*ts52Xf1R+)^O-HjsM@$WccT*W*8nf%e{1NBuQiC^Cjk0U zGvxKJJ^!!lbhg11Uue_s{pl7mH)rC zEM$|r3M*^%`G3uneQE>X|6g93@-1pZ-S<+nqBbG^|LUpbA*NItp2~(nSyP)X{r?|r zP*u;U=0GjF^8a^jux_Oiy72#ZZLUt`@>TGKufqS|wK@MvrK{iz|FHl6qfMzt!Yh{y z?*FeEc=S~ct5nJgbyiAA0xgnIWE663ty(2(73%!3|No;+sdvj`mFxU} zwGfY9KQt$(E{(fK;_S zK)g!VK;<93u55`!SIv%%x6@1d=PqVrH4j>*zx({Z>WVpP?f?Gye{Gcf%f1R9^8Z(B z%hpT*rT|lbDZmt93NQtj0!#s>08@Y|z!dneR^Wfc|6lDLmU_|~aNYPH_#^ygejz`U zAI*2;|EsSss~l5+DZmt93NQtj0!#s>08@Y|z!YE#Fa`d!0@O>)S87HRCmlI7fc)Yi zTOwZeaypF=Kws$*GX5?fv0FZ!K%xlHSOQ$7v!v*KW&b|1JtIAdaD<9WAeRp0(tsTO z>EQbNEd^+AIFK6#jvbW26A12+*3fV z3y|v!j&421anjJgrl2|9k5<-|j&jbQ66M9L ztkp;#lDj|yE{?y*&*6{q4t_PC&ByVDUdz3*z4~|sk_R9j_uT9`&2y+{q^Hrd)T6*- zkw=C{H;(|1JMP8qYu$6)`@09bd%2%>+u=6HE!i#Ft+v}WU7>EdE?d_}7pUWO$F-Za z)3igiky@j+R8yc?q{+~9(*$VlaK+qOTF5_mttB7x;<$Dca{2o%63Dd$a&3TI1dvl= z!MLnP7|>oQkP88F!9eawAlDkm1p&EMK&~Z_YXRh*0CIsqPI;HQybqcI?KK5*O@Lfu zAZG${jeuMLkZTC!8UVS+fn0qcR}aW3L9krj2TF7+mt1XNzVw6Db^DQgy-178d}{)^ z8bGc(kn;y}$`_u?dKiKBcpzs0a(W==2jqN#oDY!m26E)9T3TG{>NU|n)hNdHzG>(vnk1YHeMt-~Hj1;hKS0CI_C;yC z@&(`4tA)Xl1;UoQTJsuI*BMgdT>kanj))s>FU4K7Ik^5e+i}d%kE1rCrGo#BkHy6^ zHsG{X7|*!R;S{URJn`ICaY{m4p=U@F+;|`%GllNS!; z*Bdu3s$ldy$I_fQ^!=d&_=U)Wj*L$eP~5@yaLc$B_~p|l@h|Td;hyWZpfN`qn-dTF zi{GW5MA`>c3!}FHXmUwzK@^d&x%VLzLCGCiJS1%;=6+5M2y&?b0a)! z-yqZ_{B;y~eKej_P$;Z=#^ET6UW!kyU*7Kaov%?(XFGA9Pdd64XvOy%j6$BEZHFJ@sGgAl4_!-zHimxr3nT2hmBLCO0I>YaoS(; z%GU?tfnR*(h#z&!UH+!{h6ss5)_I>7i$E$B!mmp);#(3buskrsTk8sH+ zCj|fIE6^{NtB(AiH={GQ%VVtJA~*(xLNI9;>X)&p=cl8yxWwA2YWRaHTBc+l{@Q2r{`nn)QC+{TS8BZ z_o6=%4!qa_^|@RJAC6lgTNvziS= zVM7a1$<6b4<+cIh;`B*qbtKD+MUkB*XDBm{7=)X+78~gyx zcl#N?W(YtRFSm;dTabvFX5Z`3_fi@ze#^`J+Y{69ygSpympXZwyYC!{pI@;IMWlpc z-H}F)2K`>ZTRR`Z$8WAeZA<)wxAiaL13L@Q(OuI}UH2k1b?!_d`ooFh`h6|L)q%0N z@#jyVfKIE#+%YZDSIPU(3DgcX*p!NL4y+OH@7J3{b+6<1hc>`XJ%dnm?>PK%b~hAJ z*c3NBvs|cuv6?d{=nDR3u^Tqea-d;n3iDrVX~oB$e+}6>zK`oVzs7N=rr@;a4v2jk z&%|q@_^40M=~0h+YlPYZr-+=xAWY;1bhZDpcyyP?oIN&pp=pPkq3)sng1yl#p~VFY zKELK2H2cM_LW8hrxX0sLqWlWBi!p2baHM52zByYfa`SwhpZC=ZQNvBn@AOaNRR`Y? zX0&dC&E34Q$8@dOM>|LOG2|VwU)~JIjG20KO-&Mdcj~iZ=Ku||BouGmT6YgBxoQ`4 z@2$iKzukz|KksJN&8_QPxB6T0*U^V?&({*fQJ(8{m#lwnQoYbMZFgGiVn5LL#5&T27u3ppm`-QfMmq($#W`>%W}dkEW9^ zSuIDW3CPJ6Qt3Hy@Czu`Y$IdKbuIAr1Afg{7L=_ z`8%cjs-fRi?3F3N6krN41(*U%0j2;`fGNNfU08@Y| zz!YE#{EHNzj&a1DO)C%c$C%`mX%Kb5lhW-L65%h#q>T5Q22qzg$uocs^~ad#y5bQ! z+#h42Ytta=Mo66hv?N7|_$MD#woQYmLme6Imxvf?{yTMb({PfDxTb86I)W>1nB<5Q z|L+EA|Cbu1_W!>~M3ya6fGNNfUgVK z|El$4^Z%>Xh0Xu3S{F9|ziM6B{Qs(TVe|jl{C_t8pUwYg^Z(iW|GzZ>G?Bq@=KnvzY`!(ZB}+#>U@;tYvW!a9*H$^XBA zKg}1&{{PZ3wlD>l0!#s>08@Y|z!YE#Fa?+bOaZ0AJ}53<=at!YVry0WyKb*i?R*e3i> z8&pbJo1?`d<+Iv?EU6jxQM9;!+8`}qtxERNvQkq1qB*5}kCofAWLs@^+g~(COIN+z z8odrdi8lK~m+_Ii4_#kVxvjMH%+%Nv>u5`Ya(VyWRjyEHrIhjw^cSy4g*ub_{X6|eN)x&Qnt-7|m3QniXD z`)h{EK2e z{VR_KNGGhxPY^6Sx3WF@_&@rpJWiUBlK=lD{wMwtznDD#?;z;~n9QO8O7gRXDZmt9 z3NQtj0!#s>08@Y|z!YE#Fa?+be@OuvkKc_8Q|9o~eQ%|mug>9DQ)xS$;{xQoXsTXf zm6kt8#_gqr9`T|_l9&RNs!mK1qB zU3$iz)KIq2s2&y4+&FutMV{X;B~s3VOSLAYrKd^fNU5s5q|Df~1o>Q=;=#pPVv|xV z<&1`lsBm1vg;voV$#BVhne7aV-AW^lsJX?Z#HPhpV&apn7P(MHm67KQNQ}~x zp!N_vE}tj8Nb&zx^B4J}q}{)o?`{}oILt?rwtpGGHkblT0j2;`fGNNfU|yXsJ@Tx+;o#0;Xt&73cnkx8F&wVZ@c zBZ2#fVN?6Cv0QUGcN$;NrUa$5*rbr2@=$rz*Ody%aeape@mzPA@s{KFRehpy-rf@> zdpYBT-G@pv>Bf%xIpdPu8u#H=W2dioYie`D<3fx&8laEkB9tswybaBQ>jVK$Wk`Sp9!97=D#D|7K8p#ir}{|LTW{62z@SmFbu(N9I%0 zh2A-T6#xIxw&*xBN1n}Ig{>;9`e<98ijC@(Y`KpA|7eTqk(!k(viSe1F2BDw)FZ}9 ziai|vpH90c*IrAT`!OcEHVvY~@zRq4%A5T1Q6(CnX%M~2q_r;*@*&fpa(lGtA7i3x z)1Zb*Ii&W#Kew4g{Vz*k8%zPF08@Y|z!YE#Fa?+bOaZ0&nFvt8BQ76^S2DcSRX-|YHWikz!YE#Fa?+bOaZ0A%a>hto;+%d%DN>u8P-+412t^3b{(0)WzfoQ9rXHrZZH*HQYR())2*n(`3u&FP2& zWr-SU#go%WB_v0rMYXIU7U(u<>$}l${YUQW==_Va<4SYCY+sH~pxP$(G}IHJQQ3{E z08@Y|z!YE#Fa?+b zOaZ3AA1FXu;u`Lcqxn^gD5$pGl~{yIzkqvr??G8gS=WXV@2@;oA+_=QCkd$W|4d~i z)^eRVAHy}?&Mz_yHq_ux7}gtl@+Zi10MZN`i3eyhTr^B3eFKrQUqFGO3E#%xW0=h1 z1C}YsHkblT0j2;`fGNNfU<&*>1=`93GSxUsYMdn@!J3vdBtAVY(VAq7q0z8N6sv^v zq@?sA6tHBHC|8t_LS(6lL((&(NL_L;tZrFJNyJXq*mx4GYm6y1J;9P9#lo_XXxC}+ zmLNNcQf*62&rG#s+MbL}NeOz^nr7|!Y*5cOK_fzm^-RkMtBn{V=UBqyE$t%PwvCNT z46`I8T0(;3f)gS`+eSuMBE#Ym;^W%24YP!XTF6-y1BRK}r)8z2j3rUGGBVRsGwf0^ z?3UDwlvq0{l4;DCg!K5<2^L#?rd2NX*s;VwYHaq9xKVZ~pjUWsFgf>?tk^WWb+m=V z?2^s3GG*B;nL~)l5!M7LH6|jmRd{5p;PSsgV+YYETlsKV83`n}grHcvDKt1VA}F{m z`R^MN);=_{eQ4X(ZNefV!Uvk@eB4JwJ&R4E(az-PXJakxP&)v*-c}Wxa4}yW{J&=PaYDV zWlv8`q&H&2Xys@fE+dxQ7_rigLZYo@2ieo@u_-~xR=XVDoY1_L&O5KcNr#mJWLPq3 ziKsa)zLvaUSA_m22HERrKgcQcT`4tkYpez#ggVm?bhU^yCNvTl4wmMm)kaq#AP3qYEwK~g>k5)2erB2p9oXwt|A(ym@s!rsLGc;~lDMl?FyX83b zY3%Pl+4_eia%o&d#*;687giF z$Wo%3X19>I`NVa+VwxOFUm0JfoEsNP&XE|JhX);6FUvx;M(*H;thtj&_#_&?bn0PB zk>}aVk@S^awq>y^D0rh-qdKURt3hkrjEl2FHR694Rr7qu}Dx(bX z%e!hC9sH-6scFjSekD$6p;t(Alb+F6!M^-#KgkWBEYy;>bX$^tC9zC(B~M8eB~4!; z0AOXB=#`#D{wt@-c}u5r^z%mA(sB*B9R3RbE`N$I)XV^#4;<_xM+UluWsf4vE*^?Ulf6`nX#hjwzW99Zp%h_fp zAnAc7LnA59;-M3OX}4l{buB?m6b~RRBhx&cKNBIW~9c3q~_g;>%Z~@ z!UQ!%?pu*?WsZOcM|&=$B+AG=26F#^n&MNbA3#mjNvU$-)$`Oo0gh`zD@9(lTr?Lz z#{Y{A1qK5@*l@=%ka+%w^4$#KhK+`ahEx1OG8bSnf5wo;cO^ao0fq*WX8>E60!#s> z08@Y|z!YE#Fa?+bOaZ0FSd33$f$i7UKw^QXYczM3L zdZsecFZZ$1G;gJKOZqD-<)L^Oc$Hf#^F*j{cDaWEwMP90Xcw+(UkwZ3QNjL0-ULd! zS|0hYK&iE-{U&N1em|n`rG_x5FskpRdh5%bLJyav;++2S(SE9>%BpSk0Qr8Rsg=k3 zX%DYjF2y^b008@Y|z!do3Q-HQX-8fAMo#w8# zR#`m2e<~iJ^>=X$Nn}Dff}z^Kp^o}{a~cv)uq-U0(zih(FwzbJCDvfGvYS*x;{Wg9 z@9;bLQvNuZ0YDEl;7ff!^&6~z$8Q8b*{_Qq$NL!y^bYTA{Uz^Q9{Y9k2=KV$UhKZs zJ;%Mjd$7Bg`)RiwZgbp{-KgUa>B~@D9pck%WMU4ns>vZQUhO463bJU*IK`Rd5gb>> zDUZT*$yK8nxa5pLPEo|AJ;f)&C8xOKxa5>M7A`qoU_I!=AUT)z6pt5|oZ_|Ul2fLG zx#Sf0B$u4rqsFLvQz&;;1qqApC#@A2I z6|PU;AaolyS7@49jB8GqC@#96FN9wG37L7d7* zZ)RF>O4t&y;dv*{o;VH#M1O@cKJ!H<4m84vbKiH2|Dc^91kG_IIYaU3dtsZH*;c$y7`ZHPoY!$ovw!dPK*hy^#?l`5ECd<(b8tA|gf zE=F#1JwLmV0w6lL^VfodL~kKUT^i?{jvq2k%O z=%n*58Z_^)I-G$O>W?@cP zeS9l+3o07k>l*( zx!Ah=H8iS5Eob1qdE&_?NKDDOk8TGCI%{t4C;By5Ee=5OIDcR~D%sov-#KCsE-kC! z2-p;Dc267?wP5s6T<7w>4rorCP;=@^p-t>h$k?Yy2v{=#HxZgROZuL|v-aLb3-J^* zZ`w(`sNDu3b9E=|UHvqU=)pM`AAeW$d)kQoH?0sxytNm7b68`3Id(o0->HTRXU)UW zi+s&*cAtz+eLqs@=Xn$LzPKMvip|C`hgajsw`Mq+8Ec`gp5yR=n3vJET^rDEKfQ$e z1@1$lv99^m2~$w=st|Oz>kq=}>S1_gVGXn}V0zSz{9<$~a~1yJl?5oP#S3_S_&ccZ zR1sd;-_yA*!QcE$=63Od`6t}(etXm>^PQ-EOWWd|&uz!23bx`pyIVQ;jlGO^#_G`0 zx4#yKex^4Mwr@vyoios@+b)RTXr|=%KE46%+^7?F=gtxW&wVIX|FVg5@Gc(B>|1C0 zi~d9KxBAw&W$z96L6>A@1Uh$o_UUg(DSHHFwWwS)8ZkeYbu3%7B7|B9r30fi;!@B4vHA|03SJZ7nQzTUoif_p?mrD@tM#M@rKrk=*H!csFiaz3YVJH zLj{Q%pYgI6l(rv#q7?>=L>RScrTkz9H+7{27JjHF73qEXBJ!*Tcq6 z9ngX&zek-D4hY^$?uk#_=A1)UWD5Pf@=@HbF6Qc<*YJ+7-$CygXQDG_pGLFR+R(ny z-=g4k?l|zh2F^~Y+i~gBV{lkRFluqC8a|xsiDxEF#b@_y#W7DmKws|ajK3_=I8SHo z7IWtn<85ybMuuOOBWLOzv}9Z-aY`RIbN0B`(c0{_;;-E|;hYEK>CYQISIG@j`gKD; z|1})_eWBrOWF{(E{%DSQ=tDDkL+DIilAIQsO6Q;}lc`PZL&j1s?LU~|9v0d@yiM!y z@W?iiVFOLm>5O7;*#p}alxVY;dGgBzBQGJwj+}8~(XoA;arzsR5{;){dWyxU zBa@YP7arz}6F%XLd589q2TaZ0z3Y&{IPp-4Cf(Sv(gUYj7$+Y(R@lNgZP#wjIA!<# z_8Jf0YR!Yf+6p9-ep&X6)Zx}7OMF~JcxZ^xp!&j2QHt@=vJNFI8bW&7KN$^y#Vn9- zE*7&umO=SxS~>i|e_+gl5E2hV{$y-r3MHHBXJac<7}=9zBeXJwldX!;5lB3dG~&8H zM2e6QF;-MlC22|mNYv5io}*kv|3UU2veS)l$SzR zBQva0$kc$}S!-3s528&7UoIolni@-{hz+-lBD2Jr%h$$V`FzgEB#|t#N#KvFKB%SG z0c0Vqhnn(+5?h1p-=+I47rz zRo{nASqq4@fLIHNwSZU)=s&v!gd9KY#nDMiJ7k{m!_A%ryli724ybq6vF-hdD5c3t$E10CP)^rSe2RWEN#7-O zsoc+2qpEKb87%7`X8p}XkFx&t@_uvH-(0mW|C9aAM2c@#uZjMtMlrVcO+!b~B;j1> zOJZQLQJl5?0UCC;FG|~$FZi}zEewt<5VqXan%AJZ&X5}C@~{7PMBH$DDej`p!S%n{ zj$@8~9JLWG75r~}EH0k00jI4Z{iydjoMP3PC!X6XPDyAh^bBc&d(Uqyv`(q#&^4Nj z54)Suq*`~8{V8{R^1^}qdgI1L6^x$eSeg@uzCUyTzYuxQk@0B)iaYooZW-4CzkK>6 z{^i{w+;iO)H0EeybK+rt@w?QMD0{~*`7^$pfonfFmA|Q$4d3}yXa4CxV|=n<2wIi! ziE!;&lF;0@2-ltP9-8x2b+ccio_I5_$2PB-IQ+v=__rO)@rm=jaNegsic#nn{K}GI zd?qUweU{wVJTB)Xu92LJH`f0E<@{(8jS;o+x=}vPQz_4htDcO<^L{MABT70(<)d$e zdCi{_KKO*F*aIVvK{@#G^%KzxpGS&GXP-h|IXS4#&I>rt<|E9-_wjT5S#e3jH}cms zaTC5;d{=Osh!IjOnH~cAEP5C^Jiac9suPEn9(o3M4B3U6 z&#Z}&sT;2T=23Bd@7IKFO%hQyIw?Hfr6n$@{j#9{>L$Lo%-?xFtOc4qJ`Y)SQE04v z2{LwVj0Y~9id#?o2$y_vLhx_C0{vpS>d60jGdg3tj3yMHbLbZN;nOWAI(EjFip$6JFpUZXd;kXsTm2RH+i+FdWYk3ym9`E72)wmV9 zu_?*iZDf5hsoHF0-SCZYpg05H=$ng%b$sCXwstN)+HfgOzgS)Tw)a9|#?-FDh+Va? z`1SzQzvX!J%&Jy6tJy#lHnb3x+&qt0ZW|yjPM?HEUdX{8J)e*FH*ic3db$(3+AT-? zb$}j?@@<2R{>#L>!4J@Ux1aHAh5&T&a=WOo1&OF>_Pq{$FQwt)x4g{1JuwZ>yE9#U zsgswv`_7U0`4!7hL`o>u9ckof(C-Djweul-{N^guw!}|(TmK?Hu(JRi-8Bu>buU6w z=gt(OKb$D8-`7H19T8{kcS8|{O>x6B%Z2(Et2uLmuHbJLyJ7Pz2O4&!F#pAtR($OF*O0B_ z`?#+2YaDlK3Ql|OfY_(;OuQzFkNWhS9`(4lMyNe-ipV((!bDy`SNlJUM|XM5*<*tj zns&Gu>K^JZ*c;svT3oQ;^K0HgvtR5gGzgo9dpy1+%CBI%7_-I?M_MN1o3phdH_zAk zd0)K{HQeOro z4$vS=Lh;tEb@!l>t9CK>-b#G%+l^@b^KNF{+`7(ntG^Y09eoJ*d@Vs7^?3=}c?jXf zMVnBH=Urh|TMb%V{ZsM8$vJ4Io5aq!NEp#`1|Bi}Y3%JN z5_T=vD0JEXfe_nggJVG*Cz@S)5Z8LV0q*!@OO(<-7jH8@gJu=JiN<|rMR`{{n`?;m z@p}bERQrV#q^mmxUA;d+Ts5%-y?Z%7YVo#Xj+K4;2}Rp;@f!v6qV^m)Dx7#WPuO3$ zPT*+2fb;`O%N3J8>*HjO|1=WwKaw}{r6dx-B149u8=32WM_;U8tIyH**9Ysp^r!uH z_|5T4_KWtb?I*SWm-}Y>_VEq$<$RC(Z1$PvGt?*2$LLe)UEsaQJHxx1cYyaDuVSyY zUO8U>2G@+w+=7p~rHMY>z%3fgYU4are#c)7*!;N4gu`OWg|G z7P)1(b#n`FyQ3@Ct<~k|`s;#qUb@rT9ojkCWNoyzw)UE)P_tZeD3BWh3FLYJx$Z#j86ejU$UP0@x&pbUfLs?K z*BQul0&*RJTr`j~133ibB#$PtxcvTz0&*RI9Che%ov$+9|ETgkL9-*T8WJhCkof;s z^!_h9$TpY)OaZ0U{x(C0WhPe3~P zziIs6t9<i;P76SxE9eg<+s0lC{i?iP@{3FK}7x$8jg8j!mR}|hxy3;4%|GU7zk$SPxdvRR;lIWIpVr#-Ygzk$5oKNW6TAWB z76Q2iKyE&en+N3bfZSXlHwVbg26D52+)N;s3*=@1x#>Xebs#ql$V~-uQ-IuSKyEUS zn*`)00=Wr5E(ges2XfdIe#Fd%0Ia>+n03CJY^ISY_W0CMp_E)K}W0=c0;ZU~SY4CDp@ zxtD=l43HZL}AlDDby$Iy`0=XA}-19*0IUv^u$n^$ty@1@aK&~f{>jC7t z1G#5_TsI*1G?42Ggjw-2ZNTe?IU(e*S-1wOnkJwg2x>&}IAoXCU_zkh=}!ZUMQQK<);RyAI^8 z0lBL{?h25*4CF2WxgUYtMId(p$dv-Q^FZzgAoo3xI|t;>0=Y9l?mHlN8pwSMTJ+%X_`6v%xE7koz3S6$7~rx&1)y6Ck$_$n6Dkdw|?-Ah!$16#zLWki$Su1ab}_mk;DV268)r+zuf3 z5s=#sItF@dey=b}a++cm8;flVO;R{1|(gP4~n57RV zy#buz3;qlJC4<9&^{Wjd^cVTj{2apwLw$n>|E_+pK8~-?=dqrGG9}ptQ-CSJ6krN4 z1(*U%0j2;`fGP05r~qwa`EfdHn%$DZC1u8@B}mOOn(oVKRD z*O${t)~T%ux#~F$Ezj?c5Nk@#YQ<>2ZX{nWT(VC0NsZ!@t(LS3*(yi8Ic-)NM-P_s zKAc?742#`rFHa>ZQc$iz#dJ+vN^DxZtge(?maCSgQ&}n;@u4*>%T~QgI-27{_Q_Qm zZb`Iea*{e_)=Ayz`81CT={ib3RC+&7OH&@=y*V9Gpe#{C%i_stq}<4nN;y&s50%@S z(-5vKyK-e|ITRaD%9f-T4Of@jLE``KU{3%j(}Zm>1(*U%0j2;`fGNNfU^`jNj`+(qv% zbQ^V(bua6}b$+^YT8DPNHbvV-TVH!i^Qq=t&8wQenpPS&%}MSVz1V%NJ1vIP zn-JFXtH@XJop5PSnatsmQznYH`pLP%_30agZsX<(O*4ye%?T65MfdZC(5pWo^N|&T&GZ(|OMD$Q z+t(3g44xrAwl5n`ym<jOTCVpo^K^qfAts&yT>8p^-|&cH~f(0%cY`svtkrb zC){}_c_+HH+D#}O^tkiQObbp4TOu|*@5I>?$Dx4euTaKkzUah(MmTZq`;PG+v=fA& zIgTV}C_a5J47CY;MZA5aX@_frW@6ptq3GAP_wkS)CZHQR^U$f=ZfM)oJR#;-FR}Ki zY@GJ?Jv`t>+SuLxhAG@1ubv!SpJk*H_5i0(`nD{Kz2 z;D)XT;A6K&509gPF*RqiTw!~`xFTQYbM|( zLKA06-&1(j-rHy)o`U90JBb&y+aP4F?u5OopT-eAIOpQy?}~m;8?pbU6~c(O_M&eN zYs@dl&PU=q)o|ggc{qBJulddHlhLW~M+*HsZ=&88_oGR%**NC#Y8?623`a9#E!5R> z96k{9GTOFl1N!Z!mvFzpeMmIcHNQGx3QArTf)026L0DZq46iJ#fffc#kGhdxjBaJF z!XLb{0A;m!0k02#2Nj+w!YliGI=3bGo1e+tE?zMIg!|oZkNRZ36V-2NTfFnR?f6u| zR$OOyE9btkm(k8x9a{SK*TT@x^yb0#?I^Ev26}bd1@Rlrl>FYuH=vyxb;9o4Swi5s z55?+VHgOK##iN;h>r8*qe+d3o-x{~{{Ux= zxYT}=`+o62$~s~Hi5xMbKj%Dp>MUAWzowaQuteDX9q-IrzZczD+ej?z`4L`pZTGZu?DE~gcZW({5(|Wv+L;BK_xi8_S4AO^DX>-Odu-my#?t?H%7(l zz7vEEKIVYW*Na5~hK5_SGD3VXbki1zhdig#q0@v1pR__BWh%H8{GhYmU8@zLTU{Qm7~=6V-m z(d_S5py{*TLQD4YV#7c)Uf8rF-qd3e63)*-5yKwfBd6}7(wFNC#veFzFTXxM6Z#?E z&^i&_xEvC-a?VEKQj?nKfS4!LySfk$zq!SsbVQ zidyct+we+1`LYDyxk8#yi?!02W?d`$H@XK=KOud7ajO!#$>EmY39``z0o4r>2wfiQV z^I$x3{IC~CCoS!edBzVnduA*WbG*$vr%uK9_t!Ts7`|O-7I_JIoo|G+IhW9(7te?- zoh$LOje$6z-d)GG_a~y1CMzA2=Iuc_T|+Tf`CEZ}F?_RnP4rJSim|HVP{7toN_|C67^G^pF4k-w&i zoAA}*yMp6HjM$=cBRp&0Ak-!Nbrg7gG@evYD6D$M;V6n;ichXz-tP9DuTf8DJ8_>+ zI=U5T#rGSGLY~`e2$R0}0G}&5hI3LUx1V2UqR{uiYBZgETCF~^SzH^UMMvCv3TLNm z6RvL@j(>KqhCb}G3jZ*Bpm3@B+i2zfS9~_!3U)+ooQV>aY!LSNN8n>gHPKVwx9afH zgaZ7-#;H*y*TT^_?XP&{>jUw?FTQfb54?iU^bpWz(ZkT;@pVyDojA1g&@;GW$S%}; zW=)Jt-Ej3ckBaMizb0&Jl8Ca=N#XG>EpbWhmj(S-H}Sn?{?7AZEzs=odC01ZLSyYq zkg;oHJaFMu+hHr!e#TocU-&{1T;{(UHwR7>&hD&k!#p>d>y%!2IrgjxZ?5c&u zw+Ep9Eyts0R<*)e%?6^dp@pdA=6Sqw+W>KK`Xn^+LJt1u`Fy;;fn$2m)1A=OZaLzw z1N3N=ZyRLvUnbrSet_n?{fu8T1fYwT+eL*fNJLGu?{(;VDGe9DyyC4R!&`WNwmodxLVu4$;Qdl8yC zccu{i;Y4x$z82!@z*yY)^CwV1r&VI^n3m|P&>CM*YW#9 z8{np%K`6R+9R4`F8;U4wiW{C;F4VtR&6yK)1%I>H4Vz~<(6BRw`7gG#;$zRhhHM?* z$90`woELhXT5M9yIlCh`Kh+W%QRy31qE9vi&S zw8PC%_fUVq-sqOl;(`UAU-J%{{bE<4LD)3hoF?og@4h@{ZUqZ-!&WOuf0LCJDVe^;xlV zfCgC-inng9y9bqAwTrp;R^o%-Zba*!cQfne)^)C1{jK=x=tH>YYYF10&r8tGLkKS} z+JsU(?+UZpYS7~9pNc0=&Oz(m6NUIgY2v)k-$ze`-i{i+&K(6U)*umKp=F@Iv*o*f z&fk8XfNv)+7k)0Sg}N_~!oCB}iv!vWbqwp+&YTyF9V@@sBzDe4!ib(T@QCS8V{b>1 zuxr6aq09acgxEeC91H3=(d^QLxYpwhaK|TGqLlu*c$@JVG^_AUH10bq%DdXxTtlpn z-zzYp+ApLaUEL|@>ir4gs);4&-OKq=i?m;y`zrT|lbDZmu?-&3G$3?`D+{ZW0^Wn5bz z*9OQ%06Ez&8PNA02DBFn&30=YUst~QXPAB3*&dnNFn%laz*0gvL8k10|(Er+;H-iP^4-iv&$`32}xyn7jX z@(uV>-%tGp>)-Jk!B6(<;>YoRh626AJ6nIrJD10P-8=$3s0Tofdw=&}cQ5zTZaduO zxFx%leWJ5bdZKO>qyB7^zG_|AC_NjcXQT9Nl%9>!vr+p0fKht-^G44lq{nBaTGH&c zAZvoHD!)Y=ZHiXs60Me$1Y1yo)n?DM#%0;9>1kt3u}KzF`_NXV1dA;`)0!bAn%al7 zGFcPk_FTJpIyB zEJht?oUyy`FlU_b31`eZv~NFWoV|P3A%k(^p%P8Hu_M`EvRmUm+-mIf_3jqN$%l>= zwlGfHwVN|e*}cEL#>2N-^PsS{0?DRdmOUeNxHZWV9~TiG8e%jkKM=VoNUQk)x@?@MB%9wBsalc zw@MFiC}ofURlAA*?HUPH0wGkTw;TY=GVAq3S#|AQcGs3oFrr+5J15i=;=qv`w+cl$ zRDx4`y6J4y zopBkg$71X!s#mzEdg5BM(Qtb^717@jrDCtxZw7xN@X=tF^B@_J*dgv9t@$4rT(AIz`($rbbHfOKpU#XBHa7I$Q`EshXTfh zGH3HqBH}KX9Q%D4+pab3YSS(*emk>HOJVyw3qsEgYe3SBHY;9?Ruj$+}Y7%;f3p%`W%Z~=ss7@3kNW9(lB)cXV*^? z95t4&-9^`#OvVaCBGxs+OrGAA6quN}UJ5hDV1O=_3|&bXPBW&DE7mZ-nmI>iP2sb9 zKkxryEEq-h-zILP<1Vmp2;*xSg^o1f1Y)?N?OtNC@0>pH$cHe2lPM7Urvt4805!(H zgjp{f!OIk2q}vsb`!&_DEPMP`llgcPCiRdhUmr28vLp>7Rnz2XQ$K}e;M~e6C}hxC zmEne(eY3goP_Hm~v%Xf|%PUX8KfWb!P^lVxG<3()!iCeIOTi?zF>v0GzN><`>{>f91jzmHz? z7jb=#Vi*+@m_)}d)Hs~sVub&X*_0amrx^I04%Kts<25I^!Jn4-PAOr{jLVyq;1PB2_fDj-A2mwNX z5Lh6fNzHJ61k!~d_Soj?!aJHgE#p(6;#2X{Z3ys=rc1-ARmKlT@M?2?T~2{R9(c96 zzVeQyfCF(mqmF;z1WlwW)sIz}ck~Gsob1RPDrwoCK1ynHedQf=dxB|CRF1+RsQ=jn&I9jnZ3wukegM?B45i{>FRXu1)`FqT1VcFo_9CWV z!7IuhfDgU?LD_;iI|Awds5L*A?Vp!pHryzUKIfqr{su~oD@AWvf?;21&PH}l12Bw^ zSFj#0}*ZPxq{D!wbv!BKu?~a9+hB0tk zYsiiM&*-r>uK{6pUZG{SY<Qp90m<^MBQerdtXSD{iJBOn3j^tdN@8byf{6(FjW zRlB03kpK5CVh%AwUQa0)zk|KnM^5guvND;JT`EcK-a`IL8}*c%zH2 ZpRY5viA~gOe)yN#_}M&fKdb%&e*$0Q%=Q2P delta 2441 zcmcImZEO@p7@pZH$M$Y^-@Wp6mP(g$w57Ip-MjYgdSJY&5rXD=MiLPNRRY9TXlbl) z6bMH`j6o!YF&!nb<(Hx%0lR@Cg0?CeKfn@=4Izq6O$-u#GzR%qz}dZ7QVi;{gWIs%g;3F+Cqq6B<;PrMHFJ;F4tupUuCTVJh~)}leSCW} zP|{6~_@!Q;NBb7{*AiVTLZdJW7u1v*h95n%NUkJ{yMP`K*3gftC%X&Ky60QkC=U7k z(-Gpn5gNFB${MF161M+2qM1bhO{RY=okRU^9iW5rUSfyaT(UX8s$9Y)=E~~FFb>f7 zY96PVkV>WCqj)-97#zhCtqP@Rrg?s0p$KytJrSx)PZKlw7K@OC5=ixa3n}=}d(rDx zUQhyXMeXrclC|Cqkn*bDchq6Blblo^CdKM5=v7c%686(OS>%|p#E?d_k&6bR67Cetj@FuqXJTJ?ZADM8#-DLx33_p5#Lx;Ri$cVNy}sbu>D4@_IDO^% zA{?PZhaO}kiAl~sf)5nl41ioB4&_=d;Tji>EuV{hR+-sY6V~<)5|fNw2CU?85?=?O zD!#UA%{iux=6p#!#EB)x@5BI@aHJT?Aj28h59=Wbd3a1+|KXn5@rkd}zE(zFaeV>p z=&NYd#j4}f<|JQp-htcRN2owp-L^7v@^Vq5Z^nJjDQ8y^U%O~yU#a1&5@%Id=TQ}j zxx-q`#QNpC%J9H)!GCjM(7-oQe~wLkUSoUsZm|{|3sAr3R_gbA?o9rFr2fX-zO}A3 zH@I)a6LpbbxFH&g#o~2&;<{|^>rTd27!x6`6c8WLr3Yv{mF}N^(fZc3nlVs3Ddzy9i;SF@G zU31plm=9$rzAChQw4i}2p7*>zq+%f zlP8dW8k3MS=PT^pA$&i}mP%{b?g6Yh zwm9|FN~GlP@G&d((|1LQiLUa!GRZQfQk#uX%t0t1s%0S*L}xidt2igi;T)vllDdPV zR0M<20|_{*UQ@rw%|3&VE9~M=cvx`RVZ+O97BiS0l4en<=~dQs$Rb{ob~G({w5X*% z!?yZ(NP-M|^2#oGfAwa_3Ep~py(@U@EmzL**1Okky+VCDJQy=BGXbpG4bZIGe9Fc9 zeOdC@6#{&%rbn~IWfjCYi!P|5#n?^Y^bDdv7n U$Nxfkwhu|$e76@Q|D6QsPgkof6951J diff --git a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/indexes/381abe91-f939-4b91-92f2-01a24c2e8e3d/lock.mdb b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/indexes/381abe91-f939-4b91-92f2-01a24c2e8e3d/lock.mdb index c99608b77f76ea52301126c16a6f78adc622d786..5fa5e6b49e4f2cba646080a3185fb08f08ff8957 100644 GIT binary patch delta 115 zcmZo@WNBz*5x;lf{XV7zof;wx5WohcHY77nwAY;|qcJf-WMYE=D?>q40pr9#Z7_R- ZeIcA(5R#9T{b4FXe8V;{dlOT`KLC!+BKQCR delta 104 zcmZo@WNBz*5xjTc{XV7yeH}pt2;iG&X*|)zhwXscXNUXM69cs-F$uChyDtrAe~Wj9 Yv$x%Mg0rv5BgDV`w*rfAVruvY0CVam9smFU diff --git a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/tasks/data.mdb b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/tasks/data.mdb index 226be2332b67c1f376e37de03c5ccebfaf80bf6b..f2bcb1b8b36f5e17f93dd60d4304fc39907f1138 100644 GIT binary patch literal 225280 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 aQsDDjff@bI?STJpv9JV;{SjAS|NjRwAVj(V delta 6380 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 Y@Xkfwgm!dxXRSRnyYoj}_KGt9KafYQZvX%Q diff --git a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/tasks/lock.mdb b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.ms/tasks/lock.mdb index 6d38eab089708e3c50d476c7a142aea909c6b5c6..b8e0e358dd589f5c229210cdc998a1052c04878c 100644 GIT binary patch delta 78 zcmZp0XmAj}ci{a#rUjiEaSRZ^45UIB)F#^NPL$D@m>@E-L4cK^AgX|IVxTsdz2QU= PoL%q|%--z4ct8#Sgm4!{ delta 65 zcmZp0XmAj`ci{a#rUZQ*Zw3fpnP_P|(Zz@DfZKn^`_&TzwI&~66lS(UFs;GN%?^wQ F Date: Mon, 7 Jul 2025 16:42:50 +0200 Subject: [PATCH 4/6] Fix existing snaps --- .../kefir_settings.snap | 11 +- ...rEnqueuedAt_equal_2025-01-16T16_47_41.snap | 326 ++++++++---------- ...rFinishedAt_equal_2025-01-16T16_47_41.snap | 326 ++++++++---------- ...erStartedAt_equal_2025-01-16T16_47_41.snap | 326 ++++++++---------- ...rEnqueuedAt_equal_2025-01-16T16_47_41.snap | 246 +++++++------ ...rFinishedAt_equal_2025-01-16T16_47_41.snap | 246 +++++++------ ...erStartedAt_equal_2025-01-16T16_47_41.snap | 246 +++++++------ ...ue_once_everything_has_been_processed.snap | 155 ++++++++- ...ue_once_everything_has_been_processed.snap | 120 ++++++- .../tests/upgrade/v1_12/v1_12_0.rs | 58 ++-- 10 files changed, 1117 insertions(+), 943 deletions(-) diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/kefir_settings.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/kefir_settings.snap index af7e82c8b..3c97dbe70 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/kefir_settings.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/kefir_settings.snap @@ -61,7 +61,16 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "pagination": { "maxTotalHits": 15 }, - "embedders": {}, + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "pooling": "forceMean", + "documentTemplate": "{{doc.description}}", + "documentTemplateMaxBytes": 400 + } + }, "searchCutoffMs": 8000, "localizedAttributes": [ { diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap index f4edae51b..b56cc5ca3 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap @@ -4,7 +4,7 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 24, + "uid": 30, "progress": null, "details": { "upgradeFrom": "v1.12.0", @@ -26,6 +26,155 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "finishedAt": "[date]", "batchStrategy": "stopped after the last task of type `upgradeDatabase` because they cannot be batched with tasks of any other type." }, + { + "uid": 29, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.067201S", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z", + "batchStrategy": "unspecified" + }, + { + "uid": 28, + "progress": null, + "details": { + "deletedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "indexDeletion": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.012727S", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z", + "batchStrategy": "unspecified" + }, + { + "uid": 27, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "failed": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.059920S", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z", + "batchStrategy": "unspecified" + }, + { + "uid": 26, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.088879S", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z", + "batchStrategy": "unspecified" + }, + { + "uid": 25, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.312911S", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z", + "batchStrategy": "unspecified" + }, + { + "uid": 24, + "progress": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "settingsUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.247378S", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z", + "batchStrategy": "unspecified" + }, { "uid": 23, "progress": null, @@ -348,179 +497,10 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "startedAt": "2025-01-16T17:01:14.112756687Z", "finishedAt": "2025-01-16T17:01:14.120064527Z", "batchStrategy": "unspecified" - }, - { - "uid": 10, - "progress": null, - "details": { - "faceting": { - "maxValuesPerFacet": 99 - }, - "pagination": { - "maxTotalHits": 15 - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007391353S", - "startedAt": "2025-01-16T17:00:29.201180268Z", - "finishedAt": "2025-01-16T17:00:29.208571621Z", - "batchStrategy": "unspecified" - }, - { - "uid": 9, - "progress": null, - "details": { - "faceting": { - "maxValuesPerFacet": 100 - }, - "pagination": { - "maxTotalHits": 1000 - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007445825S", - "startedAt": "2025-01-16T17:00:15.77629445Z", - "finishedAt": "2025-01-16T17:00:15.783740275Z", - "batchStrategy": "unspecified" - }, - { - "uid": 8, - "progress": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - }, - "disableOnWords": [ - "kefir" - ], - "disableOnAttributes": [ - "surname" - ] - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.012020083S", - "startedAt": "2025-01-16T16:59:42.744086671Z", - "finishedAt": "2025-01-16T16:59:42.756106754Z", - "batchStrategy": "unspecified" - }, - { - "uid": 7, - "progress": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - } - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007440092S", - "startedAt": "2025-01-16T16:58:41.2155771Z", - "finishedAt": "2025-01-16T16:58:41.223017192Z", - "batchStrategy": "unspecified" - }, - { - "uid": 6, - "progress": null, - "details": { - "synonyms": { - "boubou": [ - "kefir" - ] - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007565161S", - "startedAt": "2025-01-16T16:54:51.940332781Z", - "finishedAt": "2025-01-16T16:54:51.947897942Z", - "batchStrategy": "unspecified" - }, - { - "uid": 5, - "progress": null, - "details": { - "stopWords": [ - "le", - "un" - ] - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.016307263S", - "startedAt": "2025-01-16T16:53:19.913351957Z", - "finishedAt": "2025-01-16T16:53:19.92965922Z", - "batchStrategy": "unspecified" } ], - "total": 23, + "total": 29, "limit": 20, - "from": 24, - "next": 4 + "from": 30, + "next": 10 } diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap index f4edae51b..b56cc5ca3 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap @@ -4,7 +4,7 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 24, + "uid": 30, "progress": null, "details": { "upgradeFrom": "v1.12.0", @@ -26,6 +26,155 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "finishedAt": "[date]", "batchStrategy": "stopped after the last task of type `upgradeDatabase` because they cannot be batched with tasks of any other type." }, + { + "uid": 29, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.067201S", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z", + "batchStrategy": "unspecified" + }, + { + "uid": 28, + "progress": null, + "details": { + "deletedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "indexDeletion": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.012727S", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z", + "batchStrategy": "unspecified" + }, + { + "uid": 27, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "failed": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.059920S", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z", + "batchStrategy": "unspecified" + }, + { + "uid": 26, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.088879S", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z", + "batchStrategy": "unspecified" + }, + { + "uid": 25, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.312911S", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z", + "batchStrategy": "unspecified" + }, + { + "uid": 24, + "progress": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "settingsUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.247378S", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z", + "batchStrategy": "unspecified" + }, { "uid": 23, "progress": null, @@ -348,179 +497,10 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "startedAt": "2025-01-16T17:01:14.112756687Z", "finishedAt": "2025-01-16T17:01:14.120064527Z", "batchStrategy": "unspecified" - }, - { - "uid": 10, - "progress": null, - "details": { - "faceting": { - "maxValuesPerFacet": 99 - }, - "pagination": { - "maxTotalHits": 15 - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007391353S", - "startedAt": "2025-01-16T17:00:29.201180268Z", - "finishedAt": "2025-01-16T17:00:29.208571621Z", - "batchStrategy": "unspecified" - }, - { - "uid": 9, - "progress": null, - "details": { - "faceting": { - "maxValuesPerFacet": 100 - }, - "pagination": { - "maxTotalHits": 1000 - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007445825S", - "startedAt": "2025-01-16T17:00:15.77629445Z", - "finishedAt": "2025-01-16T17:00:15.783740275Z", - "batchStrategy": "unspecified" - }, - { - "uid": 8, - "progress": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - }, - "disableOnWords": [ - "kefir" - ], - "disableOnAttributes": [ - "surname" - ] - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.012020083S", - "startedAt": "2025-01-16T16:59:42.744086671Z", - "finishedAt": "2025-01-16T16:59:42.756106754Z", - "batchStrategy": "unspecified" - }, - { - "uid": 7, - "progress": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - } - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007440092S", - "startedAt": "2025-01-16T16:58:41.2155771Z", - "finishedAt": "2025-01-16T16:58:41.223017192Z", - "batchStrategy": "unspecified" - }, - { - "uid": 6, - "progress": null, - "details": { - "synonyms": { - "boubou": [ - "kefir" - ] - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007565161S", - "startedAt": "2025-01-16T16:54:51.940332781Z", - "finishedAt": "2025-01-16T16:54:51.947897942Z", - "batchStrategy": "unspecified" - }, - { - "uid": 5, - "progress": null, - "details": { - "stopWords": [ - "le", - "un" - ] - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.016307263S", - "startedAt": "2025-01-16T16:53:19.913351957Z", - "finishedAt": "2025-01-16T16:53:19.92965922Z", - "batchStrategy": "unspecified" } ], - "total": 23, + "total": 29, "limit": 20, - "from": 24, - "next": 4 + "from": 30, + "next": 10 } diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap index f4edae51b..b56cc5ca3 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/batches_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap @@ -4,7 +4,7 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 24, + "uid": 30, "progress": null, "details": { "upgradeFrom": "v1.12.0", @@ -26,6 +26,155 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "finishedAt": "[date]", "batchStrategy": "stopped after the last task of type `upgradeDatabase` because they cannot be batched with tasks of any other type." }, + { + "uid": 29, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.067201S", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z", + "batchStrategy": "unspecified" + }, + { + "uid": 28, + "progress": null, + "details": { + "deletedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "indexDeletion": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.012727S", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z", + "batchStrategy": "unspecified" + }, + { + "uid": 27, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "failed": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.059920S", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z", + "batchStrategy": "unspecified" + }, + { + "uid": 26, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.088879S", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z", + "batchStrategy": "unspecified" + }, + { + "uid": 25, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.312911S", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z", + "batchStrategy": "unspecified" + }, + { + "uid": 24, + "progress": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "settingsUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.247378S", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z", + "batchStrategy": "unspecified" + }, { "uid": 23, "progress": null, @@ -348,179 +497,10 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "startedAt": "2025-01-16T17:01:14.112756687Z", "finishedAt": "2025-01-16T17:01:14.120064527Z", "batchStrategy": "unspecified" - }, - { - "uid": 10, - "progress": null, - "details": { - "faceting": { - "maxValuesPerFacet": 99 - }, - "pagination": { - "maxTotalHits": 15 - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007391353S", - "startedAt": "2025-01-16T17:00:29.201180268Z", - "finishedAt": "2025-01-16T17:00:29.208571621Z", - "batchStrategy": "unspecified" - }, - { - "uid": 9, - "progress": null, - "details": { - "faceting": { - "maxValuesPerFacet": 100 - }, - "pagination": { - "maxTotalHits": 1000 - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007445825S", - "startedAt": "2025-01-16T17:00:15.77629445Z", - "finishedAt": "2025-01-16T17:00:15.783740275Z", - "batchStrategy": "unspecified" - }, - { - "uid": 8, - "progress": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - }, - "disableOnWords": [ - "kefir" - ], - "disableOnAttributes": [ - "surname" - ] - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.012020083S", - "startedAt": "2025-01-16T16:59:42.744086671Z", - "finishedAt": "2025-01-16T16:59:42.756106754Z", - "batchStrategy": "unspecified" - }, - { - "uid": 7, - "progress": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - } - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007440092S", - "startedAt": "2025-01-16T16:58:41.2155771Z", - "finishedAt": "2025-01-16T16:58:41.223017192Z", - "batchStrategy": "unspecified" - }, - { - "uid": 6, - "progress": null, - "details": { - "synonyms": { - "boubou": [ - "kefir" - ] - } - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.007565161S", - "startedAt": "2025-01-16T16:54:51.940332781Z", - "finishedAt": "2025-01-16T16:54:51.947897942Z", - "batchStrategy": "unspecified" - }, - { - "uid": 5, - "progress": null, - "details": { - "stopWords": [ - "le", - "un" - ] - }, - "stats": { - "totalNbTasks": 1, - "status": { - "succeeded": 1 - }, - "types": { - "settingsUpdate": 1 - }, - "indexUids": { - "kefir": 1 - } - }, - "duration": "PT0.016307263S", - "startedAt": "2025-01-16T16:53:19.913351957Z", - "finishedAt": "2025-01-16T16:53:19.92965922Z", - "batchStrategy": "unspecified" } ], - "total": 23, + "total": 29, "limit": 20, - "from": 24, - "next": 4 + "from": 30, + "next": 10 } diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap index 01d2ea341..a52072f56 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterEnqueuedAt_equal_2025-01-16T16_47_41.snap @@ -4,8 +4,8 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 25, - "batchUid": 24, + "uid": 31, + "batchUid": 30, "indexUid": null, "status": "succeeded", "type": "upgradeDatabase", @@ -20,6 +20,118 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "startedAt": "[date]", "finishedAt": "[date]" }, + { + "uid": 30, + "batchUid": 29, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.067201S", + "enqueuedAt": "2025-07-07T13:43:08.772432Z", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z" + }, + { + "uid": 29, + "batchUid": 28, + "indexUid": "mieli", + "status": "succeeded", + "type": "indexDeletion", + "canceledBy": null, + "details": { + "deletedDocuments": 1 + }, + "error": null, + "duration": "PT0.012727S", + "enqueuedAt": "2025-07-07T13:42:50.744793Z", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z" + }, + { + "uid": 28, + "batchUid": 27, + "indexUid": "kefir", + "status": "failed", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "error": { + "message": "Index `kefir`: Bad embedder configuration in the document with id: `2`. Could not parse `._vectors.doggo_embedder`: trailing characters at line 1 column 13", + "code": "invalid_vectors_type", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#invalid_vectors_type" + }, + "duration": "PT0.059920S", + "enqueuedAt": "2025-07-07T13:42:15.624598Z", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z" + }, + { + "uid": 27, + "batchUid": 26, + "indexUid": "mieli", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.088879S", + "enqueuedAt": "2025-07-07T13:40:01.46081Z", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z" + }, + { + "uid": 26, + "batchUid": 25, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.312911S", + "enqueuedAt": "2025-07-07T13:32:46.13871Z", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z" + }, + { + "uid": 25, + "batchUid": 24, + "indexUid": "kefir", + "status": "succeeded", + "type": "settingsUpdate", + "canceledBy": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "error": null, + "duration": "PT0.247378S", + "enqueuedAt": "2025-07-07T13:28:27.390054Z", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z" + }, { "uid": 24, "batchUid": 23, @@ -264,134 +376,10 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "enqueuedAt": "2025-01-16T17:02:52.527382964Z", "startedAt": "2025-01-16T17:02:52.539749853Z", "finishedAt": "2025-01-16T17:02:52.547390016Z" - }, - { - "uid": 11, - "batchUid": 11, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "searchCutoffMs": 8000 - }, - "error": null, - "duration": "PT0.007307840S", - "enqueuedAt": "2025-01-16T17:01:14.100316617Z", - "startedAt": "2025-01-16T17:01:14.112756687Z", - "finishedAt": "2025-01-16T17:01:14.120064527Z" - }, - { - "uid": 10, - "batchUid": 10, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "faceting": { - "maxValuesPerFacet": 99 - }, - "pagination": { - "maxTotalHits": 15 - } - }, - "error": null, - "duration": "PT0.007391353S", - "enqueuedAt": "2025-01-16T17:00:29.188815062Z", - "startedAt": "2025-01-16T17:00:29.201180268Z", - "finishedAt": "2025-01-16T17:00:29.208571621Z" - }, - { - "uid": 9, - "batchUid": 9, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "faceting": { - "maxValuesPerFacet": 100 - }, - "pagination": { - "maxTotalHits": 1000 - } - }, - "error": null, - "duration": "PT0.007445825S", - "enqueuedAt": "2025-01-16T17:00:15.759501709Z", - "startedAt": "2025-01-16T17:00:15.77629445Z", - "finishedAt": "2025-01-16T17:00:15.783740275Z" - }, - { - "uid": 8, - "batchUid": 8, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - }, - "disableOnWords": [ - "kefir" - ], - "disableOnAttributes": [ - "surname" - ] - } - }, - "error": null, - "duration": "PT0.012020083S", - "enqueuedAt": "2025-01-16T16:59:42.727292501Z", - "startedAt": "2025-01-16T16:59:42.744086671Z", - "finishedAt": "2025-01-16T16:59:42.756106754Z" - }, - { - "uid": 7, - "batchUid": 7, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - } - } - }, - "error": null, - "duration": "PT0.007440092S", - "enqueuedAt": "2025-01-16T16:58:41.203145044Z", - "startedAt": "2025-01-16T16:58:41.2155771Z", - "finishedAt": "2025-01-16T16:58:41.223017192Z" - }, - { - "uid": 6, - "batchUid": 6, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "synonyms": { - "boubou": [ - "kefir" - ] - } - }, - "error": null, - "duration": "PT0.007565161S", - "enqueuedAt": "2025-01-16T16:54:51.927866243Z", - "startedAt": "2025-01-16T16:54:51.940332781Z", - "finishedAt": "2025-01-16T16:54:51.947897942Z" } ], - "total": 24, + "total": 30, "limit": 20, - "from": 25, - "next": 5 + "from": 31, + "next": 11 } diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap index 01d2ea341..a52072f56 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterFinishedAt_equal_2025-01-16T16_47_41.snap @@ -4,8 +4,8 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 25, - "batchUid": 24, + "uid": 31, + "batchUid": 30, "indexUid": null, "status": "succeeded", "type": "upgradeDatabase", @@ -20,6 +20,118 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "startedAt": "[date]", "finishedAt": "[date]" }, + { + "uid": 30, + "batchUid": 29, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.067201S", + "enqueuedAt": "2025-07-07T13:43:08.772432Z", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z" + }, + { + "uid": 29, + "batchUid": 28, + "indexUid": "mieli", + "status": "succeeded", + "type": "indexDeletion", + "canceledBy": null, + "details": { + "deletedDocuments": 1 + }, + "error": null, + "duration": "PT0.012727S", + "enqueuedAt": "2025-07-07T13:42:50.744793Z", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z" + }, + { + "uid": 28, + "batchUid": 27, + "indexUid": "kefir", + "status": "failed", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "error": { + "message": "Index `kefir`: Bad embedder configuration in the document with id: `2`. Could not parse `._vectors.doggo_embedder`: trailing characters at line 1 column 13", + "code": "invalid_vectors_type", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#invalid_vectors_type" + }, + "duration": "PT0.059920S", + "enqueuedAt": "2025-07-07T13:42:15.624598Z", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z" + }, + { + "uid": 27, + "batchUid": 26, + "indexUid": "mieli", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.088879S", + "enqueuedAt": "2025-07-07T13:40:01.46081Z", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z" + }, + { + "uid": 26, + "batchUid": 25, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.312911S", + "enqueuedAt": "2025-07-07T13:32:46.13871Z", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z" + }, + { + "uid": 25, + "batchUid": 24, + "indexUid": "kefir", + "status": "succeeded", + "type": "settingsUpdate", + "canceledBy": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "error": null, + "duration": "PT0.247378S", + "enqueuedAt": "2025-07-07T13:28:27.390054Z", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z" + }, { "uid": 24, "batchUid": 23, @@ -264,134 +376,10 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "enqueuedAt": "2025-01-16T17:02:52.527382964Z", "startedAt": "2025-01-16T17:02:52.539749853Z", "finishedAt": "2025-01-16T17:02:52.547390016Z" - }, - { - "uid": 11, - "batchUid": 11, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "searchCutoffMs": 8000 - }, - "error": null, - "duration": "PT0.007307840S", - "enqueuedAt": "2025-01-16T17:01:14.100316617Z", - "startedAt": "2025-01-16T17:01:14.112756687Z", - "finishedAt": "2025-01-16T17:01:14.120064527Z" - }, - { - "uid": 10, - "batchUid": 10, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "faceting": { - "maxValuesPerFacet": 99 - }, - "pagination": { - "maxTotalHits": 15 - } - }, - "error": null, - "duration": "PT0.007391353S", - "enqueuedAt": "2025-01-16T17:00:29.188815062Z", - "startedAt": "2025-01-16T17:00:29.201180268Z", - "finishedAt": "2025-01-16T17:00:29.208571621Z" - }, - { - "uid": 9, - "batchUid": 9, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "faceting": { - "maxValuesPerFacet": 100 - }, - "pagination": { - "maxTotalHits": 1000 - } - }, - "error": null, - "duration": "PT0.007445825S", - "enqueuedAt": "2025-01-16T17:00:15.759501709Z", - "startedAt": "2025-01-16T17:00:15.77629445Z", - "finishedAt": "2025-01-16T17:00:15.783740275Z" - }, - { - "uid": 8, - "batchUid": 8, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - }, - "disableOnWords": [ - "kefir" - ], - "disableOnAttributes": [ - "surname" - ] - } - }, - "error": null, - "duration": "PT0.012020083S", - "enqueuedAt": "2025-01-16T16:59:42.727292501Z", - "startedAt": "2025-01-16T16:59:42.744086671Z", - "finishedAt": "2025-01-16T16:59:42.756106754Z" - }, - { - "uid": 7, - "batchUid": 7, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - } - } - }, - "error": null, - "duration": "PT0.007440092S", - "enqueuedAt": "2025-01-16T16:58:41.203145044Z", - "startedAt": "2025-01-16T16:58:41.2155771Z", - "finishedAt": "2025-01-16T16:58:41.223017192Z" - }, - { - "uid": 6, - "batchUid": 6, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "synonyms": { - "boubou": [ - "kefir" - ] - } - }, - "error": null, - "duration": "PT0.007565161S", - "enqueuedAt": "2025-01-16T16:54:51.927866243Z", - "startedAt": "2025-01-16T16:54:51.940332781Z", - "finishedAt": "2025-01-16T16:54:51.947897942Z" } ], - "total": 24, + "total": 30, "limit": 20, - "from": 25, - "next": 5 + "from": 31, + "next": 11 } diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap index 01d2ea341..a52072f56 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/tasks_filter_afterStartedAt_equal_2025-01-16T16_47_41.snap @@ -4,8 +4,8 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 25, - "batchUid": 24, + "uid": 31, + "batchUid": 30, "indexUid": null, "status": "succeeded", "type": "upgradeDatabase", @@ -20,6 +20,118 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "startedAt": "[date]", "finishedAt": "[date]" }, + { + "uid": 30, + "batchUid": 29, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.067201S", + "enqueuedAt": "2025-07-07T13:43:08.772432Z", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z" + }, + { + "uid": 29, + "batchUid": 28, + "indexUid": "mieli", + "status": "succeeded", + "type": "indexDeletion", + "canceledBy": null, + "details": { + "deletedDocuments": 1 + }, + "error": null, + "duration": "PT0.012727S", + "enqueuedAt": "2025-07-07T13:42:50.744793Z", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z" + }, + { + "uid": 28, + "batchUid": 27, + "indexUid": "kefir", + "status": "failed", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "error": { + "message": "Index `kefir`: Bad embedder configuration in the document with id: `2`. Could not parse `._vectors.doggo_embedder`: trailing characters at line 1 column 13", + "code": "invalid_vectors_type", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#invalid_vectors_type" + }, + "duration": "PT0.059920S", + "enqueuedAt": "2025-07-07T13:42:15.624598Z", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z" + }, + { + "uid": 27, + "batchUid": 26, + "indexUid": "mieli", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.088879S", + "enqueuedAt": "2025-07-07T13:40:01.46081Z", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z" + }, + { + "uid": 26, + "batchUid": 25, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.312911S", + "enqueuedAt": "2025-07-07T13:32:46.13871Z", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z" + }, + { + "uid": 25, + "batchUid": 24, + "indexUid": "kefir", + "status": "succeeded", + "type": "settingsUpdate", + "canceledBy": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "error": null, + "duration": "PT0.247378S", + "enqueuedAt": "2025-07-07T13:28:27.390054Z", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z" + }, { "uid": 24, "batchUid": 23, @@ -264,134 +376,10 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "enqueuedAt": "2025-01-16T17:02:52.527382964Z", "startedAt": "2025-01-16T17:02:52.539749853Z", "finishedAt": "2025-01-16T17:02:52.547390016Z" - }, - { - "uid": 11, - "batchUid": 11, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "searchCutoffMs": 8000 - }, - "error": null, - "duration": "PT0.007307840S", - "enqueuedAt": "2025-01-16T17:01:14.100316617Z", - "startedAt": "2025-01-16T17:01:14.112756687Z", - "finishedAt": "2025-01-16T17:01:14.120064527Z" - }, - { - "uid": 10, - "batchUid": 10, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "faceting": { - "maxValuesPerFacet": 99 - }, - "pagination": { - "maxTotalHits": 15 - } - }, - "error": null, - "duration": "PT0.007391353S", - "enqueuedAt": "2025-01-16T17:00:29.188815062Z", - "startedAt": "2025-01-16T17:00:29.201180268Z", - "finishedAt": "2025-01-16T17:00:29.208571621Z" - }, - { - "uid": 9, - "batchUid": 9, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "faceting": { - "maxValuesPerFacet": 100 - }, - "pagination": { - "maxTotalHits": 1000 - } - }, - "error": null, - "duration": "PT0.007445825S", - "enqueuedAt": "2025-01-16T17:00:15.759501709Z", - "startedAt": "2025-01-16T17:00:15.77629445Z", - "finishedAt": "2025-01-16T17:00:15.783740275Z" - }, - { - "uid": 8, - "batchUid": 8, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - }, - "disableOnWords": [ - "kefir" - ], - "disableOnAttributes": [ - "surname" - ] - } - }, - "error": null, - "duration": "PT0.012020083S", - "enqueuedAt": "2025-01-16T16:59:42.727292501Z", - "startedAt": "2025-01-16T16:59:42.744086671Z", - "finishedAt": "2025-01-16T16:59:42.756106754Z" - }, - { - "uid": 7, - "batchUid": 7, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "typoTolerance": { - "minWordSizeForTypos": { - "oneTypo": 4 - } - } - }, - "error": null, - "duration": "PT0.007440092S", - "enqueuedAt": "2025-01-16T16:58:41.203145044Z", - "startedAt": "2025-01-16T16:58:41.2155771Z", - "finishedAt": "2025-01-16T16:58:41.223017192Z" - }, - { - "uid": 6, - "batchUid": 6, - "indexUid": "kefir", - "status": "succeeded", - "type": "settingsUpdate", - "canceledBy": null, - "details": { - "synonyms": { - "boubou": [ - "kefir" - ] - } - }, - "error": null, - "duration": "PT0.007565161S", - "enqueuedAt": "2025-01-16T16:54:51.927866243Z", - "startedAt": "2025-01-16T16:54:51.940332781Z", - "finishedAt": "2025-01-16T16:54:51.947897942Z" } ], - "total": 24, + "total": 30, "limit": 20, - "from": 25, - "next": 5 + "from": 31, + "next": 11 } diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_batch_queue_once_everything_has_been_processed.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_batch_queue_once_everything_has_been_processed.snap index fb62b35da..81b50fb92 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_batch_queue_once_everything_has_been_processed.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_batch_queue_once_everything_has_been_processed.snap @@ -4,7 +4,7 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 24, + "uid": 30, "progress": null, "details": { "upgradeFrom": "v1.12.0", @@ -26,6 +26,155 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "finishedAt": "[date]", "batchStrategy": "stopped after the last task of type `upgradeDatabase` because they cannot be batched with tasks of any other type." }, + { + "uid": 29, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.067201S", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z", + "batchStrategy": "unspecified" + }, + { + "uid": 28, + "progress": null, + "details": { + "deletedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "indexDeletion": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.012727S", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z", + "batchStrategy": "unspecified" + }, + { + "uid": 27, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "failed": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.059920S", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z", + "batchStrategy": "unspecified" + }, + { + "uid": 26, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "mieli": 1 + } + }, + "duration": "PT0.088879S", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z", + "batchStrategy": "unspecified" + }, + { + "uid": 25, + "progress": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "documentAdditionOrUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.312911S", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z", + "batchStrategy": "unspecified" + }, + { + "uid": 24, + "progress": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "stats": { + "totalNbTasks": 1, + "status": { + "succeeded": 1 + }, + "types": { + "settingsUpdate": 1 + }, + "indexUids": { + "kefir": 1 + } + }, + "duration": "PT0.247378S", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z", + "batchStrategy": "unspecified" + }, { "uid": 23, "progress": null, @@ -642,8 +791,8 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "batchStrategy": "unspecified" } ], - "total": 25, + "total": 31, "limit": 1000, - "from": 24, + "from": 30, "next": null } diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_task_queue_once_everything_has_been_processed.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_task_queue_once_everything_has_been_processed.snap index abb4dcdd9..1ec334fed 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_task_queue_once_everything_has_been_processed.snap +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_scheduler/the_whole_task_queue_once_everything_has_been_processed.snap @@ -4,8 +4,8 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs { "results": [ { - "uid": 25, - "batchUid": 24, + "uid": 31, + "batchUid": 30, "indexUid": null, "status": "succeeded", "type": "upgradeDatabase", @@ -20,6 +20,118 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "startedAt": "[date]", "finishedAt": "[date]" }, + { + "uid": 30, + "batchUid": 29, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.067201S", + "enqueuedAt": "2025-07-07T13:43:08.772432Z", + "startedAt": "2025-07-07T13:43:08.772854Z", + "finishedAt": "2025-07-07T13:43:08.840055Z" + }, + { + "uid": 29, + "batchUid": 28, + "indexUid": "mieli", + "status": "succeeded", + "type": "indexDeletion", + "canceledBy": null, + "details": { + "deletedDocuments": 1 + }, + "error": null, + "duration": "PT0.012727S", + "enqueuedAt": "2025-07-07T13:42:50.744793Z", + "startedAt": "2025-07-07T13:42:50.745461Z", + "finishedAt": "2025-07-07T13:42:50.758188Z" + }, + { + "uid": 28, + "batchUid": 27, + "indexUid": "kefir", + "status": "failed", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 0 + }, + "error": { + "message": "Index `kefir`: Bad embedder configuration in the document with id: `2`. Could not parse `._vectors.doggo_embedder`: trailing characters at line 1 column 13", + "code": "invalid_vectors_type", + "type": "invalid_request", + "link": "https://docs.meilisearch.com/errors#invalid_vectors_type" + }, + "duration": "PT0.059920S", + "enqueuedAt": "2025-07-07T13:42:15.624598Z", + "startedAt": "2025-07-07T13:42:15.625413Z", + "finishedAt": "2025-07-07T13:42:15.685333Z" + }, + { + "uid": 27, + "batchUid": 26, + "indexUid": "mieli", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.088879S", + "enqueuedAt": "2025-07-07T13:40:01.46081Z", + "startedAt": "2025-07-07T13:40:01.461741Z", + "finishedAt": "2025-07-07T13:40:01.55062Z" + }, + { + "uid": 26, + "batchUid": 25, + "indexUid": "kefir", + "status": "succeeded", + "type": "documentAdditionOrUpdate", + "canceledBy": null, + "details": { + "receivedDocuments": 1, + "indexedDocuments": 1 + }, + "error": null, + "duration": "PT0.312911S", + "enqueuedAt": "2025-07-07T13:32:46.13871Z", + "startedAt": "2025-07-07T13:32:46.139785Z", + "finishedAt": "2025-07-07T13:32:46.452696Z" + }, + { + "uid": 25, + "batchUid": 24, + "indexUid": "kefir", + "status": "succeeded", + "type": "settingsUpdate", + "canceledBy": null, + "details": { + "embedders": { + "doggo_embedder": { + "source": "huggingFace", + "model": "sentence-transformers/all-MiniLM-L6-v2", + "revision": "e4ce9877abf3edfe10b0d82785e83bdcb973e22e", + "documentTemplate": "{{doc.description}}" + } + } + }, + "error": null, + "duration": "PT0.247378S", + "enqueuedAt": "2025-07-07T13:28:27.390054Z", + "startedAt": "2025-07-07T13:28:27.391344Z", + "finishedAt": "2025-07-07T13:28:27.638722Z" + }, { "uid": 24, "batchUid": 23, @@ -497,8 +609,8 @@ source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs "finishedAt": "2025-01-16T16:45:16.131303739Z" } ], - "total": 26, + "total": 32, "limit": 1000, - "from": 25, + "from": 31, "next": null } diff --git a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs index 1b2ae054c..372e24792 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs +++ b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs @@ -114,13 +114,13 @@ async fn check_the_index_scheduler(server: &Server) { // All the indexes are still present let (indexes, _) = server.list_indexes(None, None).await; - snapshot!(indexes, @r#" + snapshot!(indexes, @r###" { "results": [ { "uid": "kefir", "createdAt": "2025-01-16T16:45:16.020663157Z", - "updatedAt": "2025-01-23T11:36:22.634859166Z", + "updatedAt": "2025-07-07T13:43:08.835381Z", "primaryKey": "id" } ], @@ -128,7 +128,7 @@ async fn check_the_index_scheduler(server: &Server) { "limit": 20, "total": 1 } - "#); + "###); // And their metadata are still right let (stats, _) = server.stats().await; assert_json_snapshot!(stats, { @@ -141,21 +141,21 @@ async fn check_the_index_scheduler(server: &Server) { { "databaseSize": "[bytes]", "usedDatabaseSize": "[bytes]", - "lastUpdate": "2025-01-23T11:36:22.634859166Z", + "lastUpdate": "2025-07-07T13:43:08.835381Z", "indexes": { "kefir": { - "numberOfDocuments": 1, + "numberOfDocuments": 2, "rawDocumentDbSize": "[bytes]", "avgDocumentSize": "[bytes]", "isIndexing": false, - "numberOfEmbeddings": 0, - "numberOfEmbeddedDocuments": 0, + "numberOfEmbeddings": 2, + "numberOfEmbeddedDocuments": 2, "fieldDistribution": { - "age": 1, - "description": 1, - "id": 1, - "name": 1, - "surname": 1 + "age": 2, + "description": 2, + "id": 2, + "name": 2, + "surname": 2 } } } @@ -227,21 +227,21 @@ async fn check_the_index_scheduler(server: &Server) { { "databaseSize": "[bytes]", "usedDatabaseSize": "[bytes]", - "lastUpdate": "2025-01-23T11:36:22.634859166Z", + "lastUpdate": "2025-07-07T13:43:08.835381Z", "indexes": { "kefir": { - "numberOfDocuments": 1, + "numberOfDocuments": 2, "rawDocumentDbSize": "[bytes]", "avgDocumentSize": "[bytes]", "isIndexing": false, - "numberOfEmbeddings": 0, - "numberOfEmbeddedDocuments": 0, + "numberOfEmbeddings": 2, + "numberOfEmbeddedDocuments": 2, "fieldDistribution": { - "age": 1, - "description": 1, - "id": 1, - "name": 1, - "surname": 1 + "age": 2, + "description": 2, + "id": 2, + "name": 2, + "surname": 2 } } } @@ -254,18 +254,18 @@ async fn check_the_index_scheduler(server: &Server) { ".avgDocumentSize" => "[bytes]", }), @r###" { - "numberOfDocuments": 1, + "numberOfDocuments": 2, "rawDocumentDbSize": "[bytes]", "avgDocumentSize": "[bytes]", "isIndexing": false, - "numberOfEmbeddings": 0, - "numberOfEmbeddedDocuments": 0, + "numberOfEmbeddings": 2, + "numberOfEmbeddedDocuments": 2, "fieldDistribution": { - "age": 1, - "description": 1, - "id": 1, - "name": 1, - "surname": 1 + "age": 2, + "description": 2, + "id": 2, + "name": 2, + "surname": 2 } } "###); From 5f8f48ec95b7c29ebdf70a1af3246a6fdaf1fc39 Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Mon, 7 Jul 2025 16:43:05 +0200 Subject: [PATCH 5/6] Add new snapshot checking for regenerativeness --- .../search_with_retrieve_vectors.snap | 40 +++++++++++++++++++ .../tests/upgrade/v1_12/v1_12_0.rs | 4 ++ 2 files changed, 44 insertions(+) create mode 100644 crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/search_with_retrieve_vectors.snap diff --git a/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/search_with_retrieve_vectors.snap b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/search_with_retrieve_vectors.snap new file mode 100644 index 000000000..5baf8155c --- /dev/null +++ b/crates/meilisearch/tests/upgrade/v1_12/snapshots/v1_12_0.rs/check_the_index_features/search_with_retrieve_vectors.snap @@ -0,0 +1,40 @@ +--- +source: crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs +--- +[ + { + "id": 1, + "name": "kefir", + "surname": [ + "kef", + "kefkef", + "kefirounet", + "boubou" + ], + "age": 1.4, + "description": "kefir est un petit chien blanc très mignon", + "_vectors": { + "doggo_embedder": { + "embeddings": "[vector]", + "regenerate": true + } + } + }, + { + "id": 2, + "name": "intel", + "surname": [ + "untel", + "tétel", + "iouiou" + ], + "age": 11.5, + "description": "intel est un grand beagle très mignon", + "_vectors": { + "doggo_embedder": { + "embeddings": "[vector]", + "regenerate": false + } + } + } +] diff --git a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs index 372e24792..b98f27b2d 100644 --- a/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs +++ b/crates/meilisearch/tests/upgrade/v1_12/v1_12_0.rs @@ -295,4 +295,8 @@ async fn check_the_index_features(server: &Server) { let (results, _status) = kefir.search_post(json!({ "sort": ["age:asc"], "filter": "surname = kefirounet" })).await; snapshot!(results, name: "search_with_sort_and_filter"); + + // ensuring we can get the vectors and their `regenerate` is still good. + let (results, _status) = kefir.search_post(json!({"retrieveVectors": true})).await; + snapshot!(json_string!(results["hits"], {"[]._vectors.doggo_embedder.embeddings" => "[vector]"}), name: "search_with_retrieve_vectors"); } From 4623691d1fd3e40f3f47f0633798f321d7dc4331 Mon Sep 17 00:00:00 2001 From: Louis Dureuil Date: Tue, 8 Jul 2025 10:02:25 +0200 Subject: [PATCH 6/6] Don't make the type-that-shall-not-be-written serializable Following tamo's advice Co-Authored-By: Tamo --- crates/milli/src/update/upgrade/v1_15.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/milli/src/update/upgrade/v1_15.rs b/crates/milli/src/update/upgrade/v1_15.rs index 9ca25d06b..3457e69ba 100644 --- a/crates/milli/src/update/upgrade/v1_15.rs +++ b/crates/milli/src/update/upgrade/v1_15.rs @@ -1,6 +1,6 @@ use heed::RwTxn; use roaring::RoaringBitmap; -use serde::{Deserialize, Serialize}; +use serde::Deserialize; use super::UpgradeIndex; use crate::progress::Progress; @@ -34,7 +34,7 @@ impl UpgradeIndex for Latest_V1_14_To_Latest_V1_15 { /// # Warning /// /// This object should not be rewritten to the DB, only read to get the name and `user_provided` roaring. -#[derive(Debug, Deserialize, Serialize)] +#[derive(Debug, Deserialize)] pub struct IndexEmbeddingConfig { pub name: String, pub user_provided: RoaringBitmap,