[
https://issues.apache.org/jira/browse/ZOOKEEPER-2736?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15939606#comment-15939606
]
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_r107820892
--- Diff: src/java/main/org/apache/zookeeper/common/RateLimiter.java ---
@@ -0,0 +1,99 @@
+/**
+* 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.common;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A connection rate limiter.
+ *
+ */
+public interface RateLimiter {
+
+ /**
+ * If maxClientCnxnRate or maxClientCnxnBurst is set to this value,
rate is
+ * not limited
+ */
+ public static int BYPASS = -1;
+
+ /**
+ * A {@code RateLimiter} that does not do any rate limiting
+ */
+ public static RateLimiter BYPASS_RATE_LIMITER = new RateLimiter() {
+ @Override
+ public boolean tryAquire() {
+ return true;
+ }
+
+ @Override
+ public void configure(int maxClientCnxnRate, int
maxClientCnxnBurst) {
+ //not needed
+ }
+ };
+
+ /**
+ * Attempts to acquire a permit
+ *
+ * @return true if a permit was acquired, false otherwise
+ */
+ public boolean tryAquire();
+
+ /**
+ * @param maxClientCnxnRate the max client connection rate
+ * @param maxClientCnxnBurst the max client connection burst
+ */
+ public void configure(int maxClientCnxnRate, int maxClientCnxnBurst);
+
+ public static class Factory {
+
+ private static final Logger LOG =
LoggerFactory.getLogger(RateLimiter.Factory.class);
+
+ /**
+ * Creates a {@code RateLimiter} with a stable average throughput
of
+ * {@code averageRate} and a maximum burst size of {@code
burstRate}
+ *
+ * @param rateLimiterImplClass the {@code RateLimiter}
implementation to use
--- End diff --
Please, specify that if this String is null then a TokenBucket will be
chosen by default. By the way, I am not so sure if BYPASS_RATE_LIMITER would
not be better in this case... :thinking:
> 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)