You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/03/31 18:43:10 UTC

[2/2] incubator-tinkerpop git commit: Removed LambdaVertexProgram and LambdaMapReduce as it is one less thing to maintain. Rewrote GraphComputerTest so its ONLY for Java8 and is much easier to extend now that it no longer uses LambdaXXX.

Removed LambdaVertexProgram and LambdaMapReduce as it is one less thing to maintain. Rewrote GraphComputerTest so its ONLY for Java8 and is much easier to extend now that it no longer uses LambdaXXX.


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

Branch: refs/heads/master
Commit: 4435485b62d7c5a154bd96f7d68740f48e061611
Parents: 92ce07d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Mar 31 10:42:42 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Mar 31 10:43:00 2015 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   2 +
 .../computer/lambda/LambdaMapReduce.java        | 290 ------
 .../computer/lambda/LambdaVertexProgram.java    | 254 ------
 .../process/computer/util/ComputerGraph.java    |   6 +
 .../computer/util/VertexProgramPool.java        |   2 +-
 .../computer/GroovyGraphComputerTest.groovy     | 228 -----
 .../process/GroovyProcessComputerSuite.java     |   3 -
 .../AbstractImportCustomizerProvider.java       |  12 +-
 .../tinkerpop/gremlin/AbstractGremlinTest.java  |   4 +
 .../gremlin/process/ProcessComputerSuite.java   |   4 +
 .../process/computer/GraphComputerTest.java     | 890 +++++++++++--------
 .../computer/giraph/GiraphComputeVertex.java    |   4 +-
 .../process/computer/giraph/GiraphMemory.java   |   8 +-
 .../gremlin/hadoop/structure/HadoopGraph.java   |  12 +-
 14 files changed, 577 insertions(+), 1142 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index b55f219..8e17241 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,8 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
 TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* `GraphComputerTest` is now Java8 specific and much easier to extend with new test cases.
+* Removed `LambdaVertexProgram` and `LambdaMapReduce` as it will be one less thing to maintain.
 * Gremlin Console accepts a `max-iteration` configuration via the standard `:set` command to limit result iteration.
 * `Vertex.property()` default behavior is now `Cardinality.single`.
 * Added `ElementIdStrategy` as a `TraversalStrategy`.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaMapReduce.java
