Handle index.mapping.ignore_malformed in downsampling (#119134)

This commit is contained in:
Oleksandr Kolomiiets 2024-12-23 10:48:20 -08:00 committed by GitHub
parent 21fe5a9749
commit c16bcb64a1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 2 deletions

View file

@ -58,6 +58,7 @@ import org.elasticsearch.index.IndexMode;
import org.elasticsearch.index.IndexNotFoundException;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.index.mapper.DateFieldMapper;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.MappedFieldType;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.TimeSeriesParams;
@ -723,6 +724,9 @@ public class TransportDownsampleAction extends AcknowledgedTransportMasterNodeAc
if (mapping.get("format") != null) {
builder.field("format", mapping.get("format"));
}
if (mapping.get("ignore_malformed") != null) {
builder.field("ignore_malformed", mapping.get("ignore_malformed"));
}
}
} catch (IOException e) {
throw new ElasticsearchException("Unable to create timestamp field mapping for field [" + timestampField + "]", e);
@ -897,6 +901,12 @@ public class TransportDownsampleAction extends AcknowledgedTransportMasterNodeAc
sourceIndexMetadata.getSettings().get(MapperService.INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING.getKey())
);
}
if (sourceIndexMetadata.getSettings().hasValue(FieldMapper.IGNORE_MALFORMED_SETTING.getKey())) {
builder.put(
FieldMapper.IGNORE_MALFORMED_SETTING.getKey(),
sourceIndexMetadata.getSettings().get(FieldMapper.IGNORE_MALFORMED_SETTING.getKey())
);
}
CreateIndexClusterStateUpdateRequest createIndexClusterStateUpdateRequest = new CreateIndexClusterStateUpdateRequest(
"downsample",

View file

@ -49,6 +49,7 @@ import org.elasticsearch.index.IndexService;
import org.elasticsearch.index.IndexSettings;
import org.elasticsearch.index.engine.VersionConflictEngineException;
import org.elasticsearch.index.mapper.DateFieldMapper;
import org.elasticsearch.index.mapper.FieldMapper;
import org.elasticsearch.index.mapper.MapperService;
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper;
import org.elasticsearch.index.mapper.TimeSeriesParams;
@ -201,14 +202,19 @@ public class DownsampleActionSingleNodeTests extends ESSingleNodeTestCase {
IndexSettings.TIME_SERIES_START_TIME.getKey(),
DateFieldMapper.DEFAULT_DATE_TIME_FORMATTER.formatMillis(Instant.ofEpochMilli(startTime).toEpochMilli())
)
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2106-01-08T23:40:53.384Z");
.put(IndexSettings.TIME_SERIES_END_TIME.getKey(), "2106-01-08T23:40:53.384Z")
.put(FieldMapper.IGNORE_MALFORMED_SETTING.getKey(), randomBoolean());
if (randomBoolean()) {
settings.put(IndexMetadata.SETTING_INDEX_HIDDEN, randomBoolean());
}
XContentBuilder mapping = jsonBuilder().startObject().startObject("_doc").startObject("properties");
mapping.startObject(FIELD_TIMESTAMP).field("type", "date").endObject();
mapping.startObject(FIELD_TIMESTAMP).field("type", "date");
if (settings.get(FieldMapper.IGNORE_MALFORMED_SETTING.getKey()).equals("true")) {
mapping.field("ignore_malformed", false);
}
mapping.endObject();
// Dimensions
mapping.startObject(FIELD_DIMENSION_1).field("type", "keyword").field("time_series_dimension", true).endObject();