You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by up...@apache.org on 2018/01/18 17:55:29 UTC
[geode] branch develop updated: GEODE-4147: Add variability to
client rebalance logic.
This is an automated email from the ASF dual-hosted git repository.
upthewaterspout pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 501cfda GEODE-4147: Add variability to client rebalance logic.
501cfda is described below
commit 501cfdab2252a47084f8d2023b8047e6d375d3b6
Author: Sarge <md...@pivotal.io>
AuthorDate: Fri Jan 5 10:50:56 2018 -0800
GEODE-4147: Add variability to client rebalance logic.
---
.../internal/pooling/ConnectionManagerImpl.java | 59 ++++++++++++++++++----
.../internal/ConnectionPoolImplJUnitTest.java | 5 +-
.../pooling/ConnectionManagerJUnitTest.java | 24 ++++++++-
3 files changed, 75 insertions(+), 13 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
index b2fb679..687470b 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
@@ -15,8 +15,20 @@
package org.apache.geode.cache.client.internal.pooling;
import java.net.SocketException;
-import java.util.*;
-import java.util.concurrent.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.SplittableRandom;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
@@ -26,9 +38,18 @@ import org.apache.geode.CancelCriterion;
import org.apache.geode.CancelException;
import org.apache.geode.SystemFailure;
import org.apache.geode.cache.GatewayConfigurationException;
-import org.apache.geode.cache.client.*;
-import org.apache.geode.cache.client.internal.*;
+import org.apache.geode.cache.client.AllConnectionsInUseException;
+import org.apache.geode.cache.client.NoAvailableServersException;
+import org.apache.geode.cache.client.ServerConnectivityException;
+import org.apache.geode.cache.client.ServerOperationException;
+import org.apache.geode.cache.client.ServerRefusedConnectionException;
+import org.apache.geode.cache.client.internal.Connection;
+import org.apache.geode.cache.client.internal.ConnectionFactory;
+import org.apache.geode.cache.client.internal.Endpoint;
+import org.apache.geode.cache.client.internal.EndpointManager;
+import org.apache.geode.cache.client.internal.PoolImpl;
import org.apache.geode.cache.client.internal.PoolImpl.PoolTask;
+import org.apache.geode.cache.client.internal.QueueConnectionImpl;
import org.apache.geode.distributed.PoolCancelledException;
import org.apache.geode.distributed.internal.DistributionConfig;
import org.apache.geode.distributed.internal.ServerLocation;
@@ -87,6 +108,26 @@ public class ConnectionManagerImpl implements ConnectionManager {
private static final long NANOS_PER_MS = 1000000L;
/**
+ * Adds an arbitrary variance to a positive temporal interval. Where possible, 10% of the interval
+ * is added or subtracted from the interval. Otherwise, 1 is added or subtracted from the
+ * interval. For all positive intervals, the returned value will <bold>not</bold> equal the
+ * supplied interval.
+ *
+ * @param interval Positive temporal interval.
+ * @return Adjusted interval including the variance for positive intervals; the unmodified
+ * interval for non-positive intervals.
+ */
+ static int addVarianceToInterval(int interval) {
+ if (1 <= interval) {
+ final SplittableRandom random = new SplittableRandom();
+ final int variance = (interval < 10) ? 1 : (1 + random.nextInt((interval / 10) - 1));
+ final int sign = random.nextBoolean() ? 1 : -1;
+ return interval + (sign * variance);
+ }
+ return interval;
+ }
+
+ /**
* Create a connection manager
*
* @param poolName the name of the pool that owns us
@@ -121,12 +162,12 @@ public class ConnectionManagerImpl implements ConnectionManager {
this.endpointManager = endpointManager;
this.maxConnections = maxConnections == -1 ? Integer.MAX_VALUE : maxConnections;
this.minConnections = minConnections;
- this.lifetimeTimeout = lifetimeTimeout;
- this.lifetimeTimeoutNanos = lifetimeTimeout * NANOS_PER_MS;
- if (lifetimeTimeout != -1) {
- if (idleTimeout > lifetimeTimeout || idleTimeout == -1) {
+ this.lifetimeTimeout = addVarianceToInterval(lifetimeTimeout);
+ this.lifetimeTimeoutNanos = this.lifetimeTimeout * NANOS_PER_MS;
+ if (this.lifetimeTimeout != -1) {
+ if (idleTimeout > this.lifetimeTimeout || idleTimeout == -1) {
// lifetimeTimeout takes precedence over longer idle timeouts
- idleTimeout = lifetimeTimeout;
+ idleTimeout = this.lifetimeTimeout;
}
}
this.idleTimeout = idleTimeout;
diff --git a/geode-core/src/test/java/org/apache/geode/cache/client/internal/ConnectionPoolImplJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/client/internal/ConnectionPoolImplJUnitTest.java
index da87243..e6f2429 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/client/internal/ConnectionPoolImplJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/client/internal/ConnectionPoolImplJUnitTest.java
@@ -16,7 +16,9 @@ package org.apache.geode.cache.client.internal;
import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import java.net.InetSocketAddress;
import java.net.SocketTimeoutException;
@@ -266,5 +268,4 @@ public class ConnectionPoolImplJUnitTest {
assertEquals(location1, pool.executeOnPrimary(testOp));
assertEquals(location1, pool.executeOnQueuesAndReturnPrimaryResult(testOp));
}
-
}
diff --git a/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
index d6da9e3..60e51e1 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerJUnitTest.java
@@ -16,12 +16,12 @@ package org.apache.geode.cache.client.internal.pooling;
import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
-import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.Properties;
@@ -40,7 +40,16 @@ import org.junit.experimental.categories.Category;
import org.apache.geode.CancelCriterion;
import org.apache.geode.cache.client.AllConnectionsInUseException;
import org.apache.geode.cache.client.NoAvailableServersException;
-import org.apache.geode.cache.client.internal.*;
+import org.apache.geode.cache.client.internal.ClientUpdater;
+import org.apache.geode.cache.client.internal.Connection;
+import org.apache.geode.cache.client.internal.ConnectionFactory;
+import org.apache.geode.cache.client.internal.ConnectionStats;
+import org.apache.geode.cache.client.internal.Endpoint;
+import org.apache.geode.cache.client.internal.EndpointManager;
+import org.apache.geode.cache.client.internal.EndpointManagerImpl;
+import org.apache.geode.cache.client.internal.Op;
+import org.apache.geode.cache.client.internal.QueueManager;
+import org.apache.geode.cache.client.internal.ServerBlackList;
import org.apache.geode.distributed.DistributedMember;
import org.apache.geode.distributed.DistributedSystem;
import org.apache.geode.distributed.internal.ServerLocation;
@@ -105,6 +114,17 @@ public class ConnectionManagerJUnitTest {
}
@Test
+ public void testAddVarianceToInterval() {
+ assertThat(ConnectionManagerImpl.addVarianceToInterval(0)).as("Zero gets zero variance")
+ .isEqualTo(0);
+ assertThat(ConnectionManagerImpl.addVarianceToInterval(300000))
+ .as("Large value gets +/-10% variance").isNotEqualTo(300000).isGreaterThanOrEqualTo(270000)
+ .isLessThanOrEqualTo(330000);
+ assertThat(ConnectionManagerImpl.addVarianceToInterval(9)).as("Small value gets +/-1 variance")
+ .isNotEqualTo(9).isGreaterThanOrEqualTo(8).isLessThanOrEqualTo(10);
+ }
+
+ @Test
public void testGet()
throws InterruptedException, AllConnectionsInUseException, NoAvailableServersException {
manager = new ConnectionManagerImpl("pool", factory, endpointManager, 3, 0, -1, -1, logger,
--
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].