From 724f6bf8f50affc9e9b0124637196cce679cde73 Mon Sep 17 00:00:00 2001 From: Jack Conradson Date: Tue, 15 Oct 2019 10:21:10 -0700 Subject: [PATCH 1/3] Drop stored scripts with the old style-id --- .../elasticsearch/script/ScriptMetaData.java | 7 +++- .../script/ScriptMetaDataTests.java | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/org/elasticsearch/script/ScriptMetaData.java b/server/src/main/java/org/elasticsearch/script/ScriptMetaData.java index 52a06db582966..b55f87efd6830 100644 --- a/server/src/main/java/org/elasticsearch/script/ScriptMetaData.java +++ b/server/src/main/java/org/elasticsearch/script/ScriptMetaData.java @@ -249,7 +249,12 @@ public static ScriptMetaData fromXContent(XContentParser parser) throws IOExcept source = StoredScriptSource.fromXContent(parser, true); if (exists == null) { - scripts.put(id, source); + // due to a bug (https://github.com/elastic/elasticsearch/issues/47593) + // scripts may have been retained during upgrade that include the old-style + // id of lang#id; these scripts are unreachable after 7.0, so they are dropped + if (id.contains("#") == false) { + scripts.put(id, source); + } } else if (exists.getLang().equals(source.getLang()) == false) { throw new IllegalArgumentException("illegal stored script, id [" + id + "] used for multiple scripts with " + "different languages [" + exists.getLang() + "] and [" + source.getLang() + "]; scripts using the old " + diff --git a/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java b/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java index 7a856ee13b9d3..b42161dda7ffa 100644 --- a/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java +++ b/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java @@ -32,6 +32,9 @@ import java.io.IOException; import java.io.UncheckedIOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; public class ScriptMetaDataTests extends AbstractSerializingTestCase { @@ -168,6 +171,41 @@ public void testLoadEmptyScripts() throws IOException { assertWarnings("empty templates should no longer be used"); } + public void testOldStyleDropped() throws IOException { + XContentBuilder builder = XContentBuilder.builder(XContentType.JSON.xContent()); + + builder.startObject(); + { + builder.startObject("painless#test"); + { + builder.field("lang", "painless"); + builder.field("source", "code"); + } + builder.endObject(); + builder.startObject("lang#test"); + { + builder.field("lang", "test"); + builder.field("source", "code"); + } + builder.endObject(); + builder.startObject("test"); + { + builder.field("lang", "painless"); + builder.field("source", "code"); + } + builder.endObject(); + } + builder.endObject(); + + XContentParser parser = XContentType.JSON.xContent() + .createParser(NamedXContentRegistry.EMPTY, DeprecationHandler.THROW_UNSUPPORTED_OPERATION, + BytesReference.bytes(builder).streamInput()); + ScriptMetaData smd = ScriptMetaData.fromXContent(parser); + assertNull(smd.getStoredScript("painless#test")); + assertNull(smd.getStoredScript("lang#test")); + assertEquals(new StoredScriptSource("painless", "code", Collections.emptyMap()), smd.getStoredScript("test")); + } + @Override protected boolean enableWarningsCheck() { return true; From 1a224c31ceb92f2e299c81d67a323aa3540cb241 Mon Sep 17 00:00:00 2001 From: Jack Conradson Date: Tue, 15 Oct 2019 12:45:41 -0700 Subject: [PATCH 2/3] Fix imports --- .../test/java/org/elasticsearch/script/ScriptMetaDataTests.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java b/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java index b42161dda7ffa..3f819200948f0 100644 --- a/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java +++ b/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java @@ -33,8 +33,6 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.util.Collections; -import java.util.HashMap; -import java.util.Map; public class ScriptMetaDataTests extends AbstractSerializingTestCase { From 3d0bfa9f44e072a0e4b14b521869e625606574f7 Mon Sep 17 00:00:00 2001 From: Jack Conradson Date: Tue, 15 Oct 2019 13:05:27 -0700 Subject: [PATCH 3/3] add another test --- .../test/java/org/elasticsearch/script/ScriptMetaDataTests.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java b/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java index 3f819200948f0..fc0ebe3f23fd6 100644 --- a/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java +++ b/server/src/test/java/org/elasticsearch/script/ScriptMetaDataTests.java @@ -202,6 +202,7 @@ public void testOldStyleDropped() throws IOException { assertNull(smd.getStoredScript("painless#test")); assertNull(smd.getStoredScript("lang#test")); assertEquals(new StoredScriptSource("painless", "code", Collections.emptyMap()), smd.getStoredScript("test")); + assertEquals(1, smd.getStoredScripts().size()); } @Override