@@ -35,9 +35,9 @@ public class DerivedSourceTestCase extends KNNRestTestCase {
3535 );
3636
3737 private static final int MIN_DIMENSION = 4 ;
38- private static final int MAX_DIMENSION = 64 ;
39- private static final int MIN_DOCS = 100 ;
40- private static final int MAX_DOCS = 500 ;
38+ private static final int MAX_DIMENSION = 32 ;
39+ private static final int MIN_DOCS = 50 ;
40+ private static final int MAX_DOCS = 200 ;
4141
4242 /**
4343 * Testing flat, single field base case with index configuration. The test will automatically skip adding fields for
@@ -164,11 +164,11 @@ protected List<DerivedSourceUtils.IndexConfigContext> getFlatIndexContexts(Strin
164164 * "properties" : {
165165 * "test_vector" : {
166166 * "type" : "knn_vector",
167- * "dimension" : 16
167+ * "dimension" : 63
168168 * },
169169 * "update_vector" : {
170170 * "type" : "knn_vector",
171- * "dimension" : 16
171+ * "dimension" : 34
172172 * }
173173 * }
174174 * },
@@ -181,11 +181,11 @@ protected List<DerivedSourceUtils.IndexConfigContext> getFlatIndexContexts(Strin
181181 * },
182182 * "test_vector" : {
183183 * "type" : "knn_vector",
184- * "dimension" : 16
184+ * "dimension" : 41
185185 * },
186186 * "update_vector" : {
187187 * "type" : "knn_vector",
188- * "dimension" : 16
188+ * "dimension" : 8
189189 * }
190190 * }
191191 * },
@@ -194,11 +194,11 @@ protected List<DerivedSourceUtils.IndexConfigContext> getFlatIndexContexts(Strin
194194 * },
195195 * "test_vector" : {
196196 * "type" : "knn_vector",
197- * "dimension" : 16
197+ * "dimension" : 45
198198 * },
199199 * "update_vector" : {
200200 * "type" : "knn_vector",
201- * "dimension" : 16
201+ * "dimension" : 7
202202 * }
203203 * }
204204 * },
@@ -210,11 +210,11 @@ protected List<DerivedSourceUtils.IndexConfigContext> getFlatIndexContexts(Strin
210210 * },
211211 * "test_vector" : {
212212 * "type" : "knn_vector",
213- * "dimension" : 16
213+ * "dimension" : 10
214214 * },
215215 * "update_vector" : {
216216 * "type" : "knn_vector",
217- * "dimension" : 16
217+ * "dimension" : 51
218218 * }
219219 * }
220220 * }
@@ -318,13 +318,24 @@ protected List<DerivedSourceUtils.IndexConfigContext> getObjectIndexContexts(Str
318318 * "nested_1" : {
319319 * "type" : "nested",
320320 * "properties" : {
321+ * "object_1" : {
322+ * "properties" : {
323+ * "test-int" : {
324+ * "type" : "integer"
325+ * },
326+ * "test_vector" : {
327+ * "type" : "knn_vector",
328+ * "dimension" : 64
329+ * }
330+ * }
331+ * },
321332 * "test_vector" : {
322333 * "type" : "knn_vector",
323- * "dimension" : 16
334+ * "dimension" : 9
324335 * },
325336 * "update_vector" : {
326337 * "type" : "knn_vector",
327- * "dimension" : 16
338+ * "dimension" : 4
328339 * }
329340 * }
330341 * },
@@ -339,11 +350,11 @@ protected List<DerivedSourceUtils.IndexConfigContext> getObjectIndexContexts(Str
339350 * },
340351 * "test_vector" : {
341352 * "type" : "knn_vector",
342- * "dimension" : 16
353+ * "dimension" : 27
343354 * },
344355 * "update_vector" : {
345356 * "type" : "knn_vector",
346- * "dimension" : 16
357+ * "dimension" : 14
347358 * }
348359 * }
349360 * },
@@ -352,11 +363,28 @@ protected List<DerivedSourceUtils.IndexConfigContext> getObjectIndexContexts(Str
352363 * },
353364 * "test_vector" : {
354365 * "type" : "knn_vector",
355- * "dimension" : 16
366+ * "dimension" : 57
356367 * },
357368 * "update_vector" : {
358369 * "type" : "knn_vector",
359- * "dimension" : 16
370+ * "dimension" : 10
371+ * }
372+ * }
373+ * },
374+ * "object_1" : {
375+ * "properties" : {
376+ * "nested_1" : {
377+ * "type" : "nested",
378+ * "properties" : {
379+ * "test_vector" : {
380+ * "type" : "knn_vector",
381+ * "dimension" : 30
382+ * }
383+ * }
384+ * },
385+ * "test_vector" : {
386+ * "type" : "knn_vector",
387+ * "dimension" : 51
360388 * }
361389 * }
362390 * },
@@ -368,11 +396,11 @@ protected List<DerivedSourceUtils.IndexConfigContext> getObjectIndexContexts(Str
368396 * },
369397 * "test_vector" : {
370398 * "type" : "knn_vector",
371- * "dimension" : 16
399+ * "dimension" : 63
372400 * },
373401 * "update_vector" : {
374402 * "type" : "knn_vector",
375- * "dimension" : 16
403+ * "dimension" : 4
376404 * }
377405 * }
378406 * }
@@ -391,6 +419,28 @@ protected List<DerivedSourceUtils.IndexConfigContext> getNestedIndexContexts(Str
391419 .random (new Random (consistentRandomSeed ))
392420 .fields (
393421 List .of (
422+ DerivedSourceUtils .ObjectFieldContext .builder ()
423+ .fieldPath ("object_1" )
424+ .children (
425+ List .of (
426+ DerivedSourceUtils .KNNVectorFieldTypeContext .builder ()
427+ .dimension (dimensionSupplier .get ())
428+ .fieldPath ("object_1.test_vector" )
429+ .build (),
430+ DerivedSourceUtils .NestedFieldContext .builder ()
431+ .fieldPath ("object_1.nested_1" )
432+ .children (
433+ List .of (
434+ DerivedSourceUtils .KNNVectorFieldTypeContext .builder ()
435+ .dimension (dimensionSupplier .get ())
436+ .fieldPath ("object_1.nested_1.test_vector" )
437+ .build ()
438+ )
439+ )
440+ .build ()
441+ )
442+ )
443+ .build (),
394444 DerivedSourceUtils .NestedFieldContext .builder ()
395445 .fieldPath ("nested_1" )
396446 .children (
@@ -403,6 +453,18 @@ protected List<DerivedSourceUtils.IndexConfigContext> getNestedIndexContexts(Str
403453 .dimension (dimensionSupplier .get ())
404454 .fieldPath ("nested_1.update_vector" )
405455 .isUpdate (true )
456+ .build (),
457+ DerivedSourceUtils .ObjectFieldContext .builder ()
458+ .fieldPath ("nested_1.object_1" )
459+ .children (
460+ List .of (
461+ DerivedSourceUtils .KNNVectorFieldTypeContext .builder ()
462+ .dimension (dimensionSupplier .get ())
463+ .fieldPath ("nested_1.object_1.test_vector" )
464+ .build (),
465+ DerivedSourceUtils .IntFieldType .builder ().fieldPath ("nested_1.object_1.test-int" ).build ()
466+ )
467+ )
406468 .build ()
407469 )
408470 )
@@ -755,6 +817,85 @@ protected void testReindex(List<DerivedSourceUtils.IndexConfigContext> indexConf
755817 );
756818 }
757819
820+ @ SneakyThrows
821+ protected void testSnapshotRestore (
822+ String repository ,
823+ String snapshot ,
824+ List <DerivedSourceUtils .IndexConfigContext > indexConfigContexts
825+ ) {
826+ DerivedSourceUtils .IndexConfigContext derivedSourceEnabledContext = indexConfigContexts .get (0 );
827+ DerivedSourceUtils .IndexConfigContext derivedSourceDisabledContext = indexConfigContexts .get (1 );
828+ DerivedSourceUtils .IndexConfigContext reindexFromEnabledToEnabledContext = indexConfigContexts .get (2 );
829+ DerivedSourceUtils .IndexConfigContext reindexFromEnabledToDisabledContext = indexConfigContexts .get (3 );
830+ DerivedSourceUtils .IndexConfigContext reindexFromDisabledToEnabledContext = indexConfigContexts .get (4 );
831+ DerivedSourceUtils .IndexConfigContext reindexFromDisabledToDisabledContext = indexConfigContexts .get (5 );
832+
833+ String originalIndexNameDerivedSourceEnabled = derivedSourceEnabledContext .indexName ;
834+ String originalIndexNameDerivedSourceDisabled = derivedSourceDisabledContext .indexName ;
835+ String reindexFromEnabledToEnabledIndexName = reindexFromEnabledToEnabledContext .indexName ;
836+ String reindexFromEnabledToDisabledIndexName = reindexFromEnabledToDisabledContext .indexName ;
837+ String reindexFromDisabledToEnabledIndexName = reindexFromDisabledToEnabledContext .indexName ;
838+ String reindexFromDisabledToDisabledIndexName = reindexFromDisabledToDisabledContext .indexName ;
839+
840+ createSnapshot (repository , snapshot , true );
841+
842+ deleteIndex (originalIndexNameDerivedSourceEnabled );
843+ deleteIndex (originalIndexNameDerivedSourceDisabled );
844+ deleteIndex (reindexFromEnabledToEnabledIndexName );
845+ deleteIndex (reindexFromEnabledToDisabledIndexName );
846+ deleteIndex (reindexFromDisabledToEnabledIndexName );
847+ deleteIndex (reindexFromDisabledToDisabledIndexName );
848+
849+ String restoreSuffix = "-restored" ;
850+ restoreSnapshot (
851+ restoreSuffix ,
852+ List .of (
853+ originalIndexNameDerivedSourceEnabled ,
854+ originalIndexNameDerivedSourceDisabled ,
855+ reindexFromEnabledToEnabledIndexName ,
856+ reindexFromEnabledToDisabledIndexName ,
857+ reindexFromDisabledToEnabledIndexName ,
858+ reindexFromDisabledToDisabledIndexName
859+ ),
860+ repository ,
861+ snapshot ,
862+ true
863+ );
864+
865+ originalIndexNameDerivedSourceEnabled += restoreSuffix ;
866+ originalIndexNameDerivedSourceDisabled += restoreSuffix ;
867+ reindexFromEnabledToEnabledIndexName += restoreSuffix ;
868+ reindexFromEnabledToDisabledIndexName += restoreSuffix ;
869+ reindexFromDisabledToEnabledIndexName += restoreSuffix ;
870+ reindexFromDisabledToDisabledIndexName += restoreSuffix ;
871+
872+ assertIndexBigger (originalIndexNameDerivedSourceDisabled , originalIndexNameDerivedSourceEnabled );
873+ assertIndexBigger (originalIndexNameDerivedSourceDisabled , reindexFromEnabledToEnabledIndexName );
874+ assertIndexBigger (originalIndexNameDerivedSourceDisabled , reindexFromDisabledToEnabledIndexName );
875+ assertIndexBigger (reindexFromEnabledToDisabledIndexName , originalIndexNameDerivedSourceEnabled );
876+ assertIndexBigger (reindexFromDisabledToDisabledIndexName , originalIndexNameDerivedSourceEnabled );
877+ assertDocsMatch (
878+ derivedSourceDisabledContext .docCount ,
879+ originalIndexNameDerivedSourceDisabled ,
880+ reindexFromEnabledToEnabledIndexName
881+ );
882+ assertDocsMatch (
883+ derivedSourceDisabledContext .docCount ,
884+ originalIndexNameDerivedSourceDisabled ,
885+ reindexFromDisabledToEnabledIndexName
886+ );
887+ assertDocsMatch (
888+ derivedSourceDisabledContext .docCount ,
889+ originalIndexNameDerivedSourceDisabled ,
890+ reindexFromEnabledToDisabledIndexName
891+ );
892+ assertDocsMatch (
893+ derivedSourceDisabledContext .docCount ,
894+ originalIndexNameDerivedSourceDisabled ,
895+ reindexFromDisabledToDisabledIndexName
896+ );
897+ }
898+
758899 @ SneakyThrows
759900 protected void assertIndexBigger (String expectedBiggerIndex , String expectedSmallerIndex ) {
760901 if (isExhaustive ()) {
0 commit comments