Update javadocs and other minor refactoring in remoting.

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

Branch: refs/heads/TINKERPOP-1278
Commit: 8dd021192d0b564eb282a0741cdbdc601a863efe
Parents: 39233fc
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jul 29 16:43:55 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 29 16:43:55 2016 -0400

----------------------------------------------------------------------
 .../process/remote/RemoteConnection.java        | 10 ++++++++--
 .../gremlin/process/remote/RemoteResponse.java  | 20 ++++++++++++++++++++
 .../traversal/step/util/BulkedResult.java       |  8 ++++----
 .../structure/io/gryo/GryoMapperTest.java       |  2 +-
 .../driver/remote/DriverRemoteResponse.java     | 11 ++++++++---
 .../remote/DriverTraversalSideEffects.java      | 14 ++++----------
 6 files changed, 45 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8dd02119/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
index 9efc9b8..870bed4 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteConnection.java
@@ -26,7 +26,9 @@ import java.util.Iterator;
 
 /**
  * A simple abstraction of a "connection" to a "server" that is capable of 
processing a {@link Traversal} and
- * returning an {@link Iterator} of {@link Traverser} results.
+ * returning results. Results refer to both the {@link Iterator} of results 
from the submitted {@link Traversal}
+ * as well as the side-effects produced by that {@link Traversal}. Those 
results together are wrapped in a
+ * {@link RemoteResponse}.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -39,6 +41,10 @@ public interface RemoteConnection extends AutoCloseable {
     @Deprecated
     public <E> Iterator<Traverser.Admin<E>> submit(final Traversal<?, E> 
traversal) throws RemoteConnectionException;
 
-
+    /**
+     * Submits {@link Traversal} {@link Bytecode} to a server and returns a 
{@link RemoteResponse}.
+     * The {@link RemoteResponse} is an abstraction over two types of results 
that can be returned as part of the
+     * response from the server: the results of the {@link Traversal} itself 
and the the side-effects that it produced.
+     */
     public <E> RemoteResponse<E> submit(final Bytecode bytecode) throws 
RemoteConnectionException;
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8dd02119/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteResponse.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteResponse.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteResponse.java
index 8d2e13c..d2d7be6 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteResponse.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/RemoteResponse.java
@@ -18,17 +18,37 @@
  */
 package org.apache.tinkerpop.gremlin.process.remote;
 
+import org.apache.tinkerpop.gremlin.process.remote.traversal.RemoteTraverser;
+import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import 
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalSideEffects;
 
 import java.util.Iterator;
 
 /**
+ * The {@code RemoteResponse} is returned from {@link 
RemoteConnection#submit(Bytecode)} and provides implementers a
+ * way to represent how they will return the results of a submitted {@link 
Traversal} and its side-effects. The
+ * {@code RemoteResponse} is used internally by traversals spawned from a 
{@link RemoteGraph} to put remote results
+ * into the streams of those traversals and to replace client-side {@link 
TraversalSideEffects} in those traversals.
+ *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public interface RemoteResponse<E> {
 
+    /**
+     * Gets the list of results from a {@link Traversal} executed remotely. 
Implementers may push their results into
+     * a {@link RemoteTraverser} instance to feed that {@code Iterator} or 
create their own implementation of it if
+     * there is some advantage to doing so.
+     */
     public Iterator<Traverser.Admin<E>> getResult();
 
