Skip to content

Commit c7bd242

Browse files
committed
Handle cases when settings or mappings are invalid.
1 parent 60ae0ca commit c7bd242

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/SyntheticSourceIndexSettingsProvider.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
import org.elasticsearch.common.compress.CompressedXContent;
1616
import org.elasticsearch.common.settings.Settings;
1717
import org.elasticsearch.core.CheckedFunction;
18+
import org.elasticsearch.core.Strings;
1819
import org.elasticsearch.index.IndexMode;
1920
import org.elasticsearch.index.IndexSettingProvider;
2021
import org.elasticsearch.index.IndexSettings;
2122
import org.elasticsearch.index.IndexVersion;
2223
import org.elasticsearch.index.mapper.MapperService;
2324

2425
import java.io.IOException;
25-
import java.io.UncheckedIOException;
2626
import java.time.Instant;
2727
import java.util.List;
2828

@@ -85,8 +85,11 @@ boolean newIndexHasSyntheticSourceUsage(
8585
}
8686
mapperService.merge(MapperService.SINGLE_MAPPING_NAME, combinedTemplateMappings, MapperService.MergeReason.INDEX_TEMPLATE);
8787
return mapperService.documentMapper().sourceMapper().isSynthetic();
88-
} catch (IOException e) {
89-
throw new UncheckedIOException(e);
88+
} catch (AssertionError | Exception e) {
89+
// In case invalid mappings or setting are provided, then mapper service creation can fail.
90+
// In that case it is ok to return false here. The index creation will fail anyway later, so need to fallback to stored source.
91+
LOGGER.info(() -> Strings.format("unable to create mapper service for index [%s]", indexName), e);
92+
return false;
9093
}
9194
}
9295

x-pack/plugin/logsdb/src/test/java/org/elasticsearch/xpack/logsdb/SyntheticSourceIndexSettingsProviderTests.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,43 @@ public void testNewIndexHasSyntheticSourceUsageTimeSeries() throws IOException {
187187
}
188188
}
189189

190+
public void testNewIndexHasSyntheticSourceUsage_invalidSettings() throws IOException {
191+
String dataStreamName = "logs-app1";
192+
String indexName = DataStream.getDefaultBackingIndexName(dataStreamName, 0);
193+
Settings settings = Settings.builder().put("index.soft_deletes.enabled", false).build();
194+
{
195+
String mapping = """
196+
{
197+
"_doc": {
198+
"_source": {
199+
"mode": "synthetic"
200+
},
201+
"properties": {
202+
"my_field": {
203+
"type": "keyword"
204+
}
205+
}
206+
}
207+
}
208+
""";
209+
boolean result = provider.newIndexHasSyntheticSourceUsage(indexName, false, settings, List.of(new CompressedXContent(mapping)));
210+
assertFalse(result);
211+
}
212+
{
213+
String mapping = """
214+
{
215+
"_doc": {
216+
"properties": {
217+
"my_field": {
218+
"type": "keyword"
219+
}
220+
}
221+
}
222+
}
223+
""";
224+
boolean result = provider.newIndexHasSyntheticSourceUsage(indexName, false, settings, List.of(new CompressedXContent(mapping)));
225+
assertFalse(result);
226+
}
227+
}
228+
190229
}

0 commit comments

Comments
 (0)