You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/07/08 20:37:48 UTC

[01/11] incubator-tinkerpop git commit: Refactoring GremlinGroovyScriptEngine constructor.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/compiler-customizer [created] 2a319f0ea


Refactoring GremlinGroovyScriptEngine constructor.

Allows multiple CompilationCustomizerProviders to be supplied.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/fc825931
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/fc825931
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/fc825931

Branch: refs/heads/compiler-customizer
Commit: fc82593105e97ba97c6f6410ba0347a4fddc9cac
Parents: 6ea202c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 10:31:16 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 10:31:16 2015 -0400

----------------------------------------------------------------------
 .../GremlinGroovyScriptEngineOverGraphTest.java |  2 +-
 .../groovy/NoImportCustomizerProvider.java      |  7 +-
 .../jsr223/GremlinGroovyScriptEngine.java       | 30 ++++---
 .../VariableIdentificationCustomizer.java       | 91 ++++++++++++++++++++
 .../jsr223/GremlinGroovyScriptEngineTest.java   | 14 +--
 .../structure/io/script/ScriptRecordReader.java |  2 +-
 .../structure/io/script/ScriptRecordWriter.java |  2 +-
 7 files changed, 126 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fc825931/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineOverGraphTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineOverGraphTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineOverGraphTest.java
