From d069b916a89a2e40800a6a143aeef4e73826473c Mon Sep 17 00:00:00 2001 From: gjoranv Date: Wed, 12 Dec 2018 12:04:41 +0100 Subject: Revert "Add support for connection throttling in JDisc" This reverts commit 36221bb67238256d46cb0fe69ca682172d2bec65. --- .../http/server/jetty/ConnectionThrottler.java | 128 --------------------- 1 file changed, 128 deletions(-) delete mode 100644 jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectionThrottler.java (limited to 'jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectionThrottler.java') 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 370ac0aa788..00000000000 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/ConnectionThrottler.java +++ /dev/null @@ -1,128 +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 throttleResetters = new ArrayDeque<>(); - private final Collection 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.maxMemoryUsage() != -1) { - beans.add(new CoordinatedLowResourcesLimit(config.maxMemoryUsage(), idleTimeout)); - } - } - - void registerBeans() { - beans.forEach(bean -> connector.getServer().addBean(connector)); - } - - 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 resetters = new ArrayList<>(); - synchronized (monitor) { - if (--throttlersCount == 0) { - resetters.addAll(throttleResetters); - throttleResetters.clear(); - } - } - resetters.forEach(Runnable::run); - } - - private class CoordinatedLowResourcesLimit extends LowResourceMonitor { - CoordinatedLowResourcesLimit(int maxMemoryUsageMegaBytes, Duration idleTimeout) { - super(connector.getServer()); - super.setMonitoredConnectors(singleton(connector)); - super.setMaxMemory(maxMemoryUsageMegaBytes * 1024 * 1024L); - 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(); - } - } -} -- cgit v1.2.3