+    /**
+     * Gets the side-effects (if any) from the remotely executed {@link 
Traversal}. Simple implementations could
+     * likely use {@link DefaultTraversalSideEffects}, but more advanced 
implementations might look to lazily load
+     * side-effects or otherwise implement some form of blocking to ensure 
that all side-effects are present from the
+     * remote location.
+     */
     public TraversalSideEffects getSideEffects();
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8dd02119/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/util/BulkedResult.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/util/BulkedResult.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/util/BulkedResult.java
index 56abf4b..1a4eaa9 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/util/BulkedResult.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/step/util/BulkedResult.java
@@ -23,16 +23,16 @@ package 
org.apache.tinkerpop.gremlin.process.remote.traversal.step.util;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class BulkedResult {
-    private final Object result;
+public class BulkedResult<T> {
+    private final T result;
     private final long bulk;
 
-    public BulkedResult(final Object result, final long bulk) {
+    public BulkedResult(final T result, final long bulk) {
         this.result = result;
         this.bulk = bulk;
     }
 
-    public Object getResult() {
+    public T getResult() {
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8dd02119/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapperTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapperTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapperTest.java
index ce737ec..4c06800 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapperTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapperTest.java
@@ -242,7 +242,7 @@ public class GryoMapperTest {
 
     @Test
     public void shouldHandleBulkedResult() throws Exception  {
-        final BulkedResult br = new BulkedResult(123, 1000);
+        final BulkedResult<Integer> br = new BulkedResult<>(123, 1000);
         final BulkedResult inOut = serializeDeserialize(br, 
BulkedResult.class);
         assertEquals(br.getBulk(), inOut.getBulk());
         assertEquals(br.getResult(), inOut.getResult());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8dd02119/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteResponse.java
----------------------------------------------------------------------
diff --git 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteResponse.java
 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteResponse.java
index 9697053..264a2cc 100644
--- 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteResponse.java
+++ 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverRemoteResponse.java
@@ -36,6 +36,8 @@ import java.util.Optional;
 import java.util.function.Supplier;
 
 /**
+ * A {@link RemoteResponse} implementation for the Gremlin Driver.
+ *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 public class DriverRemoteResponse<E> implements RemoteResponse<E> {
@@ -44,6 +46,9 @@ public class DriverRemoteResponse<E> implements 
RemoteResponse<E> {
     private final TraversalSideEffects sideEffects;
 
     public DriverRemoteResponse(final ResultSet rs, final boolean attach, 
Optional<Configuration> conf) {
+        // attaching is really just for testing purposes. it doesn't make 
sense in any real-world scenario as it would
+        // require that the client have access to the Graph instance that 
produced the result. tests need that
+        // attachment process to properly execute in full hence this little 
hack.
         if (attach) {
             if (!conf.isPresent()) throw new IllegalStateException("Traverser 
can't be reattached for testing");
             final Graph graph = ((Supplier<Graph>) 
conf.get().getProperty("hidden.for.testing.only")).get();
@@ -67,7 +72,7 @@ public class DriverRemoteResponse<E> implements 
RemoteResponse<E> {
 
     static class TraverserIterator<E> implements Iterator<Traverser.Admin<E>> {
 
-        private Iterator<Result> inner;
+        private final Iterator<Result> inner;
 
         public TraverserIterator(final Iterator<Result> resultIterator) {
             inner = resultIterator;
@@ -80,8 +85,8 @@ public class DriverRemoteResponse<E> implements 
RemoteResponse<E> {
 
         @Override
         public Traverser.Admin<E> next() {
-            final BulkedResult br = (BulkedResult) inner.next().getObject();
-            return new RemoteTraverser<>((E) br.getResult(), br.getBulk());
+            final BulkedResult<E> br = (BulkedResult) inner.next().getObject();
+            return new RemoteTraverser<>(br.getResult(), br.getBulk());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8dd02119/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverTraversalSideEffects.java
----------------------------------------------------------------------
diff --git 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverTraversalSideEffects.java
 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverTraversalSideEffects.java
index 328897a..6996df4 100644
--- 
a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverTraversalSideEffects.java
+++ 
b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/remote/DriverTraversalSideEffects.java
@@ -19,19 +19,13 @@
 package org.apache.tinkerpop.gremlin.driver.remote;
 
 import org.apache.tinkerpop.gremlin.driver.ResultSet;
-import 
org.apache.tinkerpop.gremlin.process.remote.traversal.step.util.BulkedResult;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import 
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalSideEffects;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.BinaryOperator;
 import java.util.function.Supplier;
 import java.util.function.UnaryOperator;
@@ -48,10 +42,6 @@ public class DriverTraversalSideEffects implements 
TraversalSideEffects {
         this.rs = rs;
     }
 
-    private synchronized void initializeFuture() {
-        if (null == future) future = rs.getSideEffectResults();
-    }
-
     @Override
     public <V> V get(final String key) throws IllegalArgumentException {
         initializeFuture();
@@ -153,4 +143,8 @@ public class DriverTraversalSideEffects implements 
TraversalSideEffects {
     public String toString() {
         return StringFactory.traversalSideEffectsString(this);
     }
+
+    private synchronized void initializeFuture() {
+        if (null == future) future = rs.getSideEffectResults();
+    }
 }

Reply via email to