Skip to content

Commit de55b4d

Browse files
authored
Add types deprecation to script contexts (#37554)
This adds deprecation to _type in the script contexts for ingest and update. This adds a DeprecationMap that wraps the ctx Map containing _type for these specific contexts.
1 parent 6846666 commit de55b4d

File tree

14 files changed

+133
-13
lines changed

14 files changed

+133
-13
lines changed

modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/ScriptProcessor.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,16 @@
3030
import org.elasticsearch.ingest.AbstractProcessor;
3131
import org.elasticsearch.ingest.IngestDocument;
3232
import org.elasticsearch.ingest.Processor;
33+
import org.elasticsearch.script.DeprecationMap;
3334
import org.elasticsearch.script.IngestScript;
3435
import org.elasticsearch.script.Script;
3536
import org.elasticsearch.script.ScriptException;
3637
import org.elasticsearch.script.ScriptService;
3738

3839
import java.io.InputStream;
3940
import java.util.Arrays;
41+
import java.util.Collections;
42+
import java.util.HashMap;
4043
import java.util.Map;
4144

4245
import static org.elasticsearch.ingest.ConfigurationUtils.newConfigurationException;
@@ -46,6 +49,16 @@
4649
*/
4750
public final class ScriptProcessor extends AbstractProcessor {
4851

52+
private static final Map<String, String> DEPRECATIONS;
53+
static {
54+
Map<String, String> deprecations = new HashMap<>();
55+
deprecations.put(
56+
"_type",
57+
"[types removal] Looking up doc types [_type] in scripts is deprecated."
58+
);
59+
DEPRECATIONS = Collections.unmodifiableMap(deprecations);
60+
}
61+
4962
public static final String TYPE = "script";
5063

5164
private final Script script;
@@ -72,7 +85,8 @@ public final class ScriptProcessor extends AbstractProcessor {
7285
@Override
7386
public IngestDocument execute(IngestDocument document) {
7487
IngestScript.Factory factory = scriptService.compile(script, IngestScript.CONTEXT);
75-
factory.newInstance(script.getParams()).execute(document.getSourceAndMetadata());
88+
factory.newInstance(script.getParams()).execute(
89+
new DeprecationMap(document.getSourceAndMetadata(), DEPRECATIONS, "script_processor"));
7690
CollectionUtils.ensureNoSelfReferences(document.getSourceAndMetadata(), "ingest script");
7791
return document;
7892
}

modules/ingest-common/src/test/java/org/elasticsearch/ingest/common/ScriptProcessorTests.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,28 @@ Script.DEFAULT_SCRIPT_LANG, new MockScriptEngine(
7474
assertThat(ingestDocument.getSourceAndMetadata(), hasKey("bytes_total"));
7575
assertThat(ingestDocument.getSourceAndMetadata().get("bytes_total"), is(randomBytesTotal));
7676
}
77+
78+
public void testTypeDeprecation() throws Exception {
79+
String scriptName = "script";
80+
ScriptService scriptService = new ScriptService(Settings.builder().build(),
81+
Collections.singletonMap(
82+
Script.DEFAULT_SCRIPT_LANG, new MockScriptEngine(
83+
Script.DEFAULT_SCRIPT_LANG,
84+
Collections.singletonMap(
85+
scriptName, ctx -> {
86+
ctx.get("_type");
87+
return null;
88+
}
89+
),
90+
Collections.emptyMap()
91+
)
92+
),
93+
new HashMap<>(ScriptModule.CORE_CONTEXTS)
94+
);
95+
Script script = new Script(ScriptType.INLINE, Script.DEFAULT_SCRIPT_LANG, scriptName, Collections.emptyMap());
96+
IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), Collections.emptyMap());
97+
ScriptProcessor processor = new ScriptProcessor(randomAlphaOfLength(10), script, scriptService);
98+
processor.execute(ingestDocument);
99+
assertWarnings("[types removal] Looking up doc types [_type] in scripts is deprecated.");
100+
}
77101
}

