From 9ad5a79b4927d628115c1c04092c524cd4dc863e Mon Sep 17 00:00:00 2001 From: Maytas Monsereenusorn Date: Wed, 9 Aug 2023 23:44:20 -0700 Subject: [PATCH 01/12] Fix Javascript tiered broker selector strategy and Javascript filter for Java 17 --- indexing-service/pom.xml | 4 ++++ .../overlord/setup/JavaScriptWorkerSelectStrategy.java | 2 +- .../setup/JavaScriptWorkerSelectStrategyTest.java | 2 +- pom.xml | 8 +++++++- services/pom.xml | 4 ++++ .../router/JavaScriptTieredBrokerSelectorStrategy.java | 2 +- .../JavaScriptTieredBrokerSelectorStrategyTest.java | 2 +- 7 files changed, 19 insertions(+), 5 deletions(-) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index 480c602a3462..bdfca8703749 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -207,6 +207,10 @@ org.eclipse.aether aether-api + + org.openjdk.nashorn + nashorn-core + junit diff --git a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java index f9cc2da3c74d..24d66d46e627 100644 --- a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java +++ b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java @@ -61,7 +61,7 @@ public JavaScriptWorkerSelectStrategy( private SelectorFunction compileSelectorFunction() { - final ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); + final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); try { ((Compilable) engine).compile("var apply = " + function).eval(); return ((Invocable) engine).getInterface(SelectorFunction.class); diff --git a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java index c767bf64c7a6..0cf20e877a3f 100644 --- a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java +++ b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java @@ -80,7 +80,7 @@ public class JavaScriptWorkerSelectStrategyTest public void checkJdkCompatibility() { // skip tests for newer JDKs without javascript support - Assume.assumeNotNull(new ScriptEngineManager().getEngineByName("javascript")); + Assume.assumeNotNull(new ScriptEngineManager().getEngineByName("nashorn")); } @Test diff --git a/pom.xml b/pom.xml index 2bb57fe7256b..342d30febcb5 100644 --- a/pom.xml +++ b/pom.xml @@ -112,6 +112,7 @@ 5.13.0 5.13.0 3.3.6 + 15.4 4.3.1 1.12.497 2.8.0 @@ -1258,6 +1259,11 @@ + + org.openjdk.nashorn + nashorn-core + ${nashorn.version} + @@ -1446,7 +1452,7 @@ org.codehaus.mojo animal-sniffer-maven-plugin - 1.17 + 1.23 check-java-api diff --git a/services/pom.xml b/services/pom.xml index 6b10577c59dd..36b30f479e72 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -207,6 +207,10 @@ javax.xml.bind jaxb-api + + org.openjdk.nashorn + nashorn-core + org.apache.druid diff --git a/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java b/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java index 347fcf0c1c88..36b63fc36bff 100644 --- a/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java +++ b/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java @@ -59,7 +59,7 @@ public JavaScriptTieredBrokerSelectorStrategy( private SelectorFunction compileSelectorFunction() { - final ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); + final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); try { ((Compilable) engine).compile("var apply = " + function).eval(); return ((Invocable) engine).getInterface(SelectorFunction.class); diff --git a/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java b/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java index fa8e931f0cdb..64aaebe119ec 100644 --- a/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java +++ b/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java @@ -55,7 +55,7 @@ public class JavaScriptTieredBrokerSelectorStrategyTest public void checkJdkCompatibility() { // skip tests for newer JDKs without javascript support - Assume.assumeNotNull(new ScriptEngineManager().getEngineByName("javascript")); + Assume.assumeNotNull(new ScriptEngineManager().getEngineByName("nashorn")); } @Test From 48b9abcb8deb4f6d698c046ea4b5681b97d57388 Mon Sep 17 00:00:00 2001 From: Maytas Monsereenusorn Date: Sat, 22 Mar 2025 00:14:21 -0700 Subject: [PATCH 02/12] clean up --- indexing-service/pom.xml | 1 + .../overlord/setup/JavaScriptWorkerSelectStrategyTest.java | 7 ------- services/pom.xml | 1 + .../router/JavaScriptTieredBrokerSelectorStrategyTest.java | 7 ------- 4 files changed, 2 insertions(+), 14 deletions(-) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index 3f2600958934..aba20f7b29a2 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -190,6 +190,7 @@ org.openjdk.nashorn nashorn-core + ${nashorn.version} com.cronutils diff --git a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java index 0cf20e877a3f..316092719d3e 100644 --- a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java +++ b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java @@ -76,13 +76,6 @@ public class JavaScriptWorkerSelectStrategyTest JavaScriptConfig.getEnabledInstance() ); - @Before - public void checkJdkCompatibility() - { - // skip tests for newer JDKs without javascript support - Assume.assumeNotNull(new ScriptEngineManager().getEngineByName("nashorn")); - } - @Test public void testSerde() throws Exception { diff --git a/services/pom.xml b/services/pom.xml index 476db0ba7894..bd5886d03bc0 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -241,6 +241,7 @@ org.openjdk.nashorn nashorn-core + ${nashorn.version} diff --git a/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java b/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java index 64aaebe119ec..645cdfab75e1 100644 --- a/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java +++ b/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java @@ -51,13 +51,6 @@ public class JavaScriptTieredBrokerSelectorStrategyTest JavaScriptConfig.getEnabledInstance() ); - @Before - public void checkJdkCompatibility() - { - // skip tests for newer JDKs without javascript support - Assume.assumeNotNull(new ScriptEngineManager().getEngineByName("nashorn")); - } - @Test public void testSerde() throws Exception { From 1eb6feacdbd758cc9ead2f1677a2568f6966bf2d Mon Sep 17 00:00:00 2001 From: Maytas Monsereenusorn Date: Sat, 22 Mar 2025 00:15:05 -0700 Subject: [PATCH 03/12] clean up --- .../overlord/setup/JavaScriptWorkerSelectStrategyTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java index 316092719d3e..c2a02d3d1e5f 100644 --- a/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java +++ b/indexing-service/src/test/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategyTest.java @@ -32,14 +32,10 @@ import org.hamcrest.CoreMatchers; import org.joda.time.Period; import org.junit.Assert; -import org.junit.Assume; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import javax.script.ScriptEngineManager; - public class JavaScriptWorkerSelectStrategyTest { @Rule From 2753045487e63d10a4b2ed85df3353954da23e54 Mon Sep 17 00:00:00 2001 From: Maytas Monsereenusorn Date: Sat, 22 Mar 2025 00:15:41 -0700 Subject: [PATCH 04/12] clean up --- .../router/JavaScriptTieredBrokerSelectorStrategyTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java b/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java index 645cdfab75e1..ec1ddb9f66a6 100644 --- a/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java +++ b/services/src/test/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategyTest.java @@ -32,13 +32,10 @@ import org.apache.druid.query.topn.TopNQueryBuilder; import org.hamcrest.CoreMatchers; import org.junit.Assert; -import org.junit.Assume; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import javax.script.ScriptEngineManager; import java.util.LinkedHashMap; public class JavaScriptTieredBrokerSelectorStrategyTest From 4442e70bc2bfa4d3b247296d7b46ecd49db9c3f7 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 28 Mar 2025 13:55:48 +0000 Subject: [PATCH 05/12] u --- indexing-service/pom.xml | 16 +++++++++++----- .../setup/JavaScriptWorkerSelectStrategy.java | 2 +- pom.xml | 1 + .../JavaScriptTieredBrokerSelectorStrategy.java | 2 +- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index aba20f7b29a2..90baca86d794 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -187,11 +187,17 @@ commons-collections4 provided - - org.openjdk.nashorn - nashorn-core - ${nashorn.version} - + + org.graalvm.polyglot + polyglot + ${graaljs.version} + + + org.graalvm.polyglot + js + ${graaljs.version} + pom + com.cronutils cron-utils diff --git a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java index 24d66d46e627..9058c01b4d45 100644 --- a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java +++ b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java @@ -61,7 +61,7 @@ public JavaScriptWorkerSelectStrategy( private SelectorFunction compileSelectorFunction() { - final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); + final ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); try { ((Compilable) engine).compile("var apply = " + function).eval(); return ((Invocable) engine).getInterface(SelectorFunction.class); diff --git a/pom.xml b/pom.xml index 75e62e85870c..2f0b9a68e180 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,7 @@ + 24.2.0 11 ${java.version} UTF-8 diff --git a/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java b/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java index 36b63fc36bff..263391b07d90 100644 --- a/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java +++ b/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java @@ -59,7 +59,7 @@ public JavaScriptTieredBrokerSelectorStrategy( private SelectorFunction compileSelectorFunction() { - final ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); + final ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); try { ((Compilable) engine).compile("var apply = " + function).eval(); return ((Invocable) engine).getInterface(SelectorFunction.class); From 7a5f13a8e532ecb00429dbe7cc40ec6b661feb27 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Fri, 28 Mar 2025 15:08:52 +0000 Subject: [PATCH 06/12] update other --- services/pom.xml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/services/pom.xml b/services/pom.xml index bd5886d03bc0..e3d8ddeb175c 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -238,11 +238,18 @@ org.jdbi jdbi - - org.openjdk.nashorn - nashorn-core - ${nashorn.version} - + + org.graalvm.polyglot + polyglot + ${graaljs.version} + + + org.graalvm.polyglot + js + ${graaljs.version} + pom + + org.apache.druid From 5ba1df37e578deb890ffe5cd8fd15069b9d26e5c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 1 Apr 2025 06:46:48 +0000 Subject: [PATCH 07/12] tries --- indexing-service/pom.xml | 4 +-- .../setup/JavaScriptWorkerSelectStrategy.java | 32 +++++++++++++++++-- services/pom.xml | 7 +++- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index 90baca86d794..52559ec6750f 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -188,8 +188,8 @@ provided - org.graalvm.polyglot - polyglot + org.graalvm.js + js-scriptengine ${graaljs.version} diff --git a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java index 9058c01b4d45..63afdd5542a3 100644 --- a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java +++ b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java @@ -29,12 +29,17 @@ import org.apache.druid.indexing.overlord.config.WorkerTaskRunnerConfig; import org.apache.druid.js.JavaScriptConfig; +import javax.script.Bindings; import javax.script.Compilable; import javax.script.Invocable; +import javax.script.ScriptContext; import javax.script.ScriptEngine; +import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; import javax.script.ScriptException; +import java.util.List; + public class JavaScriptWorkerSelectStrategy implements WorkerSelectStrategy { public interface SelectorFunction @@ -42,6 +47,11 @@ public interface SelectorFunction String apply(WorkerTaskRunnerConfig config, ImmutableMap zkWorkers, Task task); } + public interface SelectorFunction1 + { + String apply(String config, String zkWorkers, String task); + } + private final String function; // This variable is lazily initialized to avoid unnecessary JavaScript compilation during JSON serde @@ -61,13 +71,31 @@ public JavaScriptWorkerSelectStrategy( private SelectorFunction compileSelectorFunction() { + String s = "function (a,b,c) { return null; }"; + List aa = new ScriptEngineManager().getEngineFactories(); final ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); + + Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); +// bindings.put("polyglot.js.allowHostAccess", true); +// bindings.put("polyglot.js.allowHostClassLookup", (Predicate) s -> true); + bindings.put("polyglot.js.nashorn-compat", true); try { - ((Compilable) engine).compile("var apply = " + function).eval(); - return ((Invocable) engine).getInterface(SelectorFunction.class); + if(true) { + ((Compilable) engine).compile("var apply = " + function).eval(); + SelectorFunction aa1 = ((Invocable) engine).getInterface(SelectorFunction.class); + return aa1; + + }else { + + ((Compilable) engine).compile("var apply = " + s).eval(); + SelectorFunction1 aa1 = ((Invocable) engine).getInterface(SelectorFunction1.class); + return null; + } } catch (ScriptException e) { throw new RuntimeException(e); + } finally { + int asd =1; } } diff --git a/services/pom.xml b/services/pom.xml index e3d8ddeb175c..5122575964e8 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -238,9 +238,14 @@ org.jdbi jdbi - + org.graalvm.polyglot polyglot + ${graaljs.version} + + + org.graalvm.js + js-scriptengine ${graaljs.version} From 5bf812123041afbf73ee7569368558b6dc5a6f5e Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 1 Apr 2025 07:10:11 +0000 Subject: [PATCH 08/12] use common util --- .../overlord/setup/JavaScriptUtil.java | 45 +++++++++++++++++ .../setup/JavaScriptWorkerSelectStrategy.java | 48 +------------------ ...avaScriptTieredBrokerSelectorStrategy.java | 21 +------- 3 files changed, 48 insertions(+), 66 deletions(-) create mode 100644 indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptUtil.java diff --git a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptUtil.java b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptUtil.java new file mode 100644 index 000000000000..1b969647fc8b --- /dev/null +++ b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptUtil.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.druid.indexing.overlord.setup; + +import javax.script.Bindings; +import javax.script.Compilable; +import javax.script.Invocable; +import javax.script.ScriptContext; +import javax.script.ScriptEngine; +import javax.script.ScriptEngineManager; +import javax.script.ScriptException; + +public class JavaScriptUtil +{ + public static T compileSelectorFunction(Class interfaceClass, String function) + { + final ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); + Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); + bindings.put("polyglot.js.nashorn-compat", true); + try { + ((Compilable) engine).compile("var apply = " + function).eval(); + return ((Invocable) engine).getInterface(interfaceClass); + } + catch (ScriptException e) { + throw new RuntimeException(e); + } + } +} diff --git a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java index 63afdd5542a3..88c8d6931648 100644 --- a/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java +++ b/indexing-service/src/main/java/org/apache/druid/indexing/overlord/setup/JavaScriptWorkerSelectStrategy.java @@ -29,17 +29,6 @@ import org.apache.druid.indexing.overlord.config.WorkerTaskRunnerConfig; import org.apache.druid.js.JavaScriptConfig; -import javax.script.Bindings; -import javax.script.Compilable; -import javax.script.Invocable; -import javax.script.ScriptContext; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineFactory; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; - -import java.util.List; - public class JavaScriptWorkerSelectStrategy implements WorkerSelectStrategy { public interface SelectorFunction @@ -47,11 +36,6 @@ public interface SelectorFunction String apply(WorkerTaskRunnerConfig config, ImmutableMap zkWorkers, Task task); } - public interface SelectorFunction1 - { - String apply(String config, String zkWorkers, String task); - } - private final String function; // This variable is lazily initialized to avoid unnecessary JavaScript compilation during JSON serde @@ -69,36 +53,6 @@ public JavaScriptWorkerSelectStrategy( this.function = fn; } - private SelectorFunction compileSelectorFunction() - { - String s = "function (a,b,c) { return null; }"; - List aa = new ScriptEngineManager().getEngineFactories(); - final ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); - - Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); -// bindings.put("polyglot.js.allowHostAccess", true); -// bindings.put("polyglot.js.allowHostClassLookup", (Predicate) s -> true); - bindings.put("polyglot.js.nashorn-compat", true); - try { - if(true) { - ((Compilable) engine).compile("var apply = " + function).eval(); - SelectorFunction aa1 = ((Invocable) engine).getInterface(SelectorFunction.class); - return aa1; - - }else { - - ((Compilable) engine).compile("var apply = " + s).eval(); - SelectorFunction1 aa1 = ((Invocable) engine).getInterface(SelectorFunction1.class); - return null; - } - } - catch (ScriptException e) { - throw new RuntimeException(e); - } finally { - int asd =1; - } - } - @Override public ImmutableWorkerInfo findWorkerForTask( WorkerTaskRunnerConfig config, @@ -106,7 +60,7 @@ public ImmutableWorkerInfo findWorkerForTask( Task task ) { - fnSelector = fnSelector == null ? compileSelectorFunction() : fnSelector; + fnSelector = fnSelector == null ? JavaScriptUtil.compileSelectorFunction(SelectorFunction.class, function) : fnSelector; String worker = fnSelector.apply(config, zkWorkers, task); return worker == null ? null : zkWorkers.get(worker); } diff --git a/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java b/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java index 263391b07d90..b6a1995a64b0 100644 --- a/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java +++ b/services/src/main/java/org/apache/druid/server/router/JavaScriptTieredBrokerSelectorStrategy.java @@ -24,15 +24,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; import com.google.common.base.Preconditions; +import org.apache.druid.indexing.overlord.setup.JavaScriptUtil; import org.apache.druid.js.JavaScriptConfig; import org.apache.druid.query.Query; -import javax.script.Compilable; -import javax.script.Invocable; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; - public class JavaScriptTieredBrokerSelectorStrategy implements TieredBrokerSelectorStrategy { public interface SelectorFunction @@ -57,22 +52,10 @@ public JavaScriptTieredBrokerSelectorStrategy( this.function = fn; } - private SelectorFunction compileSelectorFunction() - { - final ScriptEngine engine = new ScriptEngineManager().getEngineByName("js"); - try { - ((Compilable) engine).compile("var apply = " + function).eval(); - return ((Invocable) engine).getInterface(SelectorFunction.class); - } - catch (ScriptException e) { - throw new RuntimeException(e); - } - } - @Override public Optional getBrokerServiceName(TieredBrokerConfig config, Query query) { - fnSelector = fnSelector == null ? compileSelectorFunction() : fnSelector; + fnSelector = fnSelector == null ? JavaScriptUtil.compileSelectorFunction(SelectorFunction.class, function) : fnSelector; return Optional.fromNullable(fnSelector.apply(config, query)); } From 1544591b430c2a863b51038de9993f0db451cf3c Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 1 Apr 2025 07:38:52 +0000 Subject: [PATCH 09/12] fix to work with jdk11 --- indexing-service/pom.xml | 19 ++++++++----------- pom.xml | 18 +++++++++++------- services/pom.xml | 25 ++++++++----------------- 3 files changed, 27 insertions(+), 35 deletions(-) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index 52559ec6750f..d0e2d8f62f0a 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -187,17 +187,14 @@ commons-collections4 provided - - org.graalvm.js - js-scriptengine - ${graaljs.version} - - - org.graalvm.polyglot - js - ${graaljs.version} - pom - + + org.graalvm.js + js-scriptengine + + + org.graalvm.js + js + com.cronutils cron-utils diff --git a/pom.xml b/pom.xml index 2f0b9a68e180..3c8426a401c9 100644 --- a/pom.xml +++ b/pom.xml @@ -70,7 +70,6 @@ - 24.2.0 11 ${java.version} UTF-8 @@ -115,7 +114,7 @@ 5.13.0 5.13.0 3.3.6 - 15.4 + 22.2.0 5.14.2 1.12.638 2.8.0 @@ -671,6 +670,16 @@ jaxb-runtime 2.3.3 + + org.graalvm.js + js + ${graaljs.version} + + + org.graalvm.js + js-scriptengine + ${graaljs.version} + org.jdbi jdbi @@ -1375,11 +1384,6 @@ - - org.openjdk.nashorn - nashorn-core - ${nashorn.version} - org.jruby.joni joni diff --git a/services/pom.xml b/services/pom.xml index 5122575964e8..f059037b1cd2 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -238,23 +238,14 @@ org.jdbi jdbi - - org.graalvm.polyglot - polyglot - ${graaljs.version} - - - org.graalvm.js - js-scriptengine - ${graaljs.version} - - - org.graalvm.polyglot - js - ${graaljs.version} - pom - - + + org.graalvm.js + js-scriptengine + + + org.graalvm.js + js + org.apache.druid From 1c714d771f3d470e07929a72a2bebffe47f332bb Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 1 Apr 2025 07:55:17 +0000 Subject: [PATCH 10/12] use 22.3.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3c8426a401c9..998d383a064d 100644 --- a/pom.xml +++ b/pom.xml @@ -114,7 +114,7 @@ 5.13.0 5.13.0 3.3.6 - 22.2.0 + 22.3.5 5.14.2 1.12.638 2.8.0 From b369dc5ff96b6645d2020c5c2e6a75577e1c3066 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 1 Apr 2025 08:20:09 +0000 Subject: [PATCH 11/12] licenses --- distribution/bin/check-licenses.py | 1 + licenses.yaml | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/distribution/bin/check-licenses.py b/distribution/bin/check-licenses.py index 70afd9031362..6690632bd942 100755 --- a/distribution/bin/check-licenses.py +++ b/distribution/bin/check-licenses.py @@ -310,6 +310,7 @@ def build_compatible_license_names(): compatible_licenses['SPDX-License-Identifier: MIT'] = 'MIT License' compatible_licenses['The Go license'] = 'The Go license' + compatible_licenses['Universal Permissive License, Version 1.0'] = 'Universal Permissive License, Version 1.0' compatible_licenses['-'] = '-' return compatible_licenses diff --git a/licenses.yaml b/licenses.yaml index 8f46132a18fe..8044f25be34a 100644 --- a/licenses.yaml +++ b/licenses.yaml @@ -5038,6 +5038,22 @@ libraries: --- +name: GraalVM +license_category: binary +license_name: Universal Permissive License, Version 1.0 +license_file_path: licenses/bin/graal.UPL +version: 22.3.5 +module: core +libraries: + - org.graalvm.js: js + - org.graalvm.js: js-scriptengine + - org.graalvm.regex: regex + - org.graalvm.sdk: graal-sdk + - org.graalvm.js: js-scriptengine + - org.graalvm.truffle: truffle-api + +--- + name: jakarta.el license_category: binary module: core From 2cc001309d76a27b1f7e8d6478d17130602c23a9 Mon Sep 17 00:00:00 2001 From: Zoltan Haindrich Date: Tue, 1 Apr 2025 11:01:54 +0000 Subject: [PATCH 12/12] runtime --- indexing-service/pom.xml | 2 ++ services/pom.xml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/indexing-service/pom.xml b/indexing-service/pom.xml index d0e2d8f62f0a..398f579f4a6c 100644 --- a/indexing-service/pom.xml +++ b/indexing-service/pom.xml @@ -190,10 +190,12 @@ org.graalvm.js js-scriptengine + runtime org.graalvm.js js + runtime com.cronutils diff --git a/services/pom.xml b/services/pom.xml index f059037b1cd2..b92184f99d00 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -241,10 +241,12 @@ org.graalvm.js js-scriptengine + runtime org.graalvm.js js + runtime