[
https://issues.apache.org/jira/browse/ZOOKEEPER-2736?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15939602#comment-15939602
]
ASF GitHub Bot commented on ZOOKEEPER-2736:
-------------------------------------------
Github user eribeiro commented on a diff in the pull request:
https://github.com/apache/zookeeper/pull/205#discussion_r107823091
--- Diff: src/java/test/org/apache/zookeeper/test/MaxCnxnRateTest.java ---
@@ -0,0 +1,124 @@
+/**
+* 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.zookeeper.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.zookeeper.common.TokenBucket;
+import org.apache.zookeeper.server.ServerCnxnFactory;
+import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
+import org.apache.zookeeper.test.MaxCnxnsTest.CnxnThread;
+import org.junit.Test;
+
+public class MaxCnxnRateTest extends ClientBase {
+
+ private int maxClientCnxnRate = 1;
+ private int maxClientCnxnBurst = 10;
+ private String host;
+ private int port;
+ static CountDownLatch startLatch;
+
+ @Override
+ public void startServer() throws Exception {
+ LOG.info("STARTING server");
+ maxCnxns = 1000;
+ String split[] = hostPort.split(":");
+ host = split[0];
+ port = Integer.parseInt(split[1]);
+ QuorumPeerConfig.setRateLimiterImpl(TokenBucket.class.getName());
+ QuorumPeerConfig.setClientCnxnRate(maxClientCnxnRate);
+ QuorumPeerConfig.setClientCnxnBurst(maxClientCnxnBurst);
+ serverFactory = ServerCnxnFactory.createFactory(port, maxCnxns);
+ startServer(serverFactory);
+ startLatch = new CountDownLatch(1);
+ }
+
+ static class LatchedCnxnThread extends CnxnThread {
+
+ public LatchedCnxnThread(int i, String host, int port,
AtomicInteger connectionCounter) {
+ super(i, host, port, connectionCounter);
+ }
+
+ @Override
+ public void run() {
+ try {
+ startLatch.await();
+ super.run();
+
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * Creates more connection threads than our burst size. All try to
connect
+ * simultaneously. Ensures that only the burst size succeeded.
+ */
+ @Test
+ public void testMaxCnxnBurst() throws InterruptedException {
+ AtomicInteger connectionCounter = new AtomicInteger(0);
+ ArrayList<LatchedCnxnThread> threads = new
ArrayList<>(maxClientCnxnBurst+5);
+ for (int i = 0; i < maxClientCnxnBurst+5; i++) {
+ LatchedCnxnThread thread = new LatchedCnxnThread(i, host,
port, connectionCounter);
+ thread.start();
+ threads.add(thread);
+ }
+
+ startLatch.countDown();
+
+ for (LatchedCnxnThread thread : threads) {
+ thread.join();
+ }
+ assertEquals(maxClientCnxnBurst, connectionCounter.get());
+ }
+
+ /**
+ * Creates connections in a tight loop, and ensures rate is limited
+ */
+ @Test
+ public void testMaxCnxnRate() throws InterruptedException {
+ AtomicInteger connectionCounter = new AtomicInteger(0);
+ int i = 0;
+ ArrayList<CnxnThread> threads = new ArrayList<>(300);
--- End diff --
Nit: `List<CnxnThread> threads = ...`
> Add a connection rate limiter
> -----------------------------
>
> Key: ZOOKEEPER-2736
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2736
> Project: ZooKeeper
> Issue Type: Improvement
> Components: server
> Affects Versions: 3.4.9, 3.5.2
> Reporter: Vincent Poon
> Attachments: ZOOKEEPER-2736.v1.patch
>
>
> Currently the maxClientCnxns property only limits the aggregate number of
> connections from a client, but not the rate at which connections can be
> created.
> This patch adds a configurable connection rate limiter which limits the rate
> as well.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)