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 2016/09/30 18:54:55 UTC
tinkerpop git commit: Added simple validations to Cluster instance
creations CTR
Repository: tinkerpop
Updated Branches:
refs/heads/master ee813e902 -> 233a6ba46
Added simple validations to Cluster instance creations CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/233a6ba4
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/233a6ba4
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/233a6ba4
Branch: refs/heads/master
Commit: 233a6ba460f618a5c684f0bc2533175f90948d0e
Parents: ee813e9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 30 14:52:43 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Sep 30 14:52:43 2016 -0400
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../tinkerpop/gremlin/driver/Cluster.java | 55 +++++++++++-
.../gremlin/driver/ClusterBuilderTest.java | 88 ++++++++++++++++++++
3 files changed, 142 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/233a6ba4/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 9b3be83..ade43cd 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -59,6 +59,7 @@ TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
* Renamed the `empty.result.indicator` preference to `result.indicator.null` in Gremlin Console
* If `result.indicator.null` is set to an empty string, then no "result line" is printed in Gremlin Console.
* Deprecated `reconnectInitialDelay` on the Java driver.
+* Added some validations to `Cluster` instance building.
* Produced better errors in `readGraph` of `GryoReader` and `GraphSONReader` if a `Vertex` cannot be found in the cache on edge loading.
* VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
* New build options for `gremlin-python` where `-DglvPython` is no longer required.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/233a6ba4/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
index f420de0..b9a3cee 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/Cluster.java
@@ -510,7 +510,6 @@ public final class Cluster {
* Size of the pool for handling request/response operations. Defaults to the number of available processors.
*/
public Builder nioPoolSize(final int nioPoolSize) {
- if (nioPoolSize < 1) throw new IllegalArgumentException("The workerPoolSize must be greater than zero");
this.nioPoolSize = nioPoolSize;
return this;
}
@@ -520,7 +519,6 @@ public final class Cluster {
* by 2
*/
public Builder workerPoolSize(final int workerPoolSize) {
- if (workerPoolSize < 1) throw new IllegalArgumentException("The workerPoolSize must be greater than zero");
this.workerPoolSize = workerPoolSize;
return this;
}
@@ -872,6 +870,8 @@ public final class Cluster {
private final AtomicReference<CompletableFuture<Void>> closeFuture = new AtomicReference<>();
private Manager(final Builder builder) {
+ validateBuilder(builder);
+
this.loadBalancingStrategy = builder.loadBalancingStrategy;
this.authProps = builder.authProps;
this.contactPoints = builder.getContactPoints();
@@ -909,6 +909,57 @@ public final class Cluster {
new BasicThreadFactory.Builder().namingPattern("gremlin-driver-worker-%d").build());
}
+ private void validateBuilder(final Builder builder) {
+ if (builder.minInProcessPerConnection < 0)
+ throw new IllegalArgumentException("minInProcessPerConnection must be greater than or equal to zero");
+
+ if (builder.maxInProcessPerConnection < 1)
+ throw new IllegalArgumentException("maxInProcessPerConnection must be greater than zero");
+
+ if (builder.minInProcessPerConnection > builder.maxInProcessPerConnection)
+ throw new IllegalArgumentException("maxInProcessPerConnection cannot be less than minInProcessPerConnection");
+
+ if (builder.minSimultaneousUsagePerConnection < 0)
+ throw new IllegalArgumentException("minSimultaneousUsagePerConnection must be greater than or equal to zero");
+
+ if (builder.maxSimultaneousUsagePerConnection < 1)
+ throw new IllegalArgumentException("maxSimultaneousUsagePerConnection must be greater than zero");
+
+ if (builder.minSimultaneousUsagePerConnection > builder.maxSimultaneousUsagePerConnection)
+ throw new IllegalArgumentException("maxSimultaneousUsagePerConnection cannot be less than minSimultaneousUsagePerConnection");
+
+ if (builder.minConnectionPoolSize < 0)
+ throw new IllegalArgumentException("minConnectionPoolSize must be greater than or equal to zero");
+
+ if (builder.maxConnectionPoolSize < 1)
+ throw new IllegalArgumentException("maxConnectionPoolSize must be greater than zero");
+
+ if (builder.minConnectionPoolSize > builder.maxConnectionPoolSize)
+ throw new IllegalArgumentException("maxConnectionPoolSize cannot be less than minConnectionPoolSize");
+
+ if (builder.maxWaitForConnection < 1)
+ throw new IllegalArgumentException("maxWaitForConnection must be greater than zero");
+
+ if (builder.maxWaitForSessionClose < 1)
+ throw new IllegalArgumentException("maxWaitForSessionClose must be greater than zero");
+
+ if (builder.maxContentLength < 1)
+ throw new IllegalArgumentException("maxContentLength must be greater than zero");
+
+ if (builder.reconnectInterval < 1)
+ throw new IllegalArgumentException("reconnectInterval must be greater than zero");
+
+ if (builder.resultIterationBatchSize < 1)
+ throw new IllegalArgumentException("resultIterationBatchSize must be greater than zero");
+
+ if (builder.nioPoolSize < 1)
+ throw new IllegalArgumentException("nioPoolSize must be greater than zero");
+
+ if (builder.workerPoolSize < 1)
+ throw new IllegalArgumentException("workerPoolSize must be greater than zero");
+
+ }
+
synchronized void init() {
if (initialized)
return;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/233a6ba4/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ClusterBuilderTest.java
----------------------------------------------------------------------
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ClusterBuilderTest.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ClusterBuilderTest.java
new file mode 100644
index 0000000..cb5c469
--- /dev/null
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ClusterBuilderTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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.driver;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+@RunWith(Parameterized.class)
+public class ClusterBuilderTest {
+
+ @Parameterized.Parameters(name = "{0}")
+ public static Iterable<Object[]> data() {
+ return Arrays.asList(new Object[][]{
+ {"maxInProcessPerConnection0", Cluster.build().maxInProcessPerConnection(0), "maxInProcessPerConnection must be greater than zero"},
+ {"maxInProcessPerConnectionNeg1", Cluster.build().maxInProcessPerConnection(-1), "maxInProcessPerConnection must be greater than zero"},
+ {"minInProcessPerConnectionNeg1", Cluster.build().minInProcessPerConnection(-1), "minInProcessPerConnection must be greater than or equal to zero"},
+ {"minInProcessPerConnectionLtMax", Cluster.build().minInProcessPerConnection(100).maxInProcessPerConnection(99), "maxInProcessPerConnection cannot be less than minInProcessPerConnection"},
+ {"maxSimultaneousUsagePerConnection0", Cluster.build().maxSimultaneousUsagePerConnection(0), "maxSimultaneousUsagePerConnection must be greater than zero"},
+ {"maxSimultaneousUsagePerConnectionNeg1", Cluster.build().maxSimultaneousUsagePerConnection(-1), "maxSimultaneousUsagePerConnection must be greater than zero"},
+ {"minSimultaneousUsagePerConnectionNeg1", Cluster.build().minSimultaneousUsagePerConnection(-1), "minSimultaneousUsagePerConnection must be greater than or equal to zero"},
+ {"minSimultaneousUsagePerConnectionLtMax", Cluster.build().minSimultaneousUsagePerConnection(100).maxSimultaneousUsagePerConnection(99), "maxSimultaneousUsagePerConnection cannot be less than minSimultaneousUsagePerConnection"},
+ {"maxConnectionPoolSize0", Cluster.build().maxConnectionPoolSize(0), "maxConnectionPoolSize must be greater than zero"},
+ {"maxConnectionPoolSizeNeg1", Cluster.build().maxConnectionPoolSize(-1), "maxConnectionPoolSize must be greater than zero"},
+ {"minConnectionPoolSizeNeg1", Cluster.build().minConnectionPoolSize(-1), "minConnectionPoolSize must be greater than or equal to zero"},
+ {"minConnectionPoolSizeLteMax", Cluster.build().minConnectionPoolSize(100).maxConnectionPoolSize(99), "maxConnectionPoolSize cannot be less than minConnectionPoolSize"},
+ {"minConnectionPoolSizeLteMax", Cluster.build().minConnectionPoolSize(100).maxConnectionPoolSize(99), "maxConnectionPoolSize cannot be less than minConnectionPoolSize"},
+ {"maxConnectionPoolSize0", Cluster.build().maxWaitForConnection(0), "maxWaitForConnection must be greater than zero"},
+ {"maxWaitForSessionClose0", Cluster.build().maxWaitForSessionClose(0), "maxWaitForSessionClose must be greater than zero"},
+ {"maxWaitForSessionCloseNeg1", Cluster.build().maxWaitForSessionClose(-1), "maxWaitForSessionClose must be greater than zero"},
+ {"maxContentLength0", Cluster.build().maxContentLength(0), "maxContentLength must be greater than zero"},
+ {"maxContentLengthNeg1", Cluster.build().maxContentLength(-1), "maxContentLength must be greater than zero"},
+ {"reconnectInterval0", Cluster.build().reconnectInterval(0), "reconnectInterval must be greater than zero"},
+ {"reconnectIntervalNeg1", Cluster.build().reconnectInterval(-1), "reconnectInterval must be greater than zero"},
+ {"resultIterationBatchSize0", Cluster.build().resultIterationBatchSize(0), "resultIterationBatchSize must be greater than zero"},
+ {"resultIterationBatchSizeNeg1", Cluster.build().resultIterationBatchSize(-1), "resultIterationBatchSize must be greater than zero"},
+ {"nioPoolSize0", Cluster.build().nioPoolSize(0), "nioPoolSize must be greater than zero"},
+ {"nioPoolSizeNeg1", Cluster.build().nioPoolSize(-1), "nioPoolSize must be greater than zero"},
+ {"workerPoolSize0", Cluster.build().workerPoolSize(0), "workerPoolSize must be greater than zero"},
+ {"workerPoolSizeNeg1", Cluster.build().workerPoolSize(-1), "workerPoolSize must be greater than zero"}});
+ }
+
+ @Parameterized.Parameter(value = 0)
+ public String name;
+
+ @Parameterized.Parameter(value = 1)
+ public Cluster.Builder builder;
+
+ @Parameterized.Parameter(value = 2)
+ public String expectedErrorMessage;
+
+ @Test
+ public void shouldNotConstructAnInvalidConnection() {
+ try {
+ builder.create();
+ fail("Should not have created cluster instance");
+ } catch (Exception ex) {
+ assertThat(ex, instanceOf(IllegalArgumentException.class));
+ assertEquals(expectedErrorMessage, ex.getMessage());
+ }
+ }
+}