aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-12-12 13:33:00 +0100
committerGitHub <noreply@github.com>2018-12-12 13:33:00 +0100
commita6ac6fa83b28372727b70d776652fd05240e74f5 (patch)
tree00eb6b7808844e50495ee8f14ff04a045c1bd08d
parentcf4ba9d201390e2fe24c8bb068aa4a39db474e92 (diff)
parentd069b916a89a2e40800a6a143aeef4e73826473c (diff)
Merge pull request #7928 from vespa-engine/gjoranv/revert-throttling
Gjoranv/revert throttling
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectionThrottler.java132
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java4
-rw-r--r--jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def18
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java17
4 files changed, 0 insertions, 171 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectionThrottler.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectionThrottler.java
deleted file mode 100644
index 58d1142c563..00000000000
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectionThrottler.java
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.jdisc.http.server.jetty;
-
-import com.yahoo.jdisc.http.ConnectorConfig;
-import org.eclipse.jetty.server.AcceptRateLimit;
-import org.eclipse.jetty.server.ConnectionLimit;
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.LowResourceMonitor;
-import org.eclipse.jetty.util.component.LifeCycle;
-
-import java.time.Duration;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Queue;
-import java.util.concurrent.TimeUnit;
-
-import static java.util.Collections.singleton;
-
-/**
- * Throttles new connections using {@link LowResourceMonitor}, {@link AcceptRateLimit} and {@link ConnectionLimit}.
- *
- * @author bjorncs
- */
-class ConnectionThrottler {
-
- private final Object monitor = new Object();
- private final Queue<Runnable> throttleResetters = new ArrayDeque<>();
- private final Collection<LifeCycle> beans = new ArrayList<>();
- private final Connector connector;
- private int throttlersCount;
-
- ConnectionThrottler(Connector connector, ConnectorConfig.Throttling config) {
- this.connector = connector;
- Duration idleTimeout = fromSeconds(config.idleTimeout());
- if (config.maxAcceptRate() != -1) {
- beans.add(new CoordinatedAcceptRateLimit(config.maxAcceptRate(), fromSeconds(config.maxAcceptRatePeriod())));
- }
- if (config.maxConnections() != -1) {
- beans.add(new CoordinatedConnectionLimit(config.maxConnections(), idleTimeout));
- }
- if (config.maxHeapUtilization() != -1) {
- beans.add(new CoordinatedLowResourcesLimit(config.maxHeapUtilization(), idleTimeout));
- }
- }
-
- void registerBeans() {
- beans.forEach(bean -> connector.getServer().addBean(bean));
- }
-
- private static Duration fromSeconds(double seconds) {
- return Duration.ofMillis((long) (seconds * 1000));
- }
-
- private void onThrottle(Runnable throttleResetter) {
- synchronized (monitor) {
- ++throttlersCount;
- throttleResetters.offer(throttleResetter);
- }
- }
-
- private void onReset() {
- List<Runnable> resetters = new ArrayList<>();
- synchronized (monitor) {
- if (--throttlersCount == 0) {
- resetters.addAll(throttleResetters);
- throttleResetters.clear();
- }
- }
- resetters.forEach(Runnable::run);
- }
- private static long toMaxMemoryUsageInBytes(double maxHeapUtilization) {
- return (long) (maxHeapUtilization * Runtime.getRuntime().maxMemory());
- }
-
- private class CoordinatedLowResourcesLimit extends LowResourceMonitor {
-
- CoordinatedLowResourcesLimit(double maxHeapUtilization, Duration idleTimeout) {
- super(connector.getServer());
- super.setMonitoredConnectors(singleton(connector));
- super.setMaxMemory(toMaxMemoryUsageInBytes(maxHeapUtilization));
- super.setLowResourcesIdleTimeout((int)idleTimeout.toMillis());
- }
-
- @Override
- protected void setLowResources() {
- super.setLowResources();
- ConnectionThrottler.this.onThrottle(() -> super.clearLowResources());
- }
-
- @Override
- protected void clearLowResources() {
- ConnectionThrottler.this.onReset();
- }
- }
- private class CoordinatedConnectionLimit extends ConnectionLimit {
-
- CoordinatedConnectionLimit(int maxConnections, Duration idleTimeout) {
- super(maxConnections, connector);
- super.setIdleTimeout(idleTimeout.toMillis());
- }
-
- @Override
- protected void limit() {
- super.limit();
- ConnectionThrottler.this.onThrottle(() -> super.unlimit());
- }
-
- @Override
- protected void unlimit() {
- ConnectionThrottler.this.onReset();
- }
- }
-
- private class CoordinatedAcceptRateLimit extends AcceptRateLimit {
- CoordinatedAcceptRateLimit(int limit, Duration period) {
- super(limit, period.toMillis(), TimeUnit.MILLISECONDS, connector);
- }
-
- @Override
- protected void limit() {
- super.limit();
- ConnectionThrottler.this.onThrottle(() -> super.unlimit());
- }
-
- @Override
- protected void unlimit() {
- ConnectionThrottler.this.onReset();
- }
- }
-}
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java
index a80e694ed30..f7d6e1717af 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/JDiscServerConnector.java
@@ -50,10 +50,6 @@ class JDiscServerConnector extends ServerConnector {
this.statistics = new ServerConnectionStatistics();
addBean(statistics);
- ConnectorConfig.Throttling throttlingConfig = config.throttling();
- if (throttlingConfig.enabled()) {
- new ConnectionThrottler(this, throttlingConfig).registerBeans();
- }
}
@Override
diff --git a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def
index 7967f657aff..157ffabdd63 100644
--- a/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def
+++ b/jdisc_http_service/src/main/resources/configdefinitions/jdisc.http.connector.def
@@ -41,24 +41,6 @@ tcpKeepAliveEnabled bool default=false
# Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm).
tcpNoDelay bool default=true
-# Whether to enable connection throttling. New connections will be dropped when a threshold is exceeded.
-throttling.enabled bool default=false
-
-# Max number of connections.
-throttling.maxConnections int default=-1
-
-# Max memory utilization as a value between 0 and 1.
-throttling.maxHeapUtilization double default=-1
-
-# Max connection accept rate.
-throttling.maxAcceptRate int default=-1
-
-# Accept rate sample period in seconds. Used in conjunction with throttling.maxAcceptRate.
-throttling.maxAcceptRatePeriod double default=1.0
-
-# Idle timeout in seconds applied to endpoints when a threshold is exceeded (except accept rate threshold).
-throttling.idleTimeout double default=1.0
-
# Whether to enable SSL for this connector.
ssl.enabled bool default=false
diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
index 9622edc5429..30d5f9e657a 100644
--- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
+++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/HttpServerTest.java
@@ -16,7 +16,6 @@ import com.yahoo.jdisc.handler.RequestHandler;
import com.yahoo.jdisc.handler.ResponseDispatch;
import com.yahoo.jdisc.handler.ResponseHandler;
import com.yahoo.jdisc.http.ConnectorConfig;
-import com.yahoo.jdisc.http.ConnectorConfig.Throttling;
import com.yahoo.jdisc.http.Cookie;
import com.yahoo.jdisc.http.HttpRequest;
import com.yahoo.jdisc.http.HttpResponse;
@@ -481,22 +480,6 @@ public class HttpServerTest {
assertThat(driver.close(), is(true));
}
- @Test
- public void requireThatConnectionThrottleDoesNotBlockConnectionsBelowThreshold() throws Exception {
- final TestDriver driver = TestDrivers.newConfiguredInstance(
- new EchoRequestHandler(),
- new ServerConfig.Builder(),
- new ConnectorConfig.Builder()
- .throttling(new Throttling.Builder()
- .enabled(true)
- .maxAcceptRate(10)
- .maxHeapUtilization(0.99)
- .maxConnections(10)));
- driver.client().get("/status.html")
- .expectStatusCode(is(OK));
- assertThat(driver.close(), is(true));
- }
-
private static RequestHandler mockRequestHandler() {
final RequestHandler mockRequestHandler = mock(RequestHandler.class);
when(mockRequestHandler.refer()).thenReturn(References.NOOP_REFERENCE);