Skip to content

Commit c56d37a

Browse files
committed
test more
1 parent 71cb1fe commit c56d37a

File tree

1 file changed

+120
-46
lines changed

1 file changed

+120
-46
lines changed

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

Lines changed: 120 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,25 @@
2626
import org.apache.lucene.index.LeafReader;
2727
import org.apache.lucene.index.LogByteSizeMergePolicy;
2828
import org.apache.lucene.index.NumericDocValues;
29-
import org.apache.lucene.index.SortedNumericDocValues;
29+
import org.apache.lucene.index.SortedDocValues;
3030
import org.apache.lucene.search.Sort;
3131
import org.apache.lucene.search.SortField;
3232
import org.apache.lucene.search.SortedNumericSortField;
3333
import org.apache.lucene.util.BytesRef;
3434
import org.elasticsearch.cluster.metadata.DataStream;
3535
import org.elasticsearch.common.Randomness;
36+
import org.elasticsearch.common.util.CollectionUtils;
3637
import org.elasticsearch.index.codec.Elasticsearch900Lucene101Codec;
3738
import org.elasticsearch.index.codec.tsdb.ES87TSDBDocValuesFormatTests;
39+
import org.elasticsearch.test.ESTestCase;
3840

3941
import java.io.IOException;
4042
import java.util.ArrayList;
4143
import java.util.Arrays;
4244
import java.util.List;
4345
import java.util.Locale;
4446
import java.util.function.Supplier;
47+
import java.util.stream.IntStream;
4548