index 7eb892b..babcf1b 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineOverGraphTest.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineOverGraphTest.java
@@ -70,7 +70,7 @@ public class GremlinGroovyScriptEngineOverGraphTest extends AbstractGremlinTest
     @Test
     @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
     public void shouldLoadImports() throws Exception {
-        final ScriptEngine engineNoImports = new GremlinGroovyScriptEngine(new NoImportCustomizerProvider());
+        final ScriptEngine engineNoImports = new GremlinGroovyScriptEngine(NoImportCustomizerProvider.INSTANCE);
         try {
             engineNoImports.eval("Vertex.class.getName()");
             fail("Should have thrown an exception because no imports were supplied");

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fc825931/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
index 91816b8..343c8a6 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
@@ -29,7 +29,12 @@ import java.util.Set;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class NoImportCustomizerProvider implements ImportCustomizerProvider {
+public final class NoImportCustomizerProvider implements ImportCustomizerProvider {
+
+    public static final NoImportCustomizerProvider INSTANCE = new NoImportCustomizerProvider();
+
+    private NoImportCustomizerProvider() {}
+
     @Override
     public CompilationCustomizer getCompilationCustomizer() {
         return new ImportCustomizer();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fc825931/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 be9e436..f86498e 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
@@ -19,9 +19,11 @@
 package org.apache.tinkerpop.gremlin.groovy.jsr223;
 
 import groovy.transform.ThreadInterrupt;
+import org.apache.tinkerpop.gremlin.groovy.CompilerCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.DefaultImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.EmptyImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.ImportCustomizerProvider;
+import org.apache.tinkerpop.gremlin.groovy.NoImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.SecurityCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.loaders.GremlinLoader;
 import org.apache.tinkerpop.gremlin.groovy.plugin.Artifact;
@@ -62,6 +64,7 @@ import java.io.Writer;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -138,21 +141,26 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
         this(new DefaultImportCustomizerProvider());
     }
 
-    public GremlinGroovyScriptEngine(final ImportCustomizerProvider importCustomizerProvider) {
-        this(importCustomizerProvider, null);
+    public GremlinGroovyScriptEngine(final CompilerCustomizerProvider... compilerCustomizerProviders) {
+        this(DEFAULT_SCRIPT_EVALUATION_TIMEOUT, compilerCustomizerProviders);
     }
 
-    public GremlinGroovyScriptEngine(final ImportCustomizerProvider importCustomizerProvider,
-                                     final SecurityCustomizerProvider securityCustomizerProvider) {
-        this(importCustomizerProvider, securityCustomizerProvider, DEFAULT_SCRIPT_EVALUATION_TIMEOUT);
-    }
+    public GremlinGroovyScriptEngine(final long scriptEvaluationTimeout,
+                                     final CompilerCustomizerProvider... compilerCustomizerProviders) {
+        final List<CompilerCustomizerProvider> providers = Arrays.asList(compilerCustomizerProviders);
 
-    public GremlinGroovyScriptEngine(final ImportCustomizerProvider importCustomizerProvider,
-                                     final SecurityCustomizerProvider securityCustomizerProvider,
-                                     final long scriptEvaluationTimeout) {
         GremlinLoader.load();
-        this.importCustomizerProvider = importCustomizerProvider;
-        this.securityProvider = Optional.ofNullable(securityCustomizerProvider);
+
+        this.importCustomizerProvider = providers.stream()
+                .filter(p -> p instanceof ImportCustomizerProvider)
+                .map(p -> (ImportCustomizerProvider) p)
+                .findFirst().orElse(NoImportCustomizerProvider.INSTANCE);
+
+        this.securityProvider = providers.stream()
+                .filter(p -> p instanceof SecurityCustomizerProvider)
+                .map(p -> (SecurityCustomizerProvider) p)
+                .findFirst();
+
         this.scriptEvaluationTimeout = scriptEvaluationTimeout;
         createClassLoader();
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fc825931/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/VariableIdentificationCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/VariableIdentificationCustomizer.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/VariableIdentificationCustomizer.java
new file mode 100644
index 0000000..4606bde
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/VariableIdentificationCustomizer.java
@@ -0,0 +1,91 @@
+/*
+ * 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.tinkerpop.gremlin.groovy.jsr223;
+
+import org.codehaus.groovy.ast.ClassCodeVisitorSupport;
+import org.codehaus.groovy.ast.ClassNode;
+import org.codehaus.groovy.ast.expr.VariableExpression;
+import org.codehaus.groovy.classgen.GeneratorContext;
+import org.codehaus.groovy.control.CompilationFailedException;
+import org.codehaus.groovy.control.CompilePhase;
+import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class VariableIdentificationCustomizer extends CompilationCustomizer {
+
+    private static final ThreadLocal<Set<String>> variables = new ThreadLocal<Set<String>>()  {
+        @Override
+        protected Set<String> initialValue() {
+            return new TreeSet<>();
+        }
+    };
+
+    private static final List<String> variablesToIgnore = new ArrayList<>(Arrays.asList("this", "args", "context", "super"));
+
+    public VariableIdentificationCustomizer() {
+        super(CompilePhase.CLASS_GENERATION);
+    }
+
+    public Set<String> getVariables() {
+        return variables.get();
+    }
+
+    public void clearVariables() {
+        variables.get().clear();
+    }
+
+    @Override
+    public void call(final SourceUnit sourceUnit, final GeneratorContext generatorContext,
+                     final ClassNode classNode) throws CompilationFailedException {
+        classNode.visitContents(new Visitor(sourceUnit));
+    }
+
+    class Visitor extends ClassCodeVisitorSupport {
+
+        private SourceUnit sourceUnit;
+
+        public Visitor(final SourceUnit sourceUnit) {
+            this.sourceUnit = sourceUnit;
+        }
+
+        @Override
+        public void visitVariableExpression(final VariableExpression expression) {
+            if (!variablesToIgnore.contains(expression.getName())
+                    && expression.getAccessedVariable().isDynamicTyped()) {
+                variables.get().add(expression.getName());
+            }
+
+            super.visitVariableExpression(expression);
+        }
+
+        @Override
+        protected SourceUnit getSourceUnit() {
+            return sourceUnit;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fc825931/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
index c88a2ec..d60154d 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
@@ -87,7 +87,7 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldLoadImportsViaDependencyManagerInterface() throws Exception {
-        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new NoImportCustomizerProvider());
+        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(NoImportCustomizerProvider.INSTANCE);
         try {
             engine.eval("Vertex.class.getName()");
             fail("Should have thrown an exception because no imports were supplied");
@@ -101,7 +101,7 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldLoadImportsViaDependencyManagerInterfaceAdditively() throws Exception {
-        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new NoImportCustomizerProvider());
+        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(NoImportCustomizerProvider.INSTANCE);
         try {
             engine.eval("Vertex.class.getName()");
             fail("Should have thrown an exception because no imports were supplied");
@@ -133,7 +133,7 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldLoadImportsViaDependencyManagerFromDependencyGatheredByUse() throws Exception {
-        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new NoImportCustomizerProvider());
+        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(NoImportCustomizerProvider.INSTANCE);
         try {
             engine.eval("org.apache.commons.math3.util.FastMath.abs(-1235)");
             fail("Should have thrown an exception because no imports were supplied");
@@ -148,7 +148,7 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldAllowsUseToBeExecutedAfterImport() throws Exception {
-        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(new NoImportCustomizerProvider());
+        final GremlinGroovyScriptEngine engine = new GremlinGroovyScriptEngine(NoImportCustomizerProvider.INSTANCE);
         try {
             engine.eval("org.apache.commons.math3.util.FastMath.abs(-1235)");
             fail("Should have thrown an exception because no imports were supplied");
@@ -310,7 +310,7 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldTimeoutScriptOnTimedWhile() throws Exception {
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, 3000);
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(3000, new DefaultImportCustomizerProvider());
         try {
             engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 10000) {}");
             fail("This should have timed out");
@@ -321,7 +321,7 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldTimeoutScriptOnTimedWhileOnceEngineHasBeenAliveForLongerThanTimeout() throws Exception {
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, 3000);
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(3000, new DefaultImportCustomizerProvider());
         Thread.sleep(4000);
         try {
             engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 10000) {}");
@@ -336,7 +336,7 @@ public class GremlinGroovyScriptEngineTest {
     @Test
     public void shouldNotTimeoutStandaloneFunction() throws Exception {
         // use a super fast timeout which should not prevent the call of a cached function
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, 1);
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(1, new DefaultImportCustomizerProvider());
         engine.eval("def addItUp(x,y) { x + y }");
 
         assertEquals(3, engine.eval("addItUp(1,2)"));

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fc825931/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
index 191c249..aec6aff 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
@@ -64,7 +64,7 @@ public final class ScriptRecordReader extends RecordReader<NullWritable, VertexW
     public void initialize(final InputSplit genericSplit, final TaskAttemptContext context) throws IOException {
         this.lineRecordReader.initialize(genericSplit, context);
         final Configuration configuration = context.getConfiguration();
-        this.engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, Integer.MAX_VALUE);
+        this.engine = new GremlinGroovyScriptEngine(Integer.MAX_VALUE, new DefaultImportCustomizerProvider());
         //this.engine = ScriptEngineCache.get(configuration.get(SCRIPT_ENGINE, ScriptEngineCache.DEFAULT_SCRIPT_ENGINE));
         final FileSystem fs = FileSystem.get(configuration);
         try {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/fc825931/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
index e0a9ece..b9bd068 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
@@ -61,7 +61,7 @@ public final class ScriptRecordWriter extends RecordWriter<NullWritable, VertexW
     public ScriptRecordWriter(final DataOutputStream out, final TaskAttemptContext context) throws IOException {
         this.out = out;
         final Configuration configuration = context.getConfiguration();
-        this.engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, Integer.MAX_VALUE);
+        this.engine = new GremlinGroovyScriptEngine(Integer.MAX_VALUE, new DefaultImportCustomizerProvider());
         //this.engine = ScriptEngineCache.get(configuration.get(SCRIPT_ENGINE, ScriptEngineCache.DEFAULT_SCRIPT_ENGINE));
         final FileSystem fs = FileSystem.get(configuration);
         try {


[11/11] incubator-tinkerpop git commit: Add a ThreadInterruptCustomizerProvider.

Posted by sp...@apache.org.
Add a ThreadInterruptCustomizerProvider.

Now all configuration of the compiler is done through CompilerCustomizerProvider implementations.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/2a319f0e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/2a319f0e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/2a319f0e

Branch: refs/heads/compiler-customizer
Commit: 2a319f0eaa9af73187aad607780b189dd75c5b9a
Parents: 95b6eb8
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 14:36:37 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 14:36:37 2015 -0400

----------------------------------------------------------------------
 .../ThreadInterruptCustomizerProvider.java      | 35 ++++++++++++++++
 .../gremlin/groovy/engine/ScriptEngines.java    |  4 ++
 .../jsr223/GremlinGroovyScriptEngine.java       |  5 ---
 .../jsr223/GremlinGroovyScriptEngineTest.java   | 43 ++++++++++++++++++++
 .../structure/io/script/ScriptRecordReader.java |  2 +-
 .../structure/io/script/ScriptRecordWriter.java |  2 +-
 6 files changed, 84 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2a319f0e/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/ThreadInterruptCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/ThreadInterruptCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/ThreadInterruptCustomizerProvider.java
new file mode 100644
index 0000000..f8f46a7
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/ThreadInterruptCustomizerProvider.java
@@ -0,0 +1,35 @@
+/*
+ * 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.tinkerpop.gremlin.groovy;
+
+import groovy.transform.ThreadInterrupt;
+import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+/**
+ * Injects checks for thread interruption into scripts.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class ThreadInterruptCustomizerProvider implements CompilerCustomizerProvider {
+    @Override
+    public CompilationCustomizer create() {
+        return new ASTTransformationCustomizer(ThreadInterrupt.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2a319f0e/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
index ba310ec..24b9f58 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.groovy.engine;
 import org.apache.tinkerpop.gremlin.groovy.CompilerCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.DefaultImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.SecurityCustomizerProvider;
+import org.apache.tinkerpop.gremlin.groovy.ThreadInterruptCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.TimedInterruptCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.DependencyManager;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
@@ -349,6 +350,9 @@ public class ScriptEngines implements AutoCloseable {
                     TimedInterruptCustomizerProvider.DEFAULT_INTERRUPTION_TIMEOUT)).longValue();
             if (interruptionTimeout > 0) providers.add(new TimedInterruptCustomizerProvider(interruptionTimeout));
 
+            final boolean threadInterrupt = (boolean) config.getOrDefault("enableThreadInterrupt", true);
+            if (threadInterrupt) providers.add(new ThreadInterruptCustomizerProvider());
+
             final CompilerCustomizerProvider[] providerArray = new CompilerCustomizerProvider[providers.size()];
             return Optional.of((ScriptEngine) new GremlinGroovyScriptEngine(providers.toArray(providerArray)));
         } else {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2a319f0e/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 d93fd01..59a0530 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
@@ -38,8 +38,6 @@ import groovy.lang.MissingMethodException;
 import groovy.lang.MissingPropertyException;
 import groovy.lang.Script;
 import groovy.lang.Tuple;
-import groovy.transform.TimedInterrupt;
-import org.codehaus.groovy.ast.tools.GeneralUtils;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
@@ -72,7 +70,6 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.ServiceLoader;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -484,8 +481,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
         if (this.securityProvider.isPresent())
             conf.addCompilationCustomizers(this.securityProvider.get().create());
 
-        conf.addCompilationCustomizers(new ASTTransformationCustomizer(ThreadInterrupt.class));
-
         customizerProviders.forEach(p -> conf.addCompilationCustomizers(p.create()));
 
         this.loader = new GremlinGroovyClassLoader(getParentLoader(), conf);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2a319f0e/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
index 15c4cb4..8f71588 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
@@ -23,6 +23,7 @@ import groovy.lang.Script;
 import org.apache.tinkerpop.gremlin.groovy.DefaultImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.NoImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.SecurityCustomizerProvider;
+import org.apache.tinkerpop.gremlin.groovy.ThreadInterruptCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.TimedInterruptCustomizerProvider;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -358,6 +359,48 @@ public class GremlinGroovyScriptEngineTest {
     }
 
     @Test
+    public void shouldInterruptWhile() throws Exception {
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(new ThreadInterruptCustomizerProvider());
+        final AtomicBoolean asserted = new AtomicBoolean(false);
+
+        final Thread t = new Thread(() -> {
+            try {
+                engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 10000) {}");
+            } catch (ScriptException se) {
+                asserted.set(se.getCause().getCause() instanceof InterruptedException);
+            }
+        });
+
+        t.start();
+        t.interrupt();
+        while(t.isAlive()) {}
+
+        assertTrue(asserted.get());
+    }
+
+    @Test
+    public void shouldNotInterruptWhile() throws Exception {
+        // companion to shouldInterruptWhile                                 t
+        final ScriptEngine engine = new GremlinGroovyScriptEngine();
+        final AtomicBoolean exceptionFired = new AtomicBoolean(true);
+
+        final Thread t = new Thread(() -> {
+            try {
+                engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 2000) {};'test'");
+                exceptionFired.set(false);
+            } catch (ScriptException se) {
+                se.printStackTrace();
+            }
+        });
+
+        t.start();
+        t.interrupt();
+        while(t.isAlive()) {}
+
+        assertFalse(exceptionFired.get());
+    }
+
+    @Test
     public void shouldNotTimeoutStandaloneFunction() throws Exception {
         // use a super fast timeout which should not prevent the call of a cached function
         final ScriptEngine engine = new GremlinGroovyScriptEngine(

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2a319f0e/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
index aec6aff..e56eb1a 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
@@ -64,7 +64,7 @@ public final class ScriptRecordReader extends RecordReader<NullWritable, VertexW
     public void initialize(final InputSplit genericSplit, final TaskAttemptContext context) throws IOException {
         this.lineRecordReader.initialize(genericSplit, context);
         final Configuration configuration = context.getConfiguration();
-        this.engine = new GremlinGroovyScriptEngine(Integer.MAX_VALUE, new DefaultImportCustomizerProvider());
+        this.engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider());
         //this.engine = ScriptEngineCache.get(configuration.get(SCRIPT_ENGINE, ScriptEngineCache.DEFAULT_SCRIPT_ENGINE));
         final FileSystem fs = FileSystem.get(configuration);
         try {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2a319f0e/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
index b9bd068..5cf6170 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
@@ -61,7 +61,7 @@ public final class ScriptRecordWriter extends RecordWriter<NullWritable, VertexW
     public ScriptRecordWriter(final DataOutputStream out, final TaskAttemptContext context) throws IOException {
         this.out = out;
         final Configuration configuration = context.getConfiguration();
-        this.engine = new GremlinGroovyScriptEngine(Integer.MAX_VALUE, new DefaultImportCustomizerProvider());
+        this.engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider());
         //this.engine = ScriptEngineCache.get(configuration.get(SCRIPT_ENGINE, ScriptEngineCache.DEFAULT_SCRIPT_ENGINE));
         final FileSystem fs = FileSystem.get(configuration);
         try {


[02/11] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/master' into variables-id

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/master' into variables-id


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0e1c86bd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0e1c86bd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0e1c86bd

Branch: refs/heads/compiler-customizer
Commit: 0e1c86bd627e25708a26c6fe23a2f7be4e0b47e3
Parents: fc82593 46fc989
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 11:21:37 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 11:21:37 2015 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../gremlin/groovy/engine/ScriptEngines.java    |  9 ++++--
 .../groovy/engine/GremlinExecutorTest.java      | 31 ++++++++++++++++++++
 .../jsr223/GremlinGroovyScriptEngineTest.java   | 20 +++++++++++++
 4 files changed, 59 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0e1c86bd/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
----------------------------------------------------------------------
diff --cc gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
index d60154d,6c6ade0..2bdbda3
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
@@@ -334,9 -334,29 +334,29 @@@ public class GremlinGroovyScriptEngineT
      }
  
      @Test
+     public void shouldContinueToEvalScriptsEvenWithTimedInterrupt() throws Exception {
+         final ScriptEngine engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, 50);
+ 
+         for (int ix = 0; ix < 10; ix++) {
+             try {
+                 // this script takes 10 ms longer than the interruptionTimeout
+                 engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 60) {}");
+                 fail("This should have timed out");
+             } catch (ScriptException se) {
+                 assertEquals(TimeoutException.class, se.getCause().getCause().getClass());
+             }
+ 
+             // this script takes 10 ms less than the interruptionTimeout
+             assertEquals("test", engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 40) {};'test'"));
+         }
+ 
+         assertEquals(2, engine.eval("1+1"));
+     }
+ 
+     @Test
      public void shouldNotTimeoutStandaloneFunction() throws Exception {
          // use a super fast timeout which should not prevent the call of a cached function
 -        final ScriptEngine engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, 1);
 +        final ScriptEngine engine = new GremlinGroovyScriptEngine(1, new DefaultImportCustomizerProvider());
          engine.eval("def addItUp(x,y) { x + y }");
  
          assertEquals(3, engine.eval("addItUp(1,2)"));


[05/11] incubator-tinkerpop git commit: Change scope of ManagedConcurrentValueMap.

Posted by sp...@apache.org.
Change scope of ManagedConcurrentValueMap.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/e41b52c1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/e41b52c1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/e41b52c1

Branch: refs/heads/compiler-customizer
Commit: e41b52c1b6cf9c4d3becc504de9e3a5c4217da84
Parents: ce9d090
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 12:45:10 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 12:45:10 2015 -0400

----------------------------------------------------------------------
 .../gremlin/groovy/jsr223/ManagedConcurrentValueMap.java      | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e41b52c1/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ManagedConcurrentValueMap.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ManagedConcurrentValueMap.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ManagedConcurrentValueMap.java
index 8f38604..dce056b 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ManagedConcurrentValueMap.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/ManagedConcurrentValueMap.java
@@ -28,13 +28,13 @@ import java.util.concurrent.ConcurrentHashMap;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class ManagedConcurrentValueMap<K, V> {
+class ManagedConcurrentValueMap<K, V> {
     private final ConcurrentHashMap<K, ManagedReference<V>> internalMap;
     private ReferenceBundle bundle;
 
     public ManagedConcurrentValueMap(final ReferenceBundle bundle) {
         this.bundle = bundle;
-        internalMap = new ConcurrentHashMap<K, ManagedReference<V>>();
+        internalMap = new ConcurrentHashMap<>();
     }
 
     /**
@@ -76,6 +76,9 @@ public class ManagedConcurrentValueMap<K, V> {
         internalMap.put(key, ref);
     }
 
+    /**
+     * Clear the map.
+     */
     public void clear() {
         internalMap.clear();
     }


[07/11] incubator-tinkerpop git commit: Ensure that import/security compilation providers are removed.

Posted by sp...@apache.org.
Ensure that import/security compilation providers are removed.

This way they are not re-applied later as they have implementation specific requirements.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f19a65f1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f19a65f1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f19a65f1

Branch: refs/heads/compiler-customizer
Commit: f19a65f129b07bd7b11aa10c5bfebb97415a0c33
Parents: 8b4f3df
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 12:58:18 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 12:58:18 2015 -0400

----------------------------------------------------------------------
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java       | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f19a65f1/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 f86498e..d3a8155 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
@@ -137,6 +137,8 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
 
     private final Set<Artifact> artifactsToUse = new HashSet<>();
 
+    private final List<CompilerCustomizerProvider> customizerProviders;
+
     public GremlinGroovyScriptEngine() {
         this(new DefaultImportCustomizerProvider());
     }
@@ -161,6 +163,10 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
                 .map(p -> (SecurityCustomizerProvider) p)
                 .findFirst();
 
+        // remove used providers as the rest will be applied directly
+        providers.removeIf(p -> p instanceof SecurityCustomizerProvider || p instanceof ImportCustomizerProvider);
+        customizerProviders = providers;
+
         this.scriptEvaluationTimeout = scriptEvaluationTimeout;
         createClassLoader();
     }


[04/11] incubator-tinkerpop git commit: Update javadoc.

Posted by sp...@apache.org.
Update javadoc.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/ce9d090f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/ce9d090f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/ce9d090f

Branch: refs/heads/compiler-customizer
Commit: ce9d090f9f8a79fc51f247b73a3315be37b776c8
Parents: 569ef03
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 12:02:27 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 12:02:27 2015 -0400

----------------------------------------------------------------------
 .../tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java | 8 ++++++++
 .../gremlin/groovy/EmptyImportCustomizerProvider.java        | 3 +--
 2 files changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ce9d090f/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
index b0b6f29..a633ff2 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
@@ -18,11 +18,19 @@
  */
 package org.apache.tinkerpop.gremlin.groovy;
 
+import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
 import org.codehaus.groovy.control.customizers.CompilationCustomizer;
 
 /**
+ * Provides a way to plugin Groovy {@code CompilationCustomizer} implementations to the
+ * {@link GremlinGroovyScriptEngine}.
+ *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public interface CompilerCustomizerProvider {
+
+    /**
+     * Create a new instance of a {@code CompilationCustomizer} to add to the {@link GremlinGroovyScriptEngine}.
+     */
     public CompilationCustomizer getCompilationCustomizer();
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ce9d090f/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
index 4400e8f..03e86c9 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
@@ -26,8 +26,7 @@ import java.util.HashSet;
 import java.util.Set;
 
 /**
- * This {@link org.apache.tinkerpop.gremlin.groovy.ImportCustomizerProvider} is empty and comes with no pre-defined imports
- * at all.
+ * This {@link ImportCustomizerProvider} is empty and comes with no pre-defined imports at all.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */


[08/11] incubator-tinkerpop git commit: Rename CompilationCustomizerProvider method from get to create.

Posted by sp...@apache.org.
Rename CompilationCustomizerProvider method from get to create.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/47c0fa3d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/47c0fa3d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/47c0fa3d

Branch: refs/heads/compiler-customizer
Commit: 47c0fa3d1e67fb29ee001b841303e3b732f89161
Parents: f19a65f
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 13:06:55 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 13:06:55 2015 -0400

----------------------------------------------------------------------
 .../gremlin/groovy/AbstractImportCustomizerProvider.java  |  2 +-
 .../gremlin/groovy/CompilerCustomizerProvider.java        |  2 +-
 .../gremlin/groovy/EmptyImportCustomizerProvider.java     |  2 +-
 .../gremlin/groovy/NoImportCustomizerProvider.java        |  2 +-
 .../gremlin/groovy/SecurityCustomizerProvider.java        |  2 +-
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java  | 10 ++++++----
 6 files changed, 11 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47c0fa3d/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
index e0c6670..f50395c 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/AbstractImportCustomizerProvider.java
@@ -136,7 +136,7 @@ public abstract class AbstractImportCustomizerProvider implements ImportCustomiz
     }
 
     @Override
-    public CompilationCustomizer getCompilationCustomizer() {
+    public CompilationCustomizer create() {
         final ImportCustomizer ic = new ImportCustomizer();
 
         processImports(ic, imports);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47c0fa3d/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
index a633ff2..9980911 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/CompilerCustomizerProvider.java
@@ -32,5 +32,5 @@ public interface CompilerCustomizerProvider {
     /**
      * Create a new instance of a {@code CompilationCustomizer} to add to the {@link GremlinGroovyScriptEngine}.
      */
-    public CompilationCustomizer getCompilationCustomizer();
+    public CompilationCustomizer create();
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47c0fa3d/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
index 03e86c9..36d5f93 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/EmptyImportCustomizerProvider.java
@@ -55,7 +55,7 @@ public class EmptyImportCustomizerProvider extends DefaultImportCustomizerProvid
     }
 
     @Override
-    public CompilationCustomizer getCompilationCustomizer() {
+    public CompilationCustomizer create() {
         final ImportCustomizer ic = new ImportCustomizer();
 
         processImports(ic, extraImports);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47c0fa3d/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
index 343c8a6..9ded2b4 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/NoImportCustomizerProvider.java
@@ -36,7 +36,7 @@ public final class NoImportCustomizerProvider implements ImportCustomizerProvide
     private NoImportCustomizerProvider() {}
 
     @Override
-    public CompilationCustomizer getCompilationCustomizer() {
+    public CompilationCustomizer create() {
         return new ImportCustomizer();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47c0fa3d/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/SecurityCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/SecurityCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/SecurityCustomizerProvider.java
index 67d0674..bef0c2c 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/SecurityCustomizerProvider.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/SecurityCustomizerProvider.java
@@ -50,7 +50,7 @@ public class SecurityCustomizerProvider implements CompilerCustomizerProvider {
     }
 
     @Override
-    public CompilationCustomizer getCompilationCustomizer() {
+    public CompilationCustomizer create() {
         return new SandboxTransformer();
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/47c0fa3d/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 d3a8155..68083e7 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
@@ -75,6 +75,7 @@ import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * This {@code ScriptEngine} implementation is heavily adapted from the {@code GroovyScriptEngineImpl} to include
@@ -164,8 +165,9 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
                 .findFirst();
 
         // remove used providers as the rest will be applied directly
-        providers.removeIf(p -> p instanceof SecurityCustomizerProvider || p instanceof ImportCustomizerProvider);
-        customizerProviders = providers;
+        customizerProviders = providers.stream()
+                .filter(p -> !(p instanceof SecurityCustomizerProvider || p instanceof ImportCustomizerProvider))
+                .collect(Collectors.toList());
 
         this.scriptEvaluationTimeout = scriptEvaluationTimeout;
         createClassLoader();
@@ -489,10 +491,10 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
 
     private synchronized void createClassLoader() {
         final CompilerConfiguration conf = new CompilerConfiguration();
-        conf.addCompilationCustomizers(this.importCustomizerProvider.getCompilationCustomizer());
+        conf.addCompilationCustomizers(this.importCustomizerProvider.create());
 
         if (this.securityProvider.isPresent())
-            conf.addCompilationCustomizers(this.securityProvider.get().getCompilationCustomizer());
+            conf.addCompilationCustomizers(this.securityProvider.get().create());
 
         if (scriptEvaluationTimeout > 0) {
             final Map<String, Object> timedInterruptAnnotationParams = new HashMap<>();


[10/11] incubator-tinkerpop git commit: Created a TimedInterruptCustomizerProvider.

Posted by sp...@apache.org.
Created a TimedInterruptCustomizerProvider.

Add the TimedInterrupt compilation customizer via the same mechanism as other customizers.  No longer treat this as a special case with the timeout in millis passed directly to the GremlinGroovyScriptEngine.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/95b6eb8a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/95b6eb8a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/95b6eb8a

Branch: refs/heads/compiler-customizer
Commit: 95b6eb8a954b534aba289803872660faae81ac18
Parents: 3df735b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 13:51:35 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 13:51:35 2015 -0400

----------------------------------------------------------------------
 .../TimedInterruptCustomizerProvider.java       | 57 ++++++++++++++++++++
 .../gremlin/groovy/engine/ScriptEngines.java    | 16 +++---
 .../jsr223/GremlinGroovyScriptEngine.java       | 20 -------
 .../jsr223/GremlinGroovyScriptEngineTest.java   | 15 ++++--
 4 files changed, 77 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95b6eb8a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/TimedInterruptCustomizerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/TimedInterruptCustomizerProvider.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/TimedInterruptCustomizerProvider.java
new file mode 100644
index 0000000..a8c8eb1
--- /dev/null
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/TimedInterruptCustomizerProvider.java
@@ -0,0 +1,57 @@
+/*
+ * 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.tinkerpop.gremlin.groovy;
+
+import groovy.transform.TimedInterrupt;
+import org.codehaus.groovy.ast.tools.GeneralUtils;
+import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
+import org.codehaus.groovy.control.customizers.CompilationCustomizer;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Injects a check in loops and other areas of code to interrupt script execution if the run time exceeds the
+ * specified time.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class TimedInterruptCustomizerProvider implements CompilerCustomizerProvider {
+    public static final long DEFAULT_INTERRUPTION_TIMEOUT = 60000;
+
+    private final long interruptionTimeout;
+
+    public TimedInterruptCustomizerProvider() {
+        this(DEFAULT_INTERRUPTION_TIMEOUT);
+    }
+
+    public TimedInterruptCustomizerProvider(final long interruptionTimeout) {
+        this.interruptionTimeout = interruptionTimeout;
+    }
+
+    @Override
+    public CompilationCustomizer create() {
+        final Map<String, Object> timedInterruptAnnotationParams = new HashMap<>();
+        timedInterruptAnnotationParams.put("value", interruptionTimeout);
+        timedInterruptAnnotationParams.put("unit", GeneralUtils.propX(GeneralUtils.classX(TimeUnit.class), TimeUnit.MILLISECONDS.toString()));
+        timedInterruptAnnotationParams.put("checkOnMethodStart", false);
+        return new ASTTransformationCustomizer(timedInterruptAnnotationParams, TimedInterrupt.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95b6eb8a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
index 3e884ae..ba310ec 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
@@ -18,8 +18,10 @@
  */
 package org.apache.tinkerpop.gremlin.groovy.engine;
 
+import org.apache.tinkerpop.gremlin.groovy.CompilerCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.DefaultImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.SecurityCustomizerProvider;
+import org.apache.tinkerpop.gremlin.groovy.TimedInterruptCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.DependencyManager;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine;
 import org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngineFactory;
@@ -329,24 +331,26 @@ public class ScriptEngines implements AutoCloseable {
         // generically with the DependencyManager interface, but going to wait to see how other ScriptEngines
         // develop for TinkerPop3 before committing too deeply here to any specific way of doing this.
         if (language.equals(gremlinGroovyScriptEngineFactory.getLanguageName())) {
+            final List<CompilerCustomizerProvider> providers = new ArrayList<>();
+            providers.add(new DefaultImportCustomizerProvider(imports, staticImports));
+
             final String clazz = (String) config.getOrDefault("sandbox", "");
-            SecurityCustomizerProvider securityCustomizerProvider = null;
             if (!clazz.isEmpty()) {
                 try {
                     final Class providerClass = Class.forName(clazz);
                     final GroovyInterceptor interceptor = (GroovyInterceptor) providerClass.newInstance();
-                    securityCustomizerProvider = new SecurityCustomizerProvider(interceptor);
+                    providers.add(new SecurityCustomizerProvider(interceptor));
                 } catch (Exception ex) {
                     logger.warn("Could not instantiate GroovyInterceptor implementation [%s] for the SecurityCustomizerProvider.  It will not be applied.", clazz);
-                    securityCustomizerProvider = null;
                 }
             }
 
             final long interruptionTimeout = ((Number) config.getOrDefault("interruptionTimeout",
-                    GremlinGroovyScriptEngine.DEFAULT_SCRIPT_EVALUATION_TIMEOUT)).longValue();
+                    TimedInterruptCustomizerProvider.DEFAULT_INTERRUPTION_TIMEOUT)).longValue();
+            if (interruptionTimeout > 0) providers.add(new TimedInterruptCustomizerProvider(interruptionTimeout));
 
-            return Optional.of((ScriptEngine) new GremlinGroovyScriptEngine(interruptionTimeout,
-                    new DefaultImportCustomizerProvider(imports, staticImports), securityCustomizerProvider));
+            final CompilerCustomizerProvider[] providerArray = new CompilerCustomizerProvider[providers.size()];
+            return Optional.of((ScriptEngine) new GremlinGroovyScriptEngine(providers.toArray(providerArray)));
         } else {
             return Optional.ofNullable(SCRIPT_ENGINE_MANAGER.getEngineByName(language));
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95b6eb8a/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 bb8b912..d93fd01 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
@@ -86,7 +86,6 @@ import java.util.stream.Collectors;
  */
 public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements DependencyManager, AutoCloseable {
 
-    public static final long DEFAULT_SCRIPT_EVALUATION_TIMEOUT = 60000;
     public static final String KEY_REFERENCE_TYPE = "#jsr223.groovy.engine.keep.globals";
     public static final String REFERENCE_TYPE_PHANTOM = "phantom";
     public static final String REFERENCE_TYPE_WEAK = "weak";
@@ -131,11 +130,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
     private ImportCustomizerProvider importCustomizerProvider;
     private Optional<SecurityCustomizerProvider> securityProvider;
 
-    /**
-     * If this value is zero then no timeout is applied.
-     */
-    private final long scriptEvaluationTimeout;
-
     private final Set<Artifact> artifactsToUse = new HashSet<>();
 
     private final List<CompilerCustomizerProvider> customizerProviders;
@@ -145,11 +139,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
     }
 
     public GremlinGroovyScriptEngine(final CompilerCustomizerProvider... compilerCustomizerProviders) {
-        this(DEFAULT_SCRIPT_EVALUATION_TIMEOUT, compilerCustomizerProviders);
-    }
-
-    public GremlinGroovyScriptEngine(final long scriptEvaluationTimeout,
-                                     final CompilerCustomizerProvider... compilerCustomizerProviders) {
         final List<CompilerCustomizerProvider> providers = Arrays.asList(compilerCustomizerProviders);
 
         GremlinLoader.load();
@@ -169,7 +158,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
                 .filter(p -> p != null && !(p instanceof SecurityCustomizerProvider || p instanceof ImportCustomizerProvider))
                 .collect(Collectors.toList());
 
-        this.scriptEvaluationTimeout = scriptEvaluationTimeout;
         createClassLoader();
     }
 
@@ -496,14 +484,6 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
         if (this.securityProvider.isPresent())
             conf.addCompilationCustomizers(this.securityProvider.get().create());
 
-        if (scriptEvaluationTimeout > 0) {
-            final Map<String, Object> timedInterruptAnnotationParams = new HashMap<>();
-            timedInterruptAnnotationParams.put("value", scriptEvaluationTimeout);
-            timedInterruptAnnotationParams.put("unit", GeneralUtils.propX(GeneralUtils.classX(TimeUnit.class), TimeUnit.MILLISECONDS.toString()));
-            timedInterruptAnnotationParams.put("checkOnMethodStart", false);
-            conf.addCompilationCustomizers(new ASTTransformationCustomizer(timedInterruptAnnotationParams, TimedInterrupt.class));
-        }
-
         conf.addCompilationCustomizers(new ASTTransformationCustomizer(ThreadInterrupt.class));
 
         customizerProviders.forEach(p -> conf.addCompilationCustomizers(p.create()));

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/95b6eb8a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
index ee6abe9..15c4cb4 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
@@ -23,6 +23,7 @@ import groovy.lang.Script;
 import org.apache.tinkerpop.gremlin.groovy.DefaultImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.NoImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.SecurityCustomizerProvider;
+import org.apache.tinkerpop.gremlin.groovy.TimedInterruptCustomizerProvider;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.junit.Test;
@@ -310,7 +311,8 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldTimeoutScriptOnTimedWhile() throws Exception {
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(3000, new DefaultImportCustomizerProvider());
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(
+                new TimedInterruptCustomizerProvider(1000), new DefaultImportCustomizerProvider());
         try {
             engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 10000) {}");
             fail("This should have timed out");
@@ -321,8 +323,9 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldTimeoutScriptOnTimedWhileOnceEngineHasBeenAliveForLongerThanTimeout() throws Exception {
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(3000, new DefaultImportCustomizerProvider());
-        Thread.sleep(4000);
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(
+                new TimedInterruptCustomizerProvider(1000), new DefaultImportCustomizerProvider());
+        Thread.sleep(2000);
         try {
             engine.eval("s = System.currentTimeMillis();\nwhile((System.currentTimeMillis() - s) < 10000) {}");
             fail("This should have timed out");
@@ -335,7 +338,8 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldContinueToEvalScriptsEvenWithTimedInterrupt() throws Exception {
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(50, new DefaultImportCustomizerProvider());
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(
+                new TimedInterruptCustomizerProvider(50), new DefaultImportCustomizerProvider());
 
         for (int ix = 0; ix < 10; ix++) {
             try {
@@ -356,7 +360,8 @@ public class GremlinGroovyScriptEngineTest {
     @Test
     public void shouldNotTimeoutStandaloneFunction() throws Exception {
         // use a super fast timeout which should not prevent the call of a cached function
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(1, new DefaultImportCustomizerProvider());
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(
+                new TimedInterruptCustomizerProvider(1), new DefaultImportCustomizerProvider());
         engine.eval("def addItUp(x,y) { x + y }");
 
         assertEquals(3, engine.eval("addItUp(1,2)"));


[06/11] incubator-tinkerpop git commit: Update javadoc.

Posted by sp...@apache.org.
Update javadoc.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/8b4f3df0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/8b4f3df0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/8b4f3df0

Branch: refs/heads/compiler-customizer
Commit: 8b4f3df05defd73a5300a45196eede6a346e2544
Parents: e41b52c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 12:45:45 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 12:45:45 2015 -0400

----------------------------------------------------------------------
 .../gremlin/groovy/jsr223/DependencyManager.java          | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8b4f3df0/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/DependencyManager.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/DependencyManager.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/DependencyManager.java
index e182ac8..5c1b8fe 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/DependencyManager.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/DependencyManager.java
@@ -18,8 +18,10 @@
  */
 package org.apache.tinkerpop.gremlin.groovy.jsr223;
 
+import org.apache.tinkerpop.gremlin.groovy.ImportCustomizerProvider;
 import org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPlugin;
 import org.apache.tinkerpop.gremlin.groovy.plugin.GremlinPluginException;
+import org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor;
 
 import java.util.List;
 import java.util.Map;
@@ -36,16 +38,16 @@ public interface DependencyManager {
     /**
      * Take maven coordinates and load the classes into the classloader used by the ScriptEngine.  Those ScriptEngines
      * that can support script engine plugins should check if there are any new {@link GremlinPlugin}
-     * implementations in the classloader.  The {@link org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine}
+     * implementations in the classloader.  The {@link GremlinGroovyScriptEngine}
      * implementation uses ServiceLoader to figure out if there are such classes to return.
      * <p/>
      * It is up to the caller to execute the
      * {@link GremlinPlugin#pluginTo(org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor)} method.  The reason for
      * this has to do with conflicts that can occur with mapper imports that are added via the
-     * {@link org.apache.tinkerpop.gremlin.groovy.ImportCustomizerProvider} and scripts executed through the
-     * {@link org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor}. Generally speaking, all calls to this "use" method
+     * {@link ImportCustomizerProvider} and scripts executed through the
+     * {@link PluginAcceptor}. Generally speaking, all calls to this "use" method
      * should be complete prior to calling
-     * {@link GremlinPlugin#pluginTo(org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor)}.
+     * {@link GremlinPlugin#pluginTo(PluginAcceptor)}.
      */
     List<GremlinPlugin> use(final String group, final String artifact, final String version);
 


[03/11] incubator-tinkerpop git commit: Fix compile errors after merge.

Posted by sp...@apache.org.
Fix compile errors after merge.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/569ef03a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/569ef03a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/569ef03a

Branch: refs/heads/compiler-customizer
Commit: 569ef03a0042342a659d9bac19738e6ed46c04a4
Parents: 0e1c86b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 11:56:30 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 11:56:30 2015 -0400

----------------------------------------------------------------------
 .../apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java   | 5 ++---
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java    | 2 +-
 2 files changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/569ef03a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
index 5ff4494..3e884ae 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/ScriptEngines.java
@@ -345,9 +345,8 @@ public class ScriptEngines implements AutoCloseable {
             final long interruptionTimeout = ((Number) config.getOrDefault("interruptionTimeout",
                     GremlinGroovyScriptEngine.DEFAULT_SCRIPT_EVALUATION_TIMEOUT)).longValue();
 
-            return Optional.of((ScriptEngine) new GremlinGroovyScriptEngine(
-                    new DefaultImportCustomizerProvider(imports, staticImports), securityCustomizerProvider,
-                    interruptionTimeout));
+            return Optional.of((ScriptEngine) new GremlinGroovyScriptEngine(interruptionTimeout,
+                    new DefaultImportCustomizerProvider(imports, staticImports), securityCustomizerProvider));
         } else {
             return Optional.ofNullable(SCRIPT_ENGINE_MANAGER.getEngineByName(language));
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/569ef03a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
index 2bdbda3..ee6abe9 100644
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GremlinGroovyScriptEngineTest.java
@@ -335,7 +335,7 @@ public class GremlinGroovyScriptEngineTest {
 
     @Test
     public void shouldContinueToEvalScriptsEvenWithTimedInterrupt() throws Exception {
-        final ScriptEngine engine = new GremlinGroovyScriptEngine(new DefaultImportCustomizerProvider(), null, 50);
+        final ScriptEngine engine = new GremlinGroovyScriptEngine(50, new DefaultImportCustomizerProvider());
 
         for (int ix = 0; ix < 10; ix++) {
             try {


[09/11] incubator-tinkerpop git commit: Apply remaining custom CompilationCustomizers to GremlinGroovyScriptEngine

Posted by sp...@apache.org.
Apply remaining custom CompilationCustomizers to GremlinGroovyScriptEngine


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/3df735b3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/3df735b3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/3df735b3

Branch: refs/heads/compiler-customizer
Commit: 3df735b371e7c67024e2c6deb989ef1eefc4bb4f
Parents: 47c0fa3
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jul 8 13:19:31 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jul 8 13:19:31 2015 -0400

----------------------------------------------------------------------
 .../gremlin/groovy/jsr223/GremlinGroovyScriptEngine.java         | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3df735b3/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 68083e7..bb8b912 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
@@ -166,7 +166,7 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
 
         // remove used providers as the rest will be applied directly
         customizerProviders = providers.stream()
-                .filter(p -> !(p instanceof SecurityCustomizerProvider || p instanceof ImportCustomizerProvider))
+                .filter(p -> p != null && !(p instanceof SecurityCustomizerProvider || p instanceof ImportCustomizerProvider))
                 .collect(Collectors.toList());
 
         this.scriptEvaluationTimeout = scriptEvaluationTimeout;
@@ -506,6 +506,8 @@ public class GremlinGroovyScriptEngine extends GroovyScriptEngineImpl implements
 
         conf.addCompilationCustomizers(new ASTTransformationCustomizer(ThreadInterrupt.class));
 
+        customizerProviders.forEach(p -> conf.addCompilationCustomizers(p.create()));
+
         this.loader = new GremlinGroovyClassLoader(getParentLoader(), conf);
         this.securityProvider.ifPresent(SecurityCustomizerProvider::registerInterceptors);
     }