Skip to content

Commit dd5ac0f

Browse files
authored
Support recovery source new setting in custom index mode (#112654)
This commit fixes the support of the recovery source setting added in #111824 for mappings that use a specific index mode and an explicit _source definition.
1 parent 6dcca8c commit dd5ac0f

File tree

2 files changed

+70
-3
lines changed

2 files changed

+70
-3
lines changed

server/src/main/java/org/elasticsearch/index/mapper/SourceFieldMapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,9 @@ public SourceFieldMapper build() {
236236
}
237237
if (isDefault()) {
238238
return switch (indexMode) {
239-
case TIME_SERIES -> TSDB_DEFAULT;
240-
case LOGSDB -> LOGSDB_DEFAULT;
241-
default -> DEFAULT;
239+
case TIME_SERIES -> enableRecoverySource ? TSDB_DEFAULT : TSDB_DEFAULT_NO_RECOVERY_SOURCE;
240+
case LOGSDB -> enableRecoverySource ? LOGSDB_DEFAULT : LOGSDB_DEFAULT_NO_RECOVERY_SOURCE;
241+
default -> enableRecoverySource ? DEFAULT : DEFAULT_NO_RECOVERY_SOURCE;
242242
};
243243
}
244244
if (supportsNonDefaultParameterValues == false) {

server/src/test/java/org/elasticsearch/index/mapper/SourceFieldMapperTests.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,28 @@ public void testRecoverySourceWithLogs() throws IOException {
442442
}
443443
}
444444

445+
public void testRecoverySourceWithLogsCustom() throws IOException {
446+
XContentBuilder mappings = topMapping(b -> b.startObject(SourceFieldMapper.NAME).field("mode", "synthetic").endObject());
447+
{
448+
Settings settings = Settings.builder().put(IndexSettings.MODE.getKey(), IndexMode.LOGSDB.getName()).build();
449+
MapperService mapperService = createMapperService(settings, mappings);
450+
DocumentMapper docMapper = mapperService.documentMapper();
451+
ParsedDocument doc = docMapper.parse(source(b -> { b.field("@timestamp", "2012-02-13"); }));
452+
assertNotNull(doc.rootDoc().getField("_recovery_source"));
453+
assertThat(doc.rootDoc().getField("_recovery_source").binaryValue(), equalTo(new BytesRef("{\"@timestamp\":\"2012-02-13\"}")));
454+
}
455+
{
456+
Settings settings = Settings.builder()
457+
.put(IndexSettings.MODE.getKey(), IndexMode.LOGSDB.getName())
458+
.put(INDICES_RECOVERY_SOURCE_ENABLED_SETTING.getKey(), false)
459+
.build();
460+
MapperService mapperService = createMapperService(settings, mappings);
461+
DocumentMapper docMapper = mapperService.documentMapper();
462+
ParsedDocument doc = docMapper.parse(source(b -> b.field("@timestamp", "2012-02-13")));
463+
assertNull(doc.rootDoc().getField("_recovery_source"));
464+
}
465+
}
466+
445467
public void testRecoverySourceWithTimeSeries() throws IOException {
446468
{
447469
Settings settings = Settings.builder()
@@ -477,4 +499,49 @@ public void testRecoverySourceWithTimeSeries() throws IOException {
477499
assertNull(doc.rootDoc().getField("_recovery_source"));
478500
}
479501
}
502+
503+
public void testRecoverySourceWithTimeSeriesCustom() throws IOException {
504+
String mappings = """
505+
{
506+
"_doc" : {
507+
"_source" : {
508+
"mode" : "synthetic"
509+
},
510+
"properties": {
511+
"field": {
512+
"type": "keyword",
513+
"time_series_dimension": true
514+
}
515+
}
516+
}
517+
}
518+
""";
519+
{
520+
Settings settings = Settings.builder()
521+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.getName())
522+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "field")
523+
.build();
524+
MapperService mapperService = createMapperService(settings, mappings);
525+
DocumentMapper docMapper = mapperService.documentMapper();
526+
ParsedDocument doc = docMapper.parse(source("123", b -> b.field("@timestamp", "2012-02-13").field("field", "value1"), null));
527+
assertNotNull(doc.rootDoc().getField("_recovery_source"));
528+
assertThat(
529+
doc.rootDoc().getField("_recovery_source").binaryValue(),
530+
equalTo(new BytesRef("{\"@timestamp\":\"2012-02-13\",\"field\":\"value1\"}"))
531+
);
532+
}
533+
{
534+
Settings settings = Settings.builder()
535+
.put(IndexSettings.MODE.getKey(), IndexMode.TIME_SERIES.getName())
536+
.put(IndexMetadata.INDEX_ROUTING_PATH.getKey(), "field")
537+
.put(INDICES_RECOVERY_SOURCE_ENABLED_SETTING.getKey(), false)
538+
.build();
539+
MapperService mapperService = createMapperService(settings, mappings);
540+
DocumentMapper docMapper = mapperService.documentMapper();
541+
ParsedDocument doc = docMapper.parse(
542+
source("123", b -> b.field("@timestamp", "2012-02-13").field("field", randomAlphaOfLength(5)), null)
543+
);
544+
assertNull(doc.rootDoc().getField("_recovery_source"));
545+
}
546+
}
480547
}

0 commit comments

Comments
 (0)