Skip to content

Commit

Permalink
adding some more tests and fix
Browse files Browse the repository at this point in the history
Signed-off-by: Bharathwaj G <bharath78910@gmail.com>
  • Loading branch information
bharath-techie committed Jul 1, 2024
1 parent ed01cc0 commit 8263b0b
Show file tree
Hide file tree
Showing 5 changed files with 450 additions and 1 deletion.
1 change: 0 additions & 1 deletion distribution/src/config/jvm.options
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,3 @@ ${error.file}

# HDFS ForkJoinPool.common() support by SecurityManager
-Djava.util.concurrent.ForkJoinPool.common.threadFactory=org.opensearch.secure_sm.SecuredForkJoinWorkerThreadFactory
-Dopensearch.experimental.feature.composite_index.star_tree.enabled=true
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package org.opensearch.index.codec;public class CompositeCodecIT {
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.opensearch.index.compositeindex.datacube.DateDimension;
import org.opensearch.index.compositeindex.datacube.MetricStat;
import org.opensearch.index.compositeindex.datacube.startree.StarTreeFieldConfiguration;
import org.opensearch.index.compositeindex.datacube.startree.StarTreeIndexSettings;
import org.opensearch.indices.IndicesService;
import org.opensearch.test.OpenSearchIntegTestCase;
import org.junit.After;
Expand Down Expand Up @@ -89,6 +90,55 @@ private static XContentBuilder createMinimalTestMapping(boolean invalidDim, bool
}
}

private static XContentBuilder createMaxDimTestMapping() {
try {
return jsonBuilder().startObject()
.startObject("composite")
.startObject("startree-1")
.field("type", "star_tree")
.startObject("config")
.startArray("ordered_dimensions")
.startObject()
.field("name", "timestamp")
.startArray("calendar_intervals")
.value("day")
.value("month")
.endArray()
.endObject()
.startObject()
.field("name", "dim2")
.endObject()
.startObject()
.field("name", "dim3")
.endObject()
.endArray()
.startArray("metrics")
.startObject()
.field("name", "dim2")
.endObject()
.endArray()
.endObject()
.endObject()
.endObject()
.startObject("properties")
.startObject("timestamp")
.field("type", "date")
.endObject()
.startObject("dim2")
.field("type", "integer")
.field("doc_values", true)
.endObject()
.startObject("dim3")
.field("type", "integer")
.field("doc_values", true)
.endObject()
.endObject()
.endObject();
} catch (IOException e) {
throw new IllegalStateException(e);
}
}

private static XContentBuilder createTestMappingWithoutStarTree(boolean invalidDim, boolean invalidMetric, boolean keywordDim) {
try {
return jsonBuilder().startObject()
Expand Down Expand Up @@ -329,6 +379,32 @@ public void testInvalidDimCompositeIndex() {
);
}

public void testMaxDimsCompositeIndex() {
MapperParsingException ex = expectThrows(
MapperParsingException.class,
() -> prepareCreate(TEST_INDEX).setMapping(createMaxDimTestMapping())
.setSettings(Settings.builder().put(StarTreeIndexSettings.STAR_TREE_MAX_DIMENSIONS_SETTING.getKey(), 2))
.get()
);
assertEquals(
"Failed to parse mapping [_doc]: ordered_dimensions cannot have more than 2 dimensions for star tree field [startree-1]",
ex.getMessage()
);
}

public void testMaxCalendarIntervalsCompositeIndex() {
MapperParsingException ex = expectThrows(
MapperParsingException.class,
() -> prepareCreate(TEST_INDEX).setMapping(createMaxDimTestMapping())
.setSettings(Settings.builder().put(StarTreeIndexSettings.STAR_TREE_MAX_DATE_INTERVALS_SETTING.getKey(), 1))
.get()
);
assertEquals(
"Failed to parse mapping [_doc]: At most [1] calendar intervals are allowed in dimension [timestamp]",
ex.getMessage()
);
}

public void testUnsupportedDim() {
MapperParsingException ex = expectThrows(
MapperParsingException.class,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
package org.opensearch.index.mapper;

import org.opensearch.common.compress.CompressedXContent;
import org.opensearch.common.settings.Settings;
import org.opensearch.common.util.FeatureFlags;
import org.opensearch.common.xcontent.XContentFactory;
import org.opensearch.core.common.bytes.BytesArray;
import org.opensearch.core.xcontent.MediaTypeRegistry;
Expand All @@ -46,6 +48,7 @@
import java.io.IOException;
import java.util.Collection;

import static org.opensearch.common.util.FeatureFlags.STAR_TREE_INDEX;
import static org.hamcrest.Matchers.containsString;

public class ObjectMapperTests extends OpenSearchSingleNodeTestCase {
Expand Down Expand Up @@ -487,6 +490,76 @@ public void testDerivedFields() throws Exception {
assertEquals("date", mapper.typeName());
}

public void testCompositeFields() throws Exception {
String mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("tweet")
.startObject("composite")
.startObject("startree")
.field("type", "star_tree")
.startObject("config")
.startArray("ordered_dimensions")
.startObject()
.field("name", "@timestamp")
.endObject()
.startObject()
.field("name", "status")
.endObject()
.endArray()
.startArray("metrics")
.startObject()
.field("name", "status")
.endObject()
.startObject()
.field("name", "metric_field")
.endObject()
.endArray()
.endObject()
.endObject()
.endObject()
.startObject("properties")
.startObject("@timestamp")
.field("type", "date")
.endObject()
.startObject("status")
.field("type", "integer")
.endObject()
.startObject("metric_field")
.field("type", "integer")
.endObject()
.endObject()
.endObject()
.endObject()
.toString();

IllegalArgumentException ex = expectThrows(
IllegalArgumentException.class,
() -> createIndex("invalid").mapperService().documentMapperParser().parse("tweet", new CompressedXContent(mapping))
);
assertEquals(
"star tree index is under an experimental feature and can be activated only by enabling opensearch.experimental.feature.composite_index.star_tree.enabled feature flag in the JVM options",
ex.getMessage()
);

final Settings starTreeEnabledSettings = Settings.builder().put(STAR_TREE_INDEX, "true").build();
FeatureFlags.initializeFeatureFlags(starTreeEnabledSettings);

DocumentMapper documentMapper = createIndex("test").mapperService()
.documentMapperParser()
.parse("tweet", new CompressedXContent(mapping));

Mapper mapper = documentMapper.root().getMapper("startree");
assertTrue(mapper instanceof StarTreeMapper);
StarTreeMapper starTreeMapper = (StarTreeMapper) mapper;
assertEquals("star_tree", starTreeMapper.fieldType().typeName());
// Check that field in properties was parsed correctly as well
mapper = documentMapper.root().getMapper("@timestamp");
assertNotNull(mapper);
assertEquals("date", mapper.typeName());

FeatureFlags.initializeFeatureFlags(Settings.EMPTY);
}

@Override
protected Collection<Class<? extends Plugin>> getPlugins() {
return pluginList(InternalSettingsPlugin.class);
Expand Down
Loading

0 comments on commit 8263b0b

Please sign in to comment.