Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id C3D51200BAB for ; Fri, 7 Oct 2016 16:36:32 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id C2B03160AF4; Fri, 7 Oct 2016 14:36:32 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 234B3160AF6 for ; Fri, 7 Oct 2016 16:36:30 +0200 (CEST) Received: (qmail 87341 invoked by uid 500); 7 Oct 2016 14:36:30 -0000 Mailing-List: contact commits-help@tinkerpop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tinkerpop.apache.org Delivered-To: mailing list commits@tinkerpop.apache.org Received: (qmail 87257 invoked by uid 99); 7 Oct 2016 14:36:30 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Oct 2016 14:36:30 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 04F13E78A1; Fri, 7 Oct 2016 14:36:30 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: davebshow@apache.org To: commits@tinkerpop.apache.org Date: Fri, 07 Oct 2016 14:36:34 -0000 Message-Id: <0280d44edf714426ac1408599395359f@git.apache.org> In-Reply-To: <90944b1d0ad940e59b279a314e1f604d@git.apache.org> References: <90944b1d0ad940e59b279a314e1f604d@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [06/37] tinkerpop git commit: Added simple validations to Cluster instance creations CTR archived-at: Fri, 07 Oct 2016 14:36:32 -0000 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/TINKERPOP-1458 Commit: 233a6ba460f618a5c684f0bc2533175f90948d0e Parents: ee813e9 Author: Stephen Mallette Authored: Fri Sep 30 14:52:43 2016 -0400 Committer: Stephen Mallette 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> 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 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()); + } + } +}