Quick fix to logging and to init script execution Init scripts weren't working right for scriptengines because they weren't getting the bindings set to the engine scope (which was happening under the old model of initialization). Without that setting, the types couldn't be identified and type checking features of Groovy wouldn't work if configured. CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/38217929 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/38217929 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/38217929 Branch: refs/heads/TINKERPOP-1642 Commit: 38217929138ffe9e5ff391d33a42b92d8ca5700e Parents: 7b234b4 Author: Stephen Mallette <sp...@genoprime.com> Authored: Wed Mar 15 17:18:07 2017 -0400 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Wed Mar 15 17:18:07 2017 -0400 ---------------------------------------------------------------------- .../gremlin/jsr223/DefaultGremlinScriptEngineManager.java | 7 ++++++- .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java | 2 -- .../tinkerpop/gremlin/server/util/ServerGremlinExecutor.java | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/38217929/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java index b3025ec..c8b77e6 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java @@ -474,7 +474,12 @@ public class DefaultGremlinScriptEngineManager implements GremlinScriptEngineMan scriptCustomizers.stream().flatMap(sc -> sc.getScripts().stream()). map(l -> String.join(System.lineSeparator(), l)).forEach(initScript -> { try { - final Object initializedBindings = engine.eval(initScript); + // need to apply global bindings here as part of the engine or else they don't get their binding types + // registered by certain GremlinScriptEngine instances (pretty much talking about gremlin-groovy here) + // where type checking is made important. this may not be a good generic way to handled this in the + // long run, but for now we only have two GremlinScriptEngines to be concerned about so thus far it + // presents no real pains + final Object initializedBindings = engine.eval(initScript, getBindings()); if (initializedBindings != null && initializedBindings instanceof Map) ((Map<String,Object>) initializedBindings).forEach((k,v) -> put(k,v)); } catch (Exception ex) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/38217929/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java ---------------------------------------------------------------------- diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java index 4b27180..7a39f43 100644 --- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java +++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java @@ -720,8 +720,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl //This should never happen as the future should completed before it is returned to the us. throw new AssertionError(); } - - } boolean isCached(final String script) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/38217929/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java ---------------------------------------------------------------------- diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java index e3c0cae..56e78fb 100644 --- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java +++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java @@ -149,7 +149,7 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> { gremlinExecutor = gremlinExecutorBuilder.create(); - logger.info("Initialized GremlinExecutor and configured ScriptEngines."); + logger.info("Initialized GremlinExecutor and preparing GremlinScriptEngines instances."); // force each scriptengine to process something so that the init scripts will fire (this is necessary if // the GremlinExecutor is using the GremlinScriptEngineManager. this is a bit of hack, but it at least allows @@ -159,8 +159,9 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> { try { gremlinExecutor.eval("1+1", engineName, Collections.emptyMap()).join(); registerMetrics(engineName); + logger.info("Initialized {} GremlinScriptEngine and registered metrics", engineName); } catch (Exception ex) { - logger.warn(String.format("Could not initialize {} ScriptEngine as script could not be evaluated - %s", engineName), ex); + logger.warn(String.format("Could not initialize %s GremlinScriptEngine as init script could not be evaluated", engineName), ex); } });