Skip to content

Commit b3b9dbb

Browse files
committed
tests
1 parent 5ba8791 commit b3b9dbb

File tree

3 files changed

+66
-14
lines changed

3 files changed

+66
-14
lines changed

server/src/main/java/org/elasticsearch/index/codec/tsdb/es819/ES819TSDBDocValuesProducer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.apache.lucene.util.compress.LZ4;
4444
import org.apache.lucene.util.packed.DirectMonotonicReader;
4545
import org.apache.lucene.util.packed.PackedInts;
46+
import org.elasticsearch.core.Assertions;
4647
import org.elasticsearch.core.IOUtils;
4748
import org.elasticsearch.index.codec.tsdb.TSDBDocValuesEncoder;
4849
import org.elasticsearch.index.mapper.BlockDocValuesReader;
@@ -1558,6 +1559,13 @@ public BlockLoader.Block tryRead(
15581559
if (valueCount != docs.count()) {
15591560
return null;
15601561
}
1562+
if (Assertions.ENABLED) {
1563+
for (int i = 0; i < docs.count(); i++) {
1564+
final int doc = docs.get(i + offset);
1565+
assert disi.advanceExact(doc) : "nullsFiltered is true, but doc [" + doc + "] has no value";
1566+
assert disi.index() == firstIndex + i : "unexpected disi index " + (firstIndex + i) + "!=" + disi.index();
1567+
}
1568+
}
15611569
try (var longs = singletonLongs(factory, toDouble, valueCount)) {
15621570
for (int i = 0; i < valueCount;) {
15631571
final int index = firstIndex + i;

server/src/test/java/org/elasticsearch/index/codec/tsdb/es819/ES819TSDBDocValuesFormatTests.java

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import java.util.stream.IntStream;
6161

6262
import static org.hamcrest.Matchers.equalTo;
63+
import static org.hamcrest.Matchers.instanceOf;
6364

6465
public 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
}

test/framework/src/main/java/org/elasticsearch/index/mapper/MapperTestCase.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,6 @@
9393
import static org.hamcrest.Matchers.equalTo;
9494
import static org.hamcrest.Matchers.hasSize;
9595
import static org.hamcrest.Matchers.instanceOf;
96-
import static org.hamcrest.Matchers.not;
9796
import static org.hamcrest.Matchers.nullValue;
9897
import static org.mockito.Mockito.mock;
9998
import static org.mockito.Mockito.when;
@@ -1560,7 +1559,7 @@ private void testSingletonBulkBlockReading(Function<BlockLoader.ColumnAtATimeRea
15601559
instanceOf(BlockLoader.OptionalColumnAtATimeReader.class)
15611560
);
15621561
var docBlock = TestBlock.docs(IntStream.range(0, 3).toArray());
1563-
var block = (TestBlock) columnReader.read(TestBlock.factory(), docBlock, 0, false);
1562+
var block = (TestBlock) columnReader.read(TestBlock.factory(), docBlock, 0, randomBoolean());
15641563
for (int i = 0; i < block.size(); i++) {
15651564
assertThat(block.get(i), equalTo(expectedSampleValues[i]));
15661565
}
@@ -1583,15 +1582,22 @@ private void testSingletonBulkBlockReading(Function<BlockLoader.ColumnAtATimeRea
15831582
LeafReaderContext context = reader.leaves().get(0);
15841583
var blockLoader = mapperService.fieldType("field").blockLoader(mockBlockContext);
15851584
BlockDocValuesReader columnReader = readerCast.apply(blockLoader.columnAtATimeReader(context));
1586-
assertThat(
1587-
((BlockDocValuesReader.NumericDocValuesAccessor) columnReader).numericDocValues(),
1588-
not(instanceOf(BlockLoader.OptionalColumnAtATimeReader.class))
1589-
);
15901585
var docBlock = TestBlock.docs(IntStream.range(0, 3).toArray());
15911586
var block = (TestBlock) columnReader.read(TestBlock.factory(), docBlock, 0, false);
15921587
assertThat(block.get(0), equalTo(expectedSampleValues[0]));
15931588
assertThat(block.get(1), nullValue());
15941589
assertThat(block.get(2), equalTo(expectedSampleValues[2]));
1590+
1591+
docBlock = TestBlock.docs(0, 2);
1592+
columnReader = readerCast.apply(blockLoader.columnAtATimeReader(context));
1593+
var numeric = ((BlockDocValuesReader.NumericDocValuesAccessor) columnReader).numericDocValues();
1594+
assertThat(numeric, instanceOf(BlockLoader.OptionalColumnAtATimeReader.class));
1595+
var directReader = (BlockLoader.OptionalColumnAtATimeReader) numeric;
1596+
assertNull(directReader.tryRead(TestBlock.factory(), docBlock, 0, false, null));
1597+
block = (TestBlock) directReader.tryRead(TestBlock.factory(), docBlock, 0, true, null);
1598+
assertNotNull(block);
1599+
assertThat(block.get(0), equalTo(expectedSampleValues[0]));
1600+
assertThat(block.get(1), equalTo(expectedSampleValues[2]));
15951601
};
15961602
withLuceneIndex(mapperService, builder, test);
15971603
}

0 commit comments

Comments
 (0)