Skip to content

Commit ac9262c

Browse files
committed
Add DataSource RepeatingWrapper
1 parent e762ef6 commit ac9262c

File tree

5 files changed

+35
-10
lines changed

5 files changed

+35
-10
lines changed

test/framework/src/main/java/org/elasticsearch/logsdb/datageneration/datasource/DataSourceHandler.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ default DataSourceResponse.ArrayWrapper handle(DataSourceRequest.ArrayWrapper re
5454
return null;
5555
}
5656

57+
default DataSourceResponse.RepeatingWrapper handle(DataSourceRequest.RepeatingWrapper request) {
58+
return null;
59+
}
60+
5761
default DataSourceResponse.ChildFieldGenerator handle(DataSourceRequest.ChildFieldGenerator request) {
5862
return null;
5963
}

test/framework/src/main/java/org/elasticsearch/logsdb/datageneration/datasource/DataSourceRequest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,12 @@ public DataSourceResponse.ArrayWrapper accept(DataSourceHandler handler) {
8585
}
8686
}
8787

88+
record RepeatingWrapper() implements DataSourceRequest<DataSourceResponse.RepeatingWrapper> {
89+
public DataSourceResponse.RepeatingWrapper accept(DataSourceHandler handler) {
90+
return handler.handle(this);
91+
}
92+
}
93+
8894
record ChildFieldGenerator(DataGeneratorSpecification specification)
8995
implements
9096
DataSourceRequest<DataSourceResponse.ChildFieldGenerator> {

test/framework/src/main/java/org/elasticsearch/logsdb/datageneration/datasource/DataSourceResponse.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ record NullWrapper(Function<Supplier<Object>, Supplier<Object>> wrapper) impleme
3939

4040
record ArrayWrapper(Function<Supplier<Object>, Supplier<Object>> wrapper) implements DataSourceResponse {}
4141

42+
record RepeatingWrapper(Function<Supplier<Object>, Supplier<Object>> wrapper) implements DataSourceResponse {}
43+
4244
interface ChildFieldGenerator extends DataSourceResponse {
4345
int generateChildFieldCount();
4446

test/framework/src/main/java/org/elasticsearch/logsdb/datageneration/datasource/DefaultWrappersHandler.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.elasticsearch.test.ESTestCase;
1313

14+
import java.util.HashSet;
1415
import java.util.function.Function;
1516
import java.util.function.Supplier;
1617
import java.util.stream.IntStream;
@@ -26,6 +27,11 @@ public DataSourceResponse.ArrayWrapper handle(DataSourceRequest.ArrayWrapper ign
2627
return new DataSourceResponse.ArrayWrapper(wrapInArray());
2728
}
2829

30+
@Override
31+
public DataSourceResponse.RepeatingWrapper handle(DataSourceRequest.RepeatingWrapper ignored) {
32+
return new DataSourceResponse.RepeatingWrapper(repeatValues());
33+
}
34+
2935
private static Function<Supplier<Object>, Supplier<Object>> injectNulls() {
3036
// Inject some nulls but majority of data should be non-null (as it likely is in reality).
3137
return (values) -> () -> ESTestCase.randomDouble() <= 0.05 ? null : values.get();
@@ -41,4 +47,19 @@ private static Function<Supplier<Object>, Supplier<Object>> wrapInArray() {
4147
return values.get();
4248
};
4349
}
50+
51+
private static Function<Supplier<Object>, Supplier<Object>> repeatValues() {
52+
return (values) -> {
53+
HashSet<Object> previousValues = new HashSet<>();
54+
return () -> {
55+
if (ESTestCase.randomBoolean()) {
56+
return ESTestCase.randomFrom(previousValues);
57+
} else {
58+
var value = values.get();
59+
previousValues.add(value);
60+
return value;
61+
}
62+
};
63+
};
64+
}
4465
}

test/framework/src/main/java/org/elasticsearch/logsdb/datageneration/fields/leaf/CountedKeywordFieldDataGenerator.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import org.elasticsearch.logsdb.datageneration.FieldDataGenerator;
1313
import org.elasticsearch.logsdb.datageneration.datasource.DataSource;
1414
import org.elasticsearch.logsdb.datageneration.datasource.DataSourceRequest;
15-
import org.elasticsearch.test.ESTestCase;
1615

1716
import java.util.HashSet;
1817
import java.util.Set;
@@ -26,16 +25,9 @@ public CountedKeywordFieldDataGenerator(String fieldName, DataSource dataSource)
2625
var strings = dataSource.get(new DataSourceRequest.StringGenerator());
2726
var nulls = dataSource.get(new DataSourceRequest.NullWrapper());
2827
var arrays = dataSource.get(new DataSourceRequest.ArrayWrapper());
28+
var repeats = dataSource.get(new DataSourceRequest.RepeatingWrapper());
2929

30-
this.valueGenerator = arrays.wrapper().compose(nulls.wrapper()).apply(() -> {
31-
if (previousStrings.size() > 0 && ESTestCase.randomBoolean()) {
32-
return ESTestCase.randomFrom(previousStrings);
33-
} else {
34-
String value = strings.generator().get();
35-
previousStrings.add(value);
36-
return value;
37-
}
38-
});
30+
this.valueGenerator = arrays.wrapper().compose(nulls.wrapper().compose(repeats.wrapper())).apply(() -> strings.generator().get());
3931
}
4032

4133
@Override

0 commit comments

Comments
 (0)