6060import java .util .stream .IntStream ;
6161
6262import static org .hamcrest .Matchers .equalTo ;
63+ import static org .hamcrest .Matchers .instanceOf ;
6364
6465public class ES819TSDBDocValuesFormatTests extends ES87TSDBDocValuesFormatTests {
6566
@@ -773,7 +774,7 @@ public void testOptionalColumnAtATimeReader() throws Exception {
773774
774775 {
775776 // bulk loading timestamp:
776- var block = (TestBlock ) timestampDV .tryRead (factory , docs , 0 , false , null );
777+ var block = (TestBlock ) timestampDV .tryRead (factory , docs , 0 , random (). nextBoolean () , null );
777778 assertNotNull (block );
778779 assertEquals (size , block .size ());
779780 for (int j = 0 ; j < block .size (); j ++) {
@@ -785,10 +786,10 @@ public void testOptionalColumnAtATimeReader() throws Exception {
785786 }
786787 {
787788 // bulk loading counter field:
788- var block = (TestBlock ) counterDV .tryRead (factory , docs , 0 , false , null );
789+ var block = (TestBlock ) counterDV .tryRead (factory , docs , 0 , random (). nextBoolean () , null );
789790 assertNotNull (block );
790791 assertEquals (size , block .size ());
791- var stringBlock = (TestBlock ) stringCounterDV .tryRead (factory , docs , 0 , false , null );
792+ var stringBlock = (TestBlock ) stringCounterDV .tryRead (factory , docs , 0 , random (). nextBoolean () , null );
792793 assertNotNull (stringBlock );
793794 assertEquals (size , stringBlock .size ());
794795 for (int j = 0 ; j < block .size (); j ++) {
@@ -805,7 +806,7 @@ public void testOptionalColumnAtATimeReader() throws Exception {
805806 }
806807 {
807808 // bulk loading gauge field:
808- var block = (TestBlock ) gaugeDV .tryRead (factory , docs , 0 , false , null );
809+ var block = (TestBlock ) gaugeDV .tryRead (factory , docs , 0 , random (). nextBoolean () , null );
809810 assertNotNull (block );
810811 assertEquals (size , block .size ());
811812 for (int j = 0 ; j < block .size (); j ++) {
@@ -929,13 +930,15 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
929930 final String counterAsStringField = "counter_as_string" ;
930931 final String timestampField = "@timestamp" ;
931932 String queryField = "query_field" ;
933+ String temperatureField = "temperature_field" ;
932934 long currentTimestamp = 1704067200000L ;
933935 long currentCounter = 10_000_000 ;
934936
935937 var config = getTimeSeriesIndexWriterConfig (null , timestampField );
936938 try (var dir = newDirectory (); var iw = new IndexWriter (dir , config )) {
937939 int numDocsPerQValue = 120 ;
938940 int numDocs = numDocsPerQValue * (1 + random ().nextInt (40 ));
941+ Long [] temperatureValues = new Long [numDocs ];
939942
940943 long q = 1 ;
941944 for (int i = 1 ; i <= numDocs ; i ++) {
@@ -949,7 +952,11 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
949952 if (i % 120 == 0 ) {
950953 q ++;
951954 }
952-
955+ if (random ().nextBoolean ()) {
956+ long v = random ().nextLong ();
957+ temperatureValues [numDocs - i ] = v ;
958+ d .add (new NumericDocValuesField (temperatureField , v ));
959+ }
953960 iw .addDocument (d );
954961 if (i % 100 == 0 ) {
955962 iw .commit ();
@@ -1001,7 +1008,7 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
10011008 var docs = TestBlock .docs (docIds );
10021009 {
10031010 timestampDV = getBaseDenseNumericValues (leafReader , timestampField );
1004- var block = (TestBlock ) timestampDV .tryRead (factory , docs , 0 , false , null );
1011+ var block = (TestBlock ) timestampDV .tryRead (factory , docs , 0 , random (). nextBoolean () , null );
10051012 assertNotNull (block );
10061013 assertEquals (numDocsPerQValue , block .size ());
10071014 for (int j = 0 ; j < block .size (); j ++) {
@@ -1012,7 +1019,7 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
10121019 }
10131020 {
10141021 counterDV = getBaseDenseNumericValues (leafReader , counterField );
1015- var block = (TestBlock ) counterDV .tryRead (factory , docs , 0 , false , null );
1022+ var block = (TestBlock ) counterDV .tryRead (factory , docs , 0 , random (). nextBoolean () , null );
10161023 assertNotNull (block );
10171024 assertEquals (numDocsPerQValue , block .size ());
10181025 for (int j = 0 ; j < block .size (); j ++) {
@@ -1023,7 +1030,7 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
10231030 }
10241031 {
10251032 counterAsStringDV = getBaseSortedDocValues (leafReader , counterAsStringField );
1026- var block = (TestBlock ) counterAsStringDV .tryRead (factory , docs , 0 , false , null );
1033+ var block = (TestBlock ) counterAsStringDV .tryRead (factory , docs , 0 , random (). nextBoolean () , null );
10271034 assertNotNull (block );
10281035 assertEquals (numDocsPerQValue , block .size ());
10291036 for (int j = 0 ; j < block .size (); j ++) {
@@ -1032,6 +1039,37 @@ public void testOptionalColumnAtATimeReaderWithSparseDocs() throws Exception {
10321039 assertEquals (expectedCounter , actualCounter );
10331040 }
10341041 }
1042+ {
1043+ int startIndex = ESTestCase .between (0 , temperatureValues .length - 1 );
1044+ int endIndex = ESTestCase .between (startIndex + 1 , temperatureValues .length );
1045+ List <Integer > testDocs = new ArrayList <>();
1046+ for (int i = startIndex ; i < endIndex ; i ++) {
1047+ if (temperatureValues [i ] != null ) {
1048+ testDocs .add (i );
1049+ }
1050+ }
1051+ if (testDocs .isEmpty () == false ) {
1052+ NumericDocValues dv = leafReader .getNumericDocValues (temperatureField );
1053+ assertThat (dv , instanceOf (OptionalColumnAtATimeReader .class ));
1054+ OptionalColumnAtATimeReader directReader = (OptionalColumnAtATimeReader ) dv ;
1055+ docs = TestBlock .docs (testDocs .stream ().mapToInt (n -> n ).toArray ());
1056+ assertNull (directReader .tryRead (factory , docs , 0 , false , null ));
1057+ TestBlock block = (TestBlock ) directReader .tryRead (factory , docs , 0 , true , null );
1058+ assertNotNull (block );
1059+ for (int i = 0 ; i < testDocs .size (); i ++) {
1060+ assertThat (block .get (i ), equalTo (temperatureValues [testDocs .get (i )]));
1061+ }
1062+ }
1063+ if (testDocs .size () > 2 ) {
1064+ // currently bulk loading is disabled with gaps
1065+ testDocs .remove (ESTestCase .between (1 , testDocs .size () - 2 ));
1066+ docs = TestBlock .docs (testDocs .stream ().mapToInt (n -> n ).toArray ());
1067+ NumericDocValues dv = leafReader .getNumericDocValues (temperatureField );
1068+ OptionalColumnAtATimeReader directReader = (OptionalColumnAtATimeReader ) dv ;
1069+ assertNull (directReader .tryRead (factory , docs , 0 , false , null ));
1070+ assertNull (directReader .tryRead (factory , docs , 0 , true , null ));
1071+ }
1072+ }
10351073 }
10361074 }
10371075 }
0 commit comments