From fed02f6f5f4308400e55c160d9495cad010f5bfb Mon Sep 17 00:00:00 2001 From: Gyeongho Yang Date: Thu, 5 Sep 2024 11:11:09 +0900 Subject: [PATCH 1/6] fix: remove implementation logback-classic on gradle (#501) --- study/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/study/build.gradle b/study/build.gradle index 5c69542f84..87a1f0313c 100644 --- a/study/build.gradle +++ b/study/build.gradle @@ -19,7 +19,6 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-webflux' - implementation 'ch.qos.logback:logback-classic:1.5.7' implementation 'org.apache.commons:commons-lang3:3.14.0' implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.1' implementation 'pl.allegro.tech.boot:handlebars-spring-boot-starter:0.4.1' From 7e9135698878932274ddc1f523ba817ed9c56c70 Mon Sep 17 00:00:00 2001 From: Gyeongho Yang Date: Thu, 5 Sep 2024 13:51:07 +0900 Subject: [PATCH 2/6] fix: add threads min-spare configuration on properties (#502) --- study/src/main/resources/application.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/study/src/main/resources/application.yml b/study/src/main/resources/application.yml index 4e8655a962..e3503a5fb9 100644 --- a/study/src/main/resources/application.yml +++ b/study/src/main/resources/application.yml @@ -6,4 +6,5 @@ server: accept-count: 1 max-connections: 1 threads: + min-spare: 2 max: 2 From cdf7788f786928672b7506ccad7d95adb4d9839e Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sun, 15 Sep 2024 15:50:13 +0900 Subject: [PATCH 3/6] =?UTF-8?q?test:=20Connector=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../catalina/connector/ConnectorTest.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java diff --git a/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java new file mode 100644 index 0000000000..d2fb190225 --- /dev/null +++ b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java @@ -0,0 +1,49 @@ +package org.apache.catalina.connector; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.net.Socket; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadPoolExecutor; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class ConnectorTest { + + @DisplayName("서버를 종료하면 더 이상 클라이언트를 받을 수 없다") + @Test + void stop() { + Connector connector = new Connector(); + connector.start(); + connector.stop(); + + assertThatThrownBy(() -> { + try (Socket clientSocket = new Socket("localhost", 8080)) {} + }).isInstanceOf(Exception.class); + } + + @DisplayName("스레드 풀의 크기는 250이다") + @Test + void testServerStop() { + final var executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(250); + for (int i = 0; i < 350; i++) { + executor.submit(logWithSleep()); + } + final int expectedPoolSize = 250; + final int expectedQueueSize = 100; + + assertThat(expectedPoolSize).isEqualTo(executor.getPoolSize()); + assertThat(expectedQueueSize).isEqualTo(executor.getQueue().size()); + } + + private Runnable logWithSleep() { + return () -> { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + }; + } +} From 2897be3f4b538cd43e5783edcd130f808051e1ec Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sun, 15 Sep 2024 16:07:45 +0900 Subject: [PATCH 4/6] =?UTF-8?q?test:=20=EC=97=90=EB=9F=AC=20=EC=A2=85?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/org/apache/catalina/connector/ConnectorTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java index d2fb190225..d305f85233 100644 --- a/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java +++ b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java @@ -3,6 +3,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.net.ConnectException; import java.net.Socket; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; @@ -20,7 +21,7 @@ void stop() { assertThatThrownBy(() -> { try (Socket clientSocket = new Socket("localhost", 8080)) {} - }).isInstanceOf(Exception.class); + }).isInstanceOf(ConnectException.class); } @DisplayName("스레드 풀의 크기는 250이다") From d6327b28be2f03295a72f87cb27542627321bde0 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sun, 15 Sep 2024 16:09:51 +0900 Subject: [PATCH 5/6] =?UTF-8?q?test:=20=EB=A9=94=EC=86=8C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/apache/catalina/connector/ConnectorTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java index d305f85233..715d865e74 100644 --- a/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java +++ b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java @@ -29,7 +29,7 @@ void stop() { void testServerStop() { final var executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(250); for (int i = 0; i < 350; i++) { - executor.submit(logWithSleep()); + executor.submit(threadSleep()); } final int expectedPoolSize = 250; final int expectedQueueSize = 100; @@ -38,7 +38,7 @@ void testServerStop() { assertThat(expectedQueueSize).isEqualTo(executor.getQueue().size()); } - private Runnable logWithSleep() { + private Runnable threadSleep() { return () -> { try { Thread.sleep(1000); From 2a1ad7924cc7e8eaf45710e96aab1fd952051527 Mon Sep 17 00:00:00 2001 From: unifolio0 Date: Sun, 15 Sep 2024 16:14:47 +0900 Subject: [PATCH 6/6] =?UTF-8?q?test:=20=EB=B3=80=EC=88=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/apache/catalina/connector/Connector.java | 2 +- .../java/org/apache/catalina/connector/ConnectorTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java index 2cf5e9e874..ea22734454 100644 --- a/tomcat/src/main/java/org/apache/catalina/connector/Connector.java +++ b/tomcat/src/main/java/org/apache/catalina/connector/Connector.java @@ -16,7 +16,7 @@ public class Connector implements Runnable { private static final int DEFAULT_PORT = 8080; private static final int DEFAULT_ACCEPT_COUNT = 100; - private static final int DEFAULT_MAX_THREADS = 250; + static final int DEFAULT_MAX_THREADS = 250; private final ServerSocket serverSocket; private final ExecutorService executor; diff --git a/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java index 715d865e74..066a9655d7 100644 --- a/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java +++ b/tomcat/src/test/java/org/apache/catalina/connector/ConnectorTest.java @@ -27,11 +27,11 @@ void stop() { @DisplayName("스레드 풀의 크기는 250이다") @Test void testServerStop() { - final var executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(250); + final var executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(Connector.DEFAULT_MAX_THREADS); for (int i = 0; i < 350; i++) { executor.submit(threadSleep()); } - final int expectedPoolSize = 250; + final int expectedPoolSize = Connector.DEFAULT_MAX_THREADS; final int expectedQueueSize = 100; assertThat(expectedPoolSize).isEqualTo(executor.getPoolSize());