Skip to content

Commit a5e3f4b

Browse files
committed
Fix a race condition in Derived Field parsing from search request
Signed-off-by: Rishabh Maurya <[email protected]>
1 parent f8213b8 commit a5e3f4b

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

server/src/main/java/org/opensearch/index/mapper/DefaultDerivedFieldResolver.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.apache.logging.log4j.Logger;
1313
import org.opensearch.common.regex.Regex;
1414
import org.opensearch.index.query.QueryShardContext;
15+
import org.opensearch.ingest.IngestDocument;
1516
import org.opensearch.script.Script;
1617

1718
import java.io.IOException;
@@ -189,9 +190,10 @@ private void initDerivedFieldTypes(Map<String, Object> derivedFieldsObject, List
189190

190191
private Map<String, DerivedFieldType> getAllDerivedFieldTypeFromObject(Map<String, Object> derivedFieldObject) {
191192
Map<String, DerivedFieldType> derivedFieldTypes = new HashMap<>();
193+
// deep copy of derivedFieldObject is required as DocumentMapperParser modifies the map
192194
DocumentMapper documentMapper = queryShardContext.getMapperService()
193195
.documentMapperParser()
194-
.parse(DerivedFieldMapper.CONTENT_TYPE, derivedFieldObject);
196+
.parse(DerivedFieldMapper.CONTENT_TYPE, IngestDocument.deepCopyMap(derivedFieldObject));
195197
if (documentMapper != null && documentMapper.mappers() != null) {
196198
for (Mapper mapper : documentMapper.mappers()) {
197199
if (mapper instanceof DerivedFieldMapper) {

0 commit comments

Comments
 (0)