4649
public class ES819TSDBDocValuesFormatTests extends ES87TSDBDocValuesFormatTests {
4750

@@ -543,6 +546,11 @@ public DocValuesFormat getDocValuesFormatForField(String field) {
543546
});
544547
return config;
545548
};
549+
List<String> allNumericFields = IntStream.range(0, 5).mapToObj(n -> "numeric_" + n).toList();
550+
List<String> allSortedNumericFields = IntStream.range(0, 5).mapToObj(n -> "sorted_numeric_" + n).toList();
551+
List<String> allSortedFields = IntStream.range(0, 5).mapToObj(n -> "sorted_" + n).toList();
552+
List<String> allSortedSetFields = IntStream.range(0, 5).mapToObj(n -> "sorted_set" + n).toList();
553+
List<String> allBinaryFields = IntStream.range(0, 5).mapToObj(n -> "binary_" + n).toList();
546554
try (var source1 = newDirectory(); var source2 = newDirectory(); var singleDir = newDirectory(); var mergeDir = newDirectory()) {
547555
try (
548556
var writer1 = new IndexWriter(source1, indexConfigWithRandomDVFormat.get());
@@ -558,21 +566,38 @@ public DocValuesFormat getDocValuesFormatForField(String field) {
558566
fields.add(new SortedDocValuesField(hostnameField, new BytesRef(hostName)));
559567
fields.add(new SortedNumericDocValuesField(timestampField, timestamp));
560568
final IndexWriter splitWriter = random().nextBoolean() ? writer1 : writer2;
561-
if (random().nextBoolean()) {
562-
fields.add(new SortedNumericDocValuesField("gets", random().nextLong(1000_000L)));
563-
} else {
564-
fields.add(new SortedNumericDocValuesField("posts", random().nextLong(1000_000L)));
569+
var numericFields = ESTestCase.randomSubsetOf(allNumericFields);
570+
for (String f : numericFields) {
571+
fields.add(new NumericDocValuesField(f, random().nextLong(1000L)));
565572
}
566-
fields.add(new NumericDocValuesField("memory", random().nextLong(1000_000L)));
567-
Randomness.shuffle(fields);
568-
splitWriter.addDocument(fields);
569-
if (random().nextInt(100) <= 5) {
570-
splitWriter.commit();
573+
var sortedNumericFields = ESTestCase.randomSubsetOf(allSortedNumericFields);
574+
for (String field : sortedNumericFields) {
575+
int valueCount = 1 + random().nextInt(3);
576+
for (int v = 0; v < valueCount; v++) {
577+
fields.add(new SortedNumericDocValuesField(field, random().nextLong(1000L)));
578+
}
579+
}
580+
var sortedFields = ESTestCase.randomSubsetOf(allSortedFields);
581+
for (String field : sortedFields) {
582+
fields.add(new SortedDocValuesField(field, new BytesRef("v" + random().nextInt(100))));
583+
}
584+
var sortedSetFields = ESTestCase.randomSubsetOf(allSortedSetFields);
585+
for (String field : sortedSetFields) {
586+
int valueCount = 1 + random().nextInt(3);
587+
for (int v = 0; v < valueCount; v++) {
588+
fields.add(new SortedSetDocValuesField(field, new BytesRef("v" + random().nextInt(100))));
589+
}
571590
}
572-
// add to the single writer
573-
singleWriter.addDocument(fields);
574-
if (random().nextInt(100) <= 5) {
575-
singleWriter.commit();
591+
List<String> binaryFields = ESTestCase.randomSubsetOf(allBinaryFields);
592+
for (String field : binaryFields) {
593+
fields.add(new BinaryDocValuesField(field, new BytesRef("b" + random().nextInt(100))));
594+
}
595+
for (IndexWriter writer : List.of(splitWriter, singleWriter)) {
596+
Randomness.shuffle(fields);
597+
writer.addDocument(fields);
598+
if (random().nextInt(100) <= 5) {
599+
writer.commit();
600+
}
576601
}
577602
}
578603
if (random().nextBoolean()) {
@@ -595,43 +620,92 @@ public DocValuesFormat getDocValuesFormatForField(String field) {
595620
for (int i = 0; i < reader1.leaves().size(); i++) {
596621
LeafReader leaf1 = reader1.leaves().get(i).reader();
597622
LeafReader leaf2 = reader2.leaves().get(i).reader();
598-
duelAssertNumericField(leaf1, leaf2, "gets");
599-
duelAssertNumericField(leaf1, leaf2, "posts");
600-
duelAssertNumericField(leaf1, leaf2, "memory");
601-
duelAssertNumericField(leaf1, leaf2, "@timestamp");
623+
for (String f : CollectionUtils.appendToCopy(allSortedNumericFields, timestampField)) {
624+
var dv1 = leaf1.getNumericDocValues(f);
625+
var dv2 = leaf2.getNumericDocValues(f);
626+
if (dv1 == null) {
627+
assertNull(dv2);
628+
continue;
629+
}
630+
assertNotNull(dv2);
631+
while (dv1.nextDoc() != NumericDocValues.NO_MORE_DOCS) {
632+
assertNotEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
633+
assertEquals(dv1.docID(), dv2.docID());
634+
assertEquals(dv1.longValue(), dv2.longValue());
635+
}
636+
assertEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
637+
}
638+
for (String f : CollectionUtils.appendToCopy(allSortedNumericFields, timestampField)) {
639+
var dv1 = leaf1.getSortedNumericDocValues(f);
640+
var dv2 = leaf2.getSortedNumericDocValues(f);
641+
if (dv1 == null) {
642+
assertNull(dv2);
643+
continue;
644+
}
645+
assertNotNull(dv2);
646+
while (dv1.nextDoc() != NumericDocValues.NO_MORE_DOCS) {
647+
assertNotEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
648+
assertEquals(dv1.docID(), dv2.docID());
649+
assertEquals(dv1.docValueCount(), dv2.docValueCount());
650+
for (int v = 0; v < dv1.docValueCount(); v++) {
651+
assertEquals(dv1.nextValue(), dv2.nextValue());
652+
}
653+
}
654+
assertEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
655+
}
656+
for (String f : CollectionUtils.appendToCopy(allSortedFields, hostnameField)) {
657+
var dv1 = leaf1.getSortedDocValues(f);
658+
var dv2 = leaf2.getSortedDocValues(f);
659+
if (dv1 == null) {
660+
assertNull(dv2);
661+
continue;
662+
}
663+
assertNotNull(dv2);
664+
while (dv1.nextDoc() != SortedDocValues.NO_MORE_DOCS) {
665+
assertNotEquals(SortedDocValues.NO_MORE_DOCS, dv2.nextDoc());
666+
assertEquals(dv1.docID(), dv2.docID());
667+
assertEquals(dv1.lookupOrd(dv1.ordValue()), dv2.lookupOrd(dv2.ordValue()));
668+
}
669+
assertEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
670+
}
671+
for (String f : allSortedSetFields) {
672+
var dv1 = leaf1.getSortedSetDocValues(f);
673+
var dv2 = leaf2.getSortedSetDocValues(f);
674+
if (dv1 == null) {
675+
assertNull(dv2);
676+
continue;
677+
}
678+
assertNotNull(dv2);
679+
while (dv1.nextDoc() != SortedDocValues.NO_MORE_DOCS) {
680+
assertNotEquals(SortedDocValues.NO_MORE_DOCS, dv2.nextDoc());
681+
assertEquals(dv1.docID(), dv2.docID());
682+
assertEquals(dv1.docValueCount(), dv2.docValueCount());
683+
for (int v = 0; v < dv1.docValueCount(); v++) {
684+
assertEquals(dv1.lookupOrd(dv1.nextOrd()), dv2.lookupOrd(dv2.nextOrd()));
685+
}
686+
}
687+
assertEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
688+
}
689+
for (String f : allBinaryFields) {
690+
var dv1 = leaf1.getBinaryDocValues(f);
691+
var dv2 = leaf2.getBinaryDocValues(f);
692+
if (dv1 == null) {
693+
assertNull(dv2);
694+
continue;
695+
}
696+
assertNotNull(dv2);
697+
while (dv1.nextDoc() != SortedDocValues.NO_MORE_DOCS) {
698+
assertNotEquals(SortedDocValues.NO_MORE_DOCS, dv2.nextDoc());
699+
assertEquals(dv1.docID(), dv2.docID());
700+
assertEquals(dv1.binaryValue(), dv2.binaryValue());
701+
}
702+
assertEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
703+
}
602704
}
603705
}
604706
}
605707
}
606708

607-
static void duelAssertNumericField(LeafReader reader1, LeafReader reader2, String fieldName) throws IOException {
608-
SortedNumericDocValues sdv1 = reader1.getSortedNumericDocValues(fieldName);
609-
SortedNumericDocValues sdv2 = reader2.getSortedNumericDocValues(fieldName);
610-
NumericDocValues dv1;
611-
NumericDocValues dv2;
612-
if (sdv1 != null) {
613-
dv1 = DocValues.unwrapSingleton(sdv1);
614-
assertNotNull(sdv2);
615-
dv2 = DocValues.unwrapSingleton(sdv2);
616-
assertNotNull(dv1);
617-
assertNotNull(dv2);
618-
} else {
619-
assertNull(sdv2);
620-
dv1 = reader1.getNumericDocValues(fieldName);
621-
dv2 = reader2.getNumericDocValues(fieldName);
622-
if (dv1 == null) {
623-
assertNull(dv2);
624-
return;
625-
}
626-
}
627-
while (dv1.nextDoc() != NumericDocValues.NO_MORE_DOCS) {
628-
assertNotEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
629-
assertEquals(dv1.docID(), dv2.docID());
630-
assertEquals(dv1.longValue(), dv2.longValue());
631-
}
632-
assertEquals(NumericDocValues.NO_MORE_DOCS, dv2.nextDoc());
633-
}
634-
635709
private IndexWriterConfig getTimeSeriesIndexWriterConfig(String hostnameField, String timestampField) {
636710
var config = new IndexWriterConfig();
637711
config.setIndexSort(

0 commit comments

Comments
 (0)