This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch TINKERPOP-2211 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 138a4a9b49c696acb8ab2a348e4ccd712dca94b0 Author: Divij Vaidya <[email protected]> AuthorDate: Mon May 6 21:09:16 2019 -0700 TINKERPOP-2211 Add API to which allows per-request option for bytecode submission --- .../apache/tinkerpop/gremlin/driver/Client.java | 48 +++++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java index 1df2d0d..16c3b76 100644 --- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java +++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Client.java @@ -151,6 +151,24 @@ public abstract class Client { } /** + * A version of {@link #submit(Bytecode)} which provides the ability to set per-request options. + * + * @param bytecode request in the form of gremlin {@link Bytecode} + * @param options for the request + * + * @see #submit(Bytecode) + */ + public ResultSet submit(final Bytecode bytecode, final RequestOptions options) { + try { + return submitAsync(bytecode, options).get(); + } catch (UnsupportedOperationException uoe) { + throw uoe; + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + /** * An asynchronous version of {@link #submit(Traversal)}. Results are returned as {@link Traverser} instances and * are therefore bulked, meaning that to properly iterate the contents of the result each {@link Traverser#bulk()} * must be examined to determine the number of times that object should be presented in iteration. @@ -160,6 +178,18 @@ public abstract class Client { } /** + * A version of {@link #submit(Bytecode)} which provides the ability to set per-request options. + * + * @param bytecode request in the form of gremlin {@link Bytecode} + * @param options for the request + * + * @see #submitAsync(Bytecode) + */ + public CompletableFuture<ResultSet> submitAsync(final Bytecode bytecode, final RequestOptions options) { + throw new UnsupportedOperationException("This implementation does not support Traversal submission - use a sessionless Client created with from the alias() method"); + } + + /** * Initializes the client which typically means that a connection is established to the server. Depending on the * implementation and configuration this blocking call may take some time. This method will be called * automatically if it is not called directly and multiple calls will not have effect. @@ -518,9 +548,23 @@ public abstract class Client { @Override public CompletableFuture<ResultSet> submitAsync(final Bytecode bytecode) { + return submitAsync(bytecode, RequestOptions.EMPTY); + } + + @Override + public CompletableFuture<ResultSet> submitAsync(final Bytecode bytecode, final RequestOptions options) { try { - return submitAsync(buildMessage(RequestMessage.build(Tokens.OPS_BYTECODE) - .processor("traversal").addArg(Tokens.ARGS_GREMLIN, bytecode)).create()); + // need to call buildMessage() right away to get client specific configurations, that way request specific + // ones can override as needed + final RequestMessage.Builder request = buildMessage(RequestMessage.build(Tokens.OPS_BYTECODE) + .processor("traversal") + .addArg(Tokens.ARGS_GREMLIN, bytecode)); + + // apply settings if they were made available + options.getBatchSize().ifPresent(batchSize -> request.add(Tokens.ARGS_BATCH_SIZE, batchSize)); + options.getTimeout().ifPresent(timeout -> request.add(Tokens.ARGS_SCRIPT_EVAL_TIMEOUT, timeout)); + + return submitAsync(request.create()); } catch (Exception ex) { throw new RuntimeException(ex); }