deleted file mode 100644
index 5c35656..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaMapReduce.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * 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.process.computer.lambda;
-
-import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
-import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
-import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
-import org.apache.tinkerpop.gremlin.process.computer.util.LambdaHolder;
-import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.util.function.TriConsumer;
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Optional;
-import java.util.function.BiConsumer;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class LambdaMapReduce<MK, MV, RK, RV, R> extends StaticMapReduce<MK, MV, RK, RV, R> {
-
-    public static final String MAP_LAMBDA = "gremlin.lambdaMapReduce.mapLambda";
-    public static final String MAP_KEY_SORT = "gremlin.lambdaMapReduce.mapKeySort";
-    public static final String COMBINE_LAMBDA = "gremlin.lambdaMapReduce.combineLambda";
-    public static final String REDUCE_LAMBDA = "gremlin.lambdaMapReduce.reduceLambda";
-    public static final String REDUCE_KEY_SORT = "gremlin.lambdaMapReduce.reduceKeySort";
-    public static final String MEMORY_LAMBDA = "gremlin.lambdaMapReduce.memoryLambda";
-    public static final String MEMORY_KEY = "gremlin.lambdaMapReduce.memoryKey";
-
-    private LambdaHolder<BiConsumer<Vertex, MapEmitter<MK, MV>>> mapLambdaHolder;
-    private LambdaHolder<Supplier<Comparator<MK>>> mapKeySortLambdaHolder;
-    private LambdaHolder<TriConsumer<MK, Iterator<MV>, ReduceEmitter<RK, RV>>> combineLambdaHolder;
-    private LambdaHolder<TriConsumer<MK, Iterator<MV>, ReduceEmitter<RK, RV>>> reduceLambdaHolder;
-    private LambdaHolder<Supplier<Comparator<RK>>> reduceKeySortLambdaHolder;
-    private LambdaHolder<Function<Iterator<KeyValue<RK, RV>>, R>> memoryLambdaHolder;
-    private String memoryKey;
-
-    private LambdaMapReduce() {
-
-    }
-
-    @Override
-    public void loadState(final Configuration configuration) {
-        this.mapLambdaHolder = LambdaHolder.loadState(configuration, MAP_LAMBDA);
-        this.mapKeySortLambdaHolder = LambdaHolder.loadState(configuration, MAP_KEY_SORT);
-        this.combineLambdaHolder = LambdaHolder.loadState(configuration, COMBINE_LAMBDA);
-        this.reduceLambdaHolder = LambdaHolder.loadState(configuration, REDUCE_LAMBDA);
-        this.reduceKeySortLambdaHolder = LambdaHolder.loadState(configuration, REDUCE_KEY_SORT);
-        this.memoryLambdaHolder = LambdaHolder.loadState(configuration, MEMORY_LAMBDA);
-        this.memoryKey = configuration.getString(MEMORY_KEY, null);
-    }
-
-    @Override
-    public void storeState(final Configuration configuration) {
-        super.storeState(configuration);
-        if (null != this.mapLambdaHolder)
-            this.mapLambdaHolder.storeState(configuration);
-        if (null != this.mapKeySortLambdaHolder)
-            this.mapKeySortLambdaHolder.storeState(configuration);
-        if (null != this.combineLambdaHolder)
-            this.combineLambdaHolder.storeState(configuration);
-        if (null != this.reduceLambdaHolder)
-            this.reduceLambdaHolder.storeState(configuration);
-        if (null != this.reduceKeySortLambdaHolder)
-            this.reduceKeySortLambdaHolder.storeState(configuration);
-        if (null != this.memoryLambdaHolder)
-            this.memoryLambdaHolder.storeState(configuration);
-        configuration.setProperty(MEMORY_KEY, this.memoryKey);
-    }
-
-    @Override
-    public boolean doStage(final Stage stage) {
-        if (stage.equals(Stage.MAP))
-            return null != this.mapLambdaHolder;
-        else if (stage.equals(Stage.COMBINE))
-            return null != this.combineLambdaHolder;
-        else
-            return null != this.reduceLambdaHolder;
-    }
-
-    @Override
-    public void map(final Vertex vertex, final MapEmitter<MK, MV> emitter) {
-        this.mapLambdaHolder.get().accept(vertex, emitter);
-    }
-
-    @Override
-    public void combine(final MK key, final Iterator<MV> values, final ReduceEmitter<RK, RV> emitter) {
-        this.combineLambdaHolder.get().accept(key, values, emitter);
-    }
-
-    @Override
-    public void reduce(final MK key, final Iterator<MV> values, final ReduceEmitter<RK, RV> emitter) {
-        this.reduceLambdaHolder.get().accept(key, values, emitter);
-    }
-
-    @Override
-    public Optional<Comparator<MK>> getMapKeySort() {
-        return null == this.mapKeySortLambdaHolder ? Optional.empty() : Optional.of(this.mapKeySortLambdaHolder.get().get());
-    }
-
-    @Override
-    public Optional<Comparator<RK>> getReduceKeySort() {
-        return null == this.reduceKeySortLambdaHolder ? Optional.empty() : Optional.of(this.reduceKeySortLambdaHolder.get().get());
-    }
-
-    @Override
-    public R generateFinalResult(final Iterator<KeyValue<RK, RV>> keyValues) {
-        return null == this.memoryLambdaHolder ? (R) keyValues : this.memoryLambdaHolder.get().apply(keyValues);
-    }
-
-    @Override
-    public String getMemoryKey() {
-        return this.memoryKey;
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.mapReduceString(this, this.memoryKey);
-    }
-
-    //////////////////
-
-    public static <MK, MV, RK, RV, R> Builder<MK, MV, RK, RV, R> build() {
-        return new Builder<>();
-    }
-
-    public static class Builder<MK, MV, RK, RV, R> {
-
-        private final Configuration configuration = new BaseConfiguration();
-
-        public Builder<MK, MV, RK, RV, R> map(final BiConsumer<Vertex, MapReduce.MapEmitter<MK, MV>> mapLambda) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, MAP_LAMBDA, mapLambda);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> map(final Class<? extends BiConsumer<Vertex, MapReduce.MapEmitter<MK, MV>>> mapClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, MAP_LAMBDA, mapClass);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> map(final String scriptEngine, final String mapScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, MAP_LAMBDA, new String[]{scriptEngine, mapScript});
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> map(final String setupScript) {
-            return map(AbstractVertexProgramBuilder.GREMLIN_GROOVY, setupScript);
-        }
-
-        //
-
-        public Builder<MK, MV, RK, RV, R> mapKeySort(final Comparator<MK> comparator) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, MAP_KEY_SORT, comparator);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> mapKeySort(final Class<? extends Comparator<MK>> comparatorClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, MAP_KEY_SORT, comparatorClass);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> mapKeySort(final String scriptEngine, final String reduceScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, MAP_KEY_SORT, new String[]{scriptEngine, reduceScript});
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> mapKeySort(final String setupScript) {
-            return mapKeySort(AbstractVertexProgramBuilder.GREMLIN_GROOVY, setupScript);
-        }
-
-        ////////////
-
-        public Builder<MK, MV, RK, RV, R> combine(TriConsumer<MK, Iterator<MV>, MapReduce.ReduceEmitter<RK, RV>> combineLambda) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, COMBINE_LAMBDA, combineLambda);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> combine(final Class<? extends TriConsumer<MK, Iterator<MV>, MapReduce.ReduceEmitter<RK, RV>>> combineClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, COMBINE_LAMBDA, combineClass);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> combine(final String scriptEngine, final String combineScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, COMBINE_LAMBDA, new String[]{scriptEngine, combineScript});
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> combine(final String setupScript) {
-            return combine(AbstractVertexProgramBuilder.GREMLIN_GROOVY, setupScript);
-        }
-
-        ////////////
-
-        public Builder<MK, MV, RK, RV, R> reduce(TriConsumer<MK, Iterator<MV>, MapReduce.ReduceEmitter<RK, RV>> reduceLambda) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, REDUCE_LAMBDA, reduceLambda);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> reduce(Class<? extends TriConsumer<MK, Iterator<MV>, MapReduce.ReduceEmitter<RK, RV>>> reduceClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, REDUCE_LAMBDA, reduceClass);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> reduce(final String scriptEngine, final String reduceScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, REDUCE_LAMBDA, new String[]{scriptEngine, reduceScript});
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> reduce(final String setupScript) {
-            return reduce(AbstractVertexProgramBuilder.GREMLIN_GROOVY, setupScript);
-        }
-
-        //
-
-        public Builder<MK, MV, RK, RV, R> reduceKeySort(final Supplier<Comparator<RK>> comparator) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, REDUCE_KEY_SORT, comparator);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> reduceKeySort(final Class<? extends Supplier<Comparator<RK>>> comparatorClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, REDUCE_KEY_SORT, comparatorClass);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> reduceKeySort(final String scriptEngine, final String reduceScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, REDUCE_KEY_SORT, new String[]{scriptEngine, reduceScript});
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> reduceKeySort(final String setupScript) {
-            return reduceKeySort(AbstractVertexProgramBuilder.GREMLIN_GROOVY, setupScript);
-        }
-
-        ////////////
-
-        public Builder<MK, MV, RK, RV, R> memory(Function<Iterator<KeyValue<RK, RV>>, R> memoryLambda) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, MEMORY_LAMBDA, memoryLambda);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> memory(Class<? extends Function<Iterator<KeyValue<RK, RV>>, R>> memoryClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, MEMORY_LAMBDA, memoryClass);
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> memory(final String scriptEngine, final String memoryScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, MEMORY_LAMBDA, new String[]{scriptEngine, memoryScript});
-            return this;
-        }
-
-        public Builder<MK, MV, RK, RV, R> memory(final String setupScript) {
-            return memory(AbstractVertexProgramBuilder.GREMLIN_GROOVY, setupScript);
-        }
-
-        ////////////
-
-        public Builder<MK, MV, RK, RV, R> memoryKey(final String memoryKey) {
-            this.configuration.setProperty(LambdaMapReduce.MEMORY_KEY, memoryKey);
-            return this;
-        }
-
-        public LambdaMapReduce<MK, MV, RK, RV, R> create() {
-            LambdaMapReduce<MK, MV, RK, RV, R> lambdaMapReduce = new LambdaMapReduce<>();
-            lambdaMapReduce.loadState(this.configuration);
-            return lambdaMapReduce;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaVertexProgram.java
deleted file mode 100644
index 4181ba8..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/lambda/LambdaVertexProgram.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * 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.process.computer.lambda;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
-import org.apache.tinkerpop.gremlin.process.computer.Memory;
-import org.apache.tinkerpop.gremlin.process.computer.MessageScope;
-import org.apache.tinkerpop.gremlin.process.computer.Messenger;
-import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
-import org.apache.tinkerpop.gremlin.process.computer.util.LambdaHolder;
-import org.apache.tinkerpop.gremlin.process.computer.util.StaticVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.util.VertexProgramHelper;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-import org.apache.tinkerpop.gremlin.util.function.TriConsumer;
-
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public class LambdaVertexProgram<M extends Serializable> extends StaticVertexProgram<M> {
-
-    private static final Set<MessageScope> MESSAGE_SCOPES = new HashSet<>(Collections.singletonList(MessageScope.Global.instance()));
-
-    private static final String SETUP_LAMBDA = "gremlin.lambdaVertexProgram.setupLambda";
-    private static final String EXECUTE_LAMBDA = "gremlin.lambdaVertexProgram.executeLambda";
-    private static final String TERMINATE_LAMBDA = "gremlin.lambdaVertexProgram.terminateLambda";
-    private static final String ELEMENT_COMPUTE_KEYS = "gremlin.lambdaVertexProgram.elementComputeKeys";
-    private static final String MEMORY_COMPUTE_KEYS = "gremlin.lambdaVertexProgram.memoryComputeKeys";
-
-    private LambdaHolder<Consumer<Memory>> setupLambdaHolder;
-    private Consumer<Memory> setupLambda;
-    private LambdaHolder<TriConsumer<Vertex, Messenger<M>, Memory>> executeLambdaHolder;
-    private TriConsumer<Vertex, Messenger<M>, Memory> executeLambda;
-    private LambdaHolder<Predicate<Memory>> terminateLambdaHolder;
-    private Predicate<Memory> terminateLambda;
-    private Set<String> elementComputeKeys;
-    private Set<String> memoryComputeKeys;
-
-    private LambdaVertexProgram() {
-    }
-
-    @Override
-    public void loadState(final Configuration configuration) {
-        this.setupLambdaHolder = LambdaHolder.loadState(configuration, SETUP_LAMBDA);
-        this.executeLambdaHolder = LambdaHolder.loadState(configuration, EXECUTE_LAMBDA);
-        this.terminateLambdaHolder = LambdaHolder.loadState(configuration, TERMINATE_LAMBDA);
-        this.setupLambda = null == this.setupLambdaHolder ? s -> {
-        } : this.setupLambdaHolder.get();
-        this.executeLambda = null == this.executeLambdaHolder ? (v, m, s) -> {
-        } : this.executeLambdaHolder.get();
-        this.terminateLambda = null == this.terminateLambdaHolder ? s -> true : this.terminateLambdaHolder.get();
-
-        try {
-            this.elementComputeKeys = configuration.containsKey(ELEMENT_COMPUTE_KEYS) ?
-                    VertexProgramHelper.deserialize(configuration, ELEMENT_COMPUTE_KEYS) : Collections.emptySet();
-            this.memoryComputeKeys = configuration.containsKey(MEMORY_COMPUTE_KEYS) ?
-                    VertexProgramHelper.deserialize(configuration, MEMORY_COMPUTE_KEYS) : Collections.emptySet();
-        } catch (Exception e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public void storeState(final Configuration configuration) {
-        super.storeState(configuration);
-        if (null != this.setupLambdaHolder)
-            this.setupLambdaHolder.storeState(configuration);
-        if (null != this.executeLambdaHolder)
-            this.executeLambdaHolder.storeState(configuration);
-        if (null != this.terminateLambdaHolder)
-            this.terminateLambdaHolder.storeState(configuration);
-
-        try {
-            VertexProgramHelper.serialize(this.elementComputeKeys, configuration, ELEMENT_COMPUTE_KEYS);
-            VertexProgramHelper.serialize(this.memoryComputeKeys, configuration, MEMORY_COMPUTE_KEYS);
-        } catch (Exception e) {
-            throw new IllegalStateException(e.getMessage(), e);
-        }
-    }
-
-    @Override
-    public void setup(final Memory memory) {
-        this.setupLambda.accept(memory);
-    }
-
-
-    @Override
-    public void execute(final Vertex vertex, final Messenger<M> messenger, final Memory memory) {
-        this.executeLambda.accept(vertex, messenger, memory);
-    }
-
-    @Override
-    public boolean terminate(final Memory memory) {
-        return this.terminateLambda.test(memory);
-    }
-
-    @Override
-    public Set<String> getElementComputeKeys() {
-        return this.elementComputeKeys;
-    }
-
-    @Override
-    public Set<String> getMemoryComputeKeys() {
-        return this.memoryComputeKeys;
-    }
-
-    @Override
-    public Set<MessageScope> getMessageScopes(final Memory memory) {
-        return MESSAGE_SCOPES;
-    }
-
-    @Override
-    public GraphComputer.ResultGraph getPreferredResultGraph() {
-        return GraphComputer.ResultGraph.ORIGINAL;
-    }
-
-    @Override
-    public GraphComputer.Persist getPreferredPersist() {
-        return GraphComputer.Persist.NOTHING;
-    }
-
-    @Override
-    public String toString() {
-        return StringFactory.vertexProgramString(this);
-    }
-
-    //////////////////////////////
-
-    public static Builder build() {
-        return new Builder();
-    }
-
-    public static class Builder extends AbstractVertexProgramBuilder<Builder> {
-
-
-        private Builder() {
-            super(LambdaVertexProgram.class);
-        }
-
-        public Builder setup(final Consumer<Memory> setupLambda) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, SETUP_LAMBDA, setupLambda);
-            return this;
-        }
-
-        public Builder setup(final Class<? extends Consumer<Memory>> setupClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, SETUP_LAMBDA, setupClass);
-            return this;
-        }
-
-        public Builder setup(final String scriptEngine, final String setupScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, SETUP_LAMBDA, new String[]{scriptEngine, setupScript});
-            return this;
-        }
-
-        public Builder setup(final String setupScript) {
-            return setup(GREMLIN_GROOVY, setupScript);
-        }
-
-        ///////
-
-        public Builder execute(final TriConsumer<Vertex, Messenger, Memory> executeLambda) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, EXECUTE_LAMBDA, executeLambda);
-            return this;
-        }
-
-        public Builder execute(final Class<? extends TriConsumer<Vertex, Messenger, Memory>> executeClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, EXECUTE_LAMBDA, executeClass);
-            return this;
-        }
-
-        public Builder execute(final String scriptEngine, final String executeScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, EXECUTE_LAMBDA, new String[]{scriptEngine, executeScript});
-            return this;
-        }
-
-        public Builder execute(final String setupScript) {
-            return execute(GREMLIN_GROOVY, setupScript);
-        }
-
-        ///////
-
-        public Builder terminate(final Predicate<Memory> terminateLambda) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.OBJECT, TERMINATE_LAMBDA, terminateLambda);
-            return this;
-        }
-
-        public Builder terminate(final Class<? extends Predicate<Memory>> terminateClass) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.CLASS, TERMINATE_LAMBDA, terminateClass);
-            return this;
-        }
-
-        public Builder terminate(final String scriptEngine, final String terminateScript) {
-            LambdaHolder.storeState(this.configuration, LambdaHolder.Type.SCRIPT, TERMINATE_LAMBDA, new String[]{scriptEngine, terminateScript});
-            return this;
-        }
-
-        public Builder terminate(final String setupScript) {
-            return terminate(GREMLIN_GROOVY, setupScript);
-        }
-
-        ///////
-
-        public Builder memoryComputeKeys(final Set<String> memoryComputeKeys) {
-            try {
-                VertexProgramHelper.serialize(memoryComputeKeys, configuration, MEMORY_COMPUTE_KEYS);
-                return this;
-            } catch (Exception e) {
-                throw new IllegalStateException(e.getMessage(), e);
-            }
-        }
-
-        public Builder elementComputeKeys(final Set<String> elementComputeKeys) {
-            try {
-                VertexProgramHelper.serialize(elementComputeKeys, configuration, ELEMENT_COMPUTE_KEYS);
-                return this;
-            } catch (Exception e) {
-                throw new IllegalStateException(e.getMessage(), e);
-            }
-        }
-
-        public Builder memoryComputeKeys(final String... memoryComputeKeys) {
-            return this.memoryComputeKeys(new HashSet<>(Arrays.asList(memoryComputeKeys)));
-        }
-
-        public Builder elementComputeKeys(final String... elementComputeKeys) {
-            return this.elementComputeKeys(new HashSet<>(Arrays.asList(elementComputeKeys)));
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ComputerGraph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ComputerGraph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ComputerGraph.java
index 3f52244..7f93b50 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ComputerGraph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/ComputerGraph.java
@@ -210,16 +210,22 @@ public class ComputerGraph implements Graph {
 
         @Override
         public <V> VertexProperty<V> property(final String key, final V value) {
+            if(!computeKeys.contains(key))
+                throw GraphComputer.Exceptions.providedKeyIsNotAnElementComputeKey(key);
             return new ComputerVertexProperty<>(this.asVertex().property(key, value));
         }
 
         @Override
         public <V> VertexProperty<V> property(final String key, final V value, final Object... keyValues) {
+            if(!computeKeys.contains(key))
+                throw GraphComputer.Exceptions.providedKeyIsNotAnElementComputeKey(key);
             return new ComputerVertexProperty<>(this.asVertex().property(key, value, keyValues));
         }
 
         @Override
         public <V> VertexProperty<V> property(final VertexProperty.Cardinality cardinality, final String key, final V value, final Object... keyValues) {
+            if(!computeKeys.contains(key))
+                throw GraphComputer.Exceptions.providedKeyIsNotAnElementComputeKey(key);
             return new ComputerVertexProperty<>(this.asVertex().property(cardinality, key, value, keyValues));
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
index 0632708..b77c310 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/util/VertexProgramPool.java
@@ -30,7 +30,7 @@ import java.util.concurrent.TimeUnit;
 public final class VertexProgramPool {
 
     private final LinkedBlockingQueue<VertexProgram<?>> pool;
-    private static final int TIMEOUT_MS = 2500;
+    private static final int TIMEOUT_MS = 10000;
 
     public VertexProgramPool(final VertexProgram vertexProgram, final int poolSize) {
         this.pool = new LinkedBlockingQueue<>(poolSize);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy
deleted file mode 100644
index e953d24..0000000
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/computer/GroovyGraphComputerTest.groovy
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * 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.process.computer
-
-import org.apache.tinkerpop.gremlin.process.computer.lambda.LambdaMapReduce
-import org.apache.tinkerpop.gremlin.process.computer.lambda.LambdaVertexProgram
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public abstract class GroovyGraphComputerTest {
-
-    public static class ComputerTraversals extends GraphComputerTest {
-        public GraphComputer get_g_compute() {
-            g.getGraphComputer().get();
-        }
-
-        @Override
-        public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX_memoryKeysXset_incr_and_orX() {
-            g.getGraphComputer().get().program(LambdaVertexProgram.build().memoryComputeKeys("set", "incr", "and", "or").create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX_memoryKeysXnullX() {
-            g.getGraphComputer().get().program(LambdaVertexProgram.build().memoryComputeKeys([null] as Set).create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX_memoryKeysX_X() {
-            g.getGraphComputer().get().program(LambdaVertexProgram.build().memoryComputeKeys('').create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_setupXsetXa_trueXX_executeXX_terminateXtrueX() {
-            g.getGraphComputer().get().program(LambdaVertexProgram.build().setup("gremlin-groovy", "a.set('a', true)").create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_setupXX_executeXX_terminateXtrueX() {
-            g.getGraphComputer().get().program(LambdaVertexProgram.build().create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_setupXX_executeXv_blah_m_incrX_terminateX1X_elementKeysXnameLengthCounterX_memoryKeysXa_bX() {
-            return g.getGraphComputer().get().program(LambdaVertexProgram.build().
-                    execute("gremlin-groovy", """
-                        import static org.junit.Assert.*;
-                        try {
-                            a.property("blah", "blah");
-                            fail("Should throw an IllegalArgumentException");
-                        } catch (IllegalArgumentException e) {
-                            assertEquals(GraphComputer.Exceptions.providedKeyIsNotAnElementComputeKey("blah").getMessage(), e.getMessage());
-                        } catch (Exception e) {
-                            fail("Should throw an IllegalArgumentException: " + e);
-                        }
-
-                        c.incr("a", 1);
-                        if (c.isInitialIteration()) {
-                            a.property("nameLengthCounter", a.<String>value("name").length());
-                            c.incr("b", a.<String>value("name").length());
-                        } else {
-                            a.property(VertexProperty.Cardinality.single,"nameLengthCounter", a.<String>value("name").length() + a.<Integer>value("nameLengthCounter"));
-                        }
-                    """).terminate("gremlin-groovy", "a.getIteration() == 1")
-                    .elementComputeKeys("nameLengthCounter").
-                    memoryComputeKeys("a", "b").create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_setupXabcdeX_executeXtestMemoryX_terminateXtestMemoryXmemoryKeysXabcdeX() {
-            g.getGraphComputer().get().program(LambdaVertexProgram.build().
-                    setup("gremlin-groovy", """
-                        a.set("a", 0l);
-                        a.set("b", 0l);
-                        a.set("c", true);
-                        a.set("d", false);
-                        a.set("e", true);
-                    """).
-                    execute("gremlin-groovy", """
-                        import static org.junit.Assert.*;
-                        // test current step values
-                        assertEquals(Long.valueOf(6 * c.getIteration()), c.get("a"));
-                        assertEquals(Long.valueOf(0), c.get("b"));
-                        if (c.isInitialIteration()) {
-                            assertTrue(c.get("c"));
-                            assertFalse(c.get("d"));
-                        } else {
-                            assertFalse(c.get("c"));
-                            assertTrue(c.get("d"));
-                        }
-                        assertTrue(c.get("e"));
-
-                        // update current step values and make sure returns are correct
-                        c.incr("a", 1l);
-                        c.incr("b", 1l);
-                        c.and("c", false);
-                        c.or("d", true);
-                        c.and("e", false);
-
-                        // test current step values, should be the same as previous prior to update
-                        assertEquals(Long.valueOf(6 * c.getIteration()), c.get("a"));
-                        assertEquals(Long.valueOf(0), c.get("b"));
-                        if (c.isInitialIteration()) {
-                            assertTrue(c.get("c"));
-                            assertFalse(c.get("d"));
-                        } else {
-                            assertFalse(c.get("c"));
-                            assertTrue(c.get("d"));
-                        }
-                        assertTrue(c.get("e"));
-                    """).
-                    terminate("gremlin-groovy", """
-                        import static org.junit.Assert.*;
-                        assertEquals(Long.valueOf(6 * (a.getIteration() + 1)), a.get("a"));
-                        assertEquals(Long.valueOf(6), a.get("b"));
-                        assertFalse(a.get("c"));
-                        assertTrue(a.get("d"));
-                        assertFalse(a.get("e"));
-                        a.set("b", 0l);
-                        a.set("e", true);
-                        return a.getIteration() > 1;
-                    """).
-                    memoryComputeKeys("a", "b", "c", "d", "e").create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_mapXageX_reduceXsumX_memoryXnextX_memoryKeyXageSumX() {
-            g.getGraphComputer().get().mapReduce(LambdaMapReduce.<MapReduce.NullObject, Integer, MapReduce.NullObject, Integer, Integer> build()
-                    .map("gremlin-groovy", "if(a.property('age').isPresent()) b.emit(a.value('age'))")
-                    .reduce("gremlin-groovy", "c.emit(b.sum())")
-                    .memory("gremlin-groovy", "a.next().getValue()")
-                    .memoryKey("ageSum").create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_executeXcounterX_terminateX8X_mapreduceXcounter_aX_mapreduceXcounter_bX() {
-            g.getGraphComputer().get().program(LambdaVertexProgram.build()
-                    .execute("gremlin-groovy", "a.property(VertexProperty.Cardinality.single,'counter', c.isInitialIteration() ? 1 : a.value('counter') + 1)")
-                    .terminate("gremlin-groovy", "a.getIteration() > 8")
-                    .elementComputeKeys(["counter"] as Set).create())
-                    .mapReduce(LambdaMapReduce.<MapReduce.NullObject, Integer, MapReduce.NullObject, Integer, Integer> build()
-                    .map("gremlin-groovy", "b.emit(a.value('counter'))")
-                    .reduce("gremlin-groovy",
-                    """
-                        int counter = 0;
-                        while (b.hasNext()) {
-                            counter = counter + b.next();
-                        }
-                        c.emit(MapReduce.NullObject.instance(), counter);
-                        """)
-                    .memory("gremlin-groovy", "a.next().getValue()")
-                    .memoryKey("a").create())
-                    .mapReduce(LambdaMapReduce.<MapReduce.NullObject, Integer, MapReduce.NullObject, Integer, Integer> build()
-                    .map("gremlin-groovy", "b.emit(a.value('counter'))")
-                    .combine("gremlin-groovy", "c.emit(1)")
-                    .reduce("gremlin-groovy", "c.emit(1)")
-                    .memory("gremlin-groovy", "a.next().getValue()")
-                    .memoryKey("b").create());
-
-        }
-
-        @Override
-        public GraphComputer get_g_compute_mapXidX_reduceXidX_reduceKeySortXreverseX_memoryKeyXidsX() {
-            g.getGraphComputer().get().mapReduce(LambdaMapReduce.<Long, Long, Long, Long, List<Long>> build()
-                    .map("b.emit(a.id() as Long, a.id() as Long)")
-                    .reduce("b.forEachRemaining{c.emit(it, it)}")
-                    .memoryKey("ids")
-                    .reduceKeySort("Comparator.reverseOrder()")
-                    .memory("""
-                        temp = []
-                        a.forEachRemaining{temp.add(it.getKey())}
-                        temp
-                    """)
-                    .create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_programXTraversalVertexProgram_build_traversalXg_V_both_hasXlabel_personX_age_groupCountXaXX_create() {
-            g.getGraphComputer().get().program(TraversalVertexProgram.build().
-                    traversal("GraphFactory.open(['gremlin.graph':'${graph.metaClass.theClass.getCanonicalName()}']).V().both().has(label,'person').values('age').groupCount('a')").
-                    create());
-        }
-
-        @Override
-        public GraphComputer get_g_compute_mapXoutE_countX_reduceXsumX() {
-            g.getGraphComputer().get().mapReduce(LambdaMapReduce.<MapReduce.NullObject, Long, Long, Long, List<Long>> build()
-                    .map("""
-                        import static org.junit.Assert.*;
-                        try {
-                          b.emit(org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils.count(a.edges(OUT)))
-                        } catch (IllegalStateException e) {
-                            assertEquals(GraphComputer.Exceptions.incidentAndAdjacentElementsCanNotBeAccessedInMapReduce().getMessage(), e.getMessage());
-                            throw e;
-                        } catch (Exception e) {
-                            fail("Should throw an IllegalArgumentException (incidentAndAdjacentElementsCanNotBeAccessedInMapReduce): " + e);
-                        }
-                    """)
-                    .reduce(
-                    """
-                        int counter = 0;
-                        while (b.hasNext()) {
-                            counter = counter + b.next();
-                        }
-                        c.emit(MapReduce.NullObject.instance(), counter);
-                        """)
-                    .memoryKey("count")
-                    .memory("gremlin-groovy", "a.next().getValue()")
-                    .create());
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
index 6279643..90c1a7f 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/process/GroovyProcessComputerSuite.java
@@ -22,7 +22,6 @@ import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
 import org.apache.tinkerpop.gremlin.GraphManager;
 import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader;
 import org.apache.tinkerpop.gremlin.groovy.util.SugarTestHelper;
-import org.apache.tinkerpop.gremlin.process.computer.GroovyGraphComputerTest;
 import org.apache.tinkerpop.gremlin.process.computer.ranking.PageRankVertexProgramTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.GroovyBranchTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.branch.GroovyChooseTest;
@@ -81,8 +80,6 @@ public class GroovyProcessComputerSuite extends ProcessComputerSuite {
      */
     private static final Class<?>[] testsToExecute = new Class<?>[]{
 
-            GroovyGraphComputerTest.ComputerTraversals.class,
-
             //branch
             GroovyBranchTest.ComputerTraversals.class,
             GroovyChooseTest.ComputerTraversals.class,

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/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 1579d1a..568748d 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
@@ -23,19 +23,18 @@ import groovy.json.JsonBuilder;
 import org.apache.commons.configuration.Configuration;
 import org.apache.tinkerpop.gremlin.groovy.function.GFunction;
 import org.apache.tinkerpop.gremlin.groovy.loaders.GremlinLoader;
-import org.apache.tinkerpop.gremlin.process.traversal.Scope;
-import org.apache.tinkerpop.gremlin.process.traversal.T;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.computer.clustering.peerpressure.PeerPressureVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.lambda.LambdaVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram;
 import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
+import org.apache.tinkerpop.gremlin.process.traversal.T;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
 import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.Event;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
@@ -55,8 +54,8 @@ import org.apache.tinkerpop.gremlin.structure.util.GraphFactory;
 import org.apache.tinkerpop.gremlin.structure.util.batch.BatchGraph;
 import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedElement;
 import org.apache.tinkerpop.gremlin.util.Gremlin;
-import org.apache.tinkerpop.gremlin.util.function.FunctionUtils;
 import org.apache.tinkerpop.gremlin.util.TimeUtil;
+import org.apache.tinkerpop.gremlin.util.function.FunctionUtils;
 import org.codehaus.groovy.control.customizers.CompilationCustomizer;
 import org.codehaus.groovy.control.customizers.ImportCustomizer;
 
@@ -114,7 +113,6 @@ public abstract class AbstractImportCustomizerProvider implements ImportCustomiz
         imports.add(PeerPressureVertexProgram.class.getPackage().getName() + DOT_STAR);
         imports.add(PageRankVertexProgram.class.getPackage().getName() + DOT_STAR);
         imports.add(TraversalVertexProgram.class.getPackage().getName() + DOT_STAR);
-        imports.add(LambdaVertexProgram.class.getPackage().getName() + DOT_STAR);
 
         // groovy extras
         imports.add(Grape.class.getCanonicalName());

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
index db98150..b1fcc42 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/AbstractGremlinTest.java
@@ -19,6 +19,7 @@
 package org.apache.tinkerpop.gremlin;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -35,6 +36,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Random;
 import java.util.Set;
 import java.util.function.Consumer;
@@ -54,6 +56,7 @@ import static org.junit.Assume.assumeThat;
 public abstract class AbstractGremlinTest {
     protected Graph graph;
     protected GraphTraversalSource g;
+    protected Optional<Class<? extends GraphComputer>> graphComputerClass;
     protected Configuration config;
     protected GraphProvider graphProvider;
 
@@ -72,6 +75,7 @@ public abstract class AbstractGremlinTest {
         // not sure how the strategy can ever be null, but it seems to happen in the performance tests
         graph = graphProvider.openTestGraph(config);
         g = graphProvider.traversal(graph);
+        graphComputerClass = g.getGraphComputer().isPresent() ? Optional.of(g.getGraphComputer().get().getClass()) : Optional.empty();
 
         final Method testMethod = this.getClass().getMethod(cleanMethodName(name.getMethodName()));
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4435485b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index 32336ba..1487ee8 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.process;
 
 import org.apache.tinkerpop.gremlin.AbstractGremlinSuite;
 import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputerTest;
 import org.apache.tinkerpop.gremlin.process.computer.ranking.PageRankVertexProgramTest;
 import org.apache.tinkerpop.gremlin.process.computer.util.ComputerGraphTest;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
@@ -111,6 +112,9 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
      */
     private static final Class<?>[] allTests = new Class<?>[]{
 
+            // computer, vertex program, and map/reduce semantics
+            GraphComputerTest.class,
+
             // branch
             BranchTest.Traversals.class,
             ChooseTest.Traversals.class,