modules/reindex/src/test/java/org/elasticsearch/index/reindex/AbstractAsyncBulkByScrollActionScriptTestCase.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ protected <T extends ActionRequest> T applyScript(Consumer<Map<String, Object>>
5858
UpdateScript.Factory factory = (params, ctx) -> new UpdateScript(Collections.emptyMap(), ctx) {
5959
@Override
6060
public void execute() {
61-
scriptBody.accept(ctx);
61+
scriptBody.accept(getCtx());
6262
}
6363
};;
6464
when(scriptService.compile(any(), eq(UpdateScript.CONTEXT))).thenReturn(factory);
@@ -67,6 +67,11 @@ public void execute() {
6767
return (result != null) ? (T) result.self() : null;
6868
}
6969

70+
public void testTypeDeprecation() {
71+
applyScript((Map<String, Object> ctx) -> ctx.get("_type"));
72+
assertWarnings("[types removal] Looking up doc types [_type] in scripts is deprecated.");
73+
}
74+
7075
public void testScriptAddingJunkToCtxIsError() {
7176
try {
7277
applyScript((Map<String, Object> ctx) -> ctx.put("junk", "junk"));

server/src/main/java/org/elasticsearch/ingest/ConditionalProcessor.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Arrays;
2424
import java.util.Collection;
2525
import java.util.Collections;
26+
import java.util.HashMap;
2627
import java.util.Iterator;
2728
import java.util.List;
2829
import java.util.ListIterator;
@@ -31,12 +32,24 @@
3132
import java.util.concurrent.TimeUnit;
3233
import java.util.function.LongSupplier;
3334
import java.util.stream.Collectors;
35+
36+
import org.elasticsearch.script.DeprecationMap;
3437
import org.elasticsearch.script.IngestConditionalScript;
3538
import org.elasticsearch.script.Script;
3639
import org.elasticsearch.script.ScriptService;
3740

3841
public class ConditionalProcessor extends AbstractProcessor {
3942

43+
private static final Map<String, String> DEPRECATIONS;
44+
static {
45+
Map<String, String> deprecations = new HashMap<>();
46+
deprecations.put(
47+
"_type",
48+
"[types removal] Looking up doc types [_type] in scripts is deprecated."
49+
);
50+
DEPRECATIONS = Collections.unmodifiableMap(deprecations);
51+
}
52+
4053
static final String TYPE = "conditional";
4154

4255
private final Script condition;
@@ -81,7 +94,8 @@ public IngestDocument execute(IngestDocument ingestDocument) throws Exception {
8194
boolean evaluate(IngestDocument ingestDocument) {
8295
IngestConditionalScript script =
8396
scriptService.compile(condition, IngestConditionalScript.CONTEXT).newInstance(condition.getParams());
84-
return script.execute(new UnmodifiableIngestData(ingestDocument.getSourceAndMetadata()));
97+
return script.execute(new UnmodifiableIngestData(
98+
new DeprecationMap(ingestDocument.getSourceAndMetadata(), DEPRECATIONS, "conditional-processor")));
8599
}
86100

87101
Processor getProcessor() {

server/src/main/java/org/elasticsearch/script/AbstractSortScript.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ abstract class AbstractSortScript implements ScorerAware {
6666
this.leafLookup = lookup.getLeafSearchLookup(leafContext);
6767
Map<String, Object> parameters = new HashMap<>(params);
6868
parameters.putAll(leafLookup.asMap());
69-
this.params = new DeprecationMap(parameters, DEPRECATIONS);
69+
this.params = new DeprecationMap(parameters, DEPRECATIONS, "sort-script");
7070
}
7171

7272
protected AbstractSortScript() {

server/src/main/java/org/elasticsearch/script/AggregationScript.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public abstract class AggregationScript implements ScorerAware {
7171
private Object value;
7272

7373
public AggregationScript(Map<String, Object> params, SearchLookup lookup, LeafReaderContext leafContext) {
74-
this.params = new DeprecationMap(new HashMap<>(params), DEPRECATIONS);
74+
this.params = new DeprecationMap(new HashMap<>(params), DEPRECATIONS, "aggregation-script");
7575
this.leafLookup = lookup.getLeafSearchLookup(leafContext);
7676
this.params.putAll(leafLookup.asMap());
7777
}

server/src/main/java/org/elasticsearch/script/DeprecationMap.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,12 @@ public final class DeprecationMap implements Map<String, Object> {
3535

3636
private final Map<String, String> deprecations;
3737

38-
public DeprecationMap(Map<String, Object> delegate, Map<String, String> deprecations) {
38+
private final String logKeyPrefix;
39+
40+
public DeprecationMap(Map<String, Object> delegate, Map<String, String> deprecations, String logKeyPrefix) {
3941
this.delegate = delegate;
4042
this.deprecations = deprecations;
43+
this.logKeyPrefix = logKeyPrefix;
4144
}
4245

4346
@Override
@@ -64,7 +67,7 @@ public boolean containsValue(final Object value) {
6467
public Object get(final Object key) {
6568
String deprecationMessage = deprecations.get(key);
6669
if (deprecationMessage != null) {
67-
deprecationLogger.deprecated(deprecationMessage);
70+
deprecationLogger.deprecatedAndMaybeLog(logKeyPrefix + "_" + key, deprecationMessage);
6871
}
6972
return delegate.get(key);
7073
}

server/src/main/java/org/elasticsearch/script/FieldScript.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public FieldScript(Map<String, Object> params, SearchLookup lookup, LeafReaderCo
6363
this.leafLookup = lookup.getLeafSearchLookup(leafContext);
6464
params = new HashMap<>(params);
6565
params.putAll(leafLookup.asMap());
66-
this.params = new DeprecationMap(params, DEPRECATIONS);
66+
this.params = new DeprecationMap(params, DEPRECATIONS, "field-script");
6767
}
6868

6969
// for expression engine

server/src/main/java/org/elasticsearch/script/ScoreScript.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public ScoreScript(Map<String, Object> params, SearchLookup lookup, LeafReaderCo
7373
this.leafLookup = lookup.getLeafSearchLookup(leafContext);
7474
params = new HashMap<>(params);
7575
params.putAll(leafLookup.asMap());
76-
this.params = new DeprecationMap(params, DEPRECATIONS);
76+
this.params = new DeprecationMap(params, DEPRECATIONS, "score-script");
7777
}
7878
}
7979

server/src/main/java/org/elasticsearch/script/ScriptedMetricAggContexts.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public MapScript(Map<String, Object> params, Map<String, Object> state, SearchLo
9595
if (leafLookup != null) {
9696
params = new HashMap<>(params); // copy params so we aren't modifying input
9797
params.putAll(leafLookup.asMap()); // add lookup vars
98-
params = new DeprecationMap(params, DEPRECATIONS); // wrap with deprecations
98+
params = new DeprecationMap(params, DEPRECATIONS, "map-script"); // wrap with deprecations
9999
}
100100
this.params = params;
101101
}

0 commit comments

Comments
 (0)