From e1aba54a8b5fa48681c969ec8a4086d4cece4bea Mon Sep 17 00:00:00 2001 From: dhslrl321 Date: Mon, 10 Oct 2022 21:06:22 +0900 Subject: [PATCH 1/2] add makefile build but not running --- Makefile | 2 ++ integration-tests/stress-tests/build.gradle | 1 + .../java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java | 5 +++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 4c0f206..eeb5bdb 100644 --- a/Makefile +++ b/Makefile @@ -23,3 +23,5 @@ clean: ## gradle clean test: clean ## gradle test build: clean ## gradle build + +run-server: java -jar zola-messaging-server/build/libs/zola-messaging-server-1.0.0.jar \ No newline at end of file diff --git a/integration-tests/stress-tests/build.gradle b/integration-tests/stress-tests/build.gradle index da8a08f..620b470 100644 --- a/integration-tests/stress-tests/build.gradle +++ b/integration-tests/stress-tests/build.gradle @@ -19,5 +19,6 @@ dependencies { } test { + exclude 'com/github/dhslrl321/zsmq/**' useJUnitPlatform() } \ No newline at end of file diff --git a/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java b/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java index 072cfcd..f4ec6d7 100644 --- a/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java +++ b/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java @@ -13,6 +13,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; public class RpcCallEnqueueTest { @@ -43,14 +44,14 @@ void tearDown() { @Test @DisplayName("rpc call 1,000,000 messages") - @Disabled void name() { IntStream.range(0, SIZE) .forEach((i) -> sut.convertAndSend("TESTING-QUEUE-", "dummy message, " + i)); } @Test - void name2() { + @Order(0) + void cannot_be_triggered_by_automatic_build() { fail("not support"); } } From 4ac83bea99909701f99a26b5c713ff355c077ca4 Mon Sep 17 00:00:00 2001 From: dhslrl321 Date: Mon, 10 Oct 2022 21:28:00 +0900 Subject: [PATCH 2/2] [#16] fix memory leak --- integration-tests/stress-tests/README.md | 3 + integration-tests/stress-tests/build.gradle | 2 +- .../dhslrl321/zsmq/RpcCallEnqueueTest.java | 3 +- .../zsmq/RpcCallLoadEnqueueTest.java | 119 ++++++++++++++++++ .../dhslrl321/zsmq/http/ZolaHttpClient.java | 11 +- 5 files changed, 129 insertions(+), 9 deletions(-) create mode 100644 integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallLoadEnqueueTest.java diff --git a/integration-tests/stress-tests/README.md b/integration-tests/stress-tests/README.md index 152bee8..b5357bd 100644 --- a/integration-tests/stress-tests/README.md +++ b/integration-tests/stress-tests/README.md @@ -2,4 +2,7 @@ - RPC call - 1,000,000 개의 메시지를 enqueue 하는데 걸리는 시간 + - 차수 + 1. 158947 (ms), 158 (s), 초당 6,329 개 + 2. 158792 (ms), 158 (s), 초당 6,329 개 - 1,000,000 개의 메시지를 dequeue 하는데 걸리는 시간 \ No newline at end of file diff --git a/integration-tests/stress-tests/build.gradle b/integration-tests/stress-tests/build.gradle index 620b470..31b6a53 100644 --- a/integration-tests/stress-tests/build.gradle +++ b/integration-tests/stress-tests/build.gradle @@ -19,6 +19,6 @@ dependencies { } test { - exclude 'com/github/dhslrl321/zsmq/**' + // exclude 'com/github/dhslrl321/zsmq/**' useJUnitPlatform() } \ No newline at end of file diff --git a/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java b/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java index f4ec6d7..85cb832 100644 --- a/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java +++ b/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallEnqueueTest.java @@ -42,11 +42,12 @@ void tearDown() { System.out.println(TOOK_MS_MESSAGE + diff + " (ms)"); } + @Test @DisplayName("rpc call 1,000,000 messages") void name() { IntStream.range(0, SIZE) - .forEach((i) -> sut.convertAndSend("TESTING-QUEUE-", "dummy message, " + i)); + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); } @Test diff --git a/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallLoadEnqueueTest.java b/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallLoadEnqueueTest.java new file mode 100644 index 0000000..3f1945f --- /dev/null +++ b/integration-tests/stress-tests/src/test/java/com/github/dhslrl321/zsmq/RpcCallLoadEnqueueTest.java @@ -0,0 +1,119 @@ +package com.github.dhslrl321.zsmq; + +import static org.junit.jupiter.api.Assertions.fail; + +import com.github.dhslrl321.zsmq.client.ZolaClientConfig; +import com.github.dhslrl321.zsmq.client.ZolaQueueMessageTemplate; +import com.github.dhslrl321.zsmq.http.ZolaHttpClient; +import java.util.stream.IntStream; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; + +public class RpcCallLoadEnqueueTest { + + private static final int SIZE = 1_000_000; + public static final String TOOK_MS_MESSAGE = "test took (ms) : "; + + ZolaQueueMessageTemplate sut; + + + long before; + long after; + + @BeforeEach + void setUp() { + sut = new ZolaQueueMessageTemplate( + new ZolaClientConfig("http://localhost:8291"), new ZolaHttpClient()); + + before = System.currentTimeMillis(); + } + + @AfterEach + void tearDown() { + after = System.currentTimeMillis(); + long diff = (after - before); + System.out.println(TOOK_MS_MESSAGE + diff + " (ms)"); + } + + + @Test + @DisplayName("vUser(1) sending") + void vUser1() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(2) sending") + void vUser2() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(3) sending") + void vUser3() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(4) sending") + void vUser4() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(5) sending") + void vUser5() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(6) sending") + void vUser6() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(7) sending") + void vUser7() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(8) sending") + void vUser8() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("vUser(9) sending") + void vUser9() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @DisplayName("rvUser(0) sending") + void vUser10() { + IntStream.range(0, SIZE) + .forEach((i) -> sut.convertAndSend("TESTING-QUEUE", "dummy message, " + i)); + } + + @Test + @Order(0) + @Disabled + void cannot_be_triggered_by_automatic_build() { + fail("not support"); + } +} diff --git a/zola-messaging-core/src/main/java/com/github/dhslrl321/zsmq/http/ZolaHttpClient.java b/zola-messaging-core/src/main/java/com/github/dhslrl321/zsmq/http/ZolaHttpClient.java index f2fcdd3..26336cb 100644 --- a/zola-messaging-core/src/main/java/com/github/dhslrl321/zsmq/http/ZolaHttpClient.java +++ b/zola-messaging-core/src/main/java/com/github/dhslrl321/zsmq/http/ZolaHttpClient.java @@ -26,9 +26,8 @@ public boolean requestPush(String baseUrl, ZolaMessage message) { .post(RequestBody.create(ZolaJsonSerializer.getInstance().serialize(message), JSON)) .build(); Call call = http.newCall(request); - try { - Response execute = call.execute(); - validateResponse(execute.code(), message.getQueueNameValue()); + try (Response response = call.execute()){ + validateResponse(response.code(), message.getQueueNameValue()); return true; } catch (Exception e) { e.printStackTrace(); @@ -43,8 +42,7 @@ public Optional requestPeek(String baseUrl, String queueName) { .get() .build(); Call call = http.newCall(request); - try { - Response response = call.execute(); + try (Response response = call.execute()){ validateResponse(response.code(), queueName); if (NO_CONTENT == response.code()) { return Optional.empty(); @@ -64,8 +62,7 @@ public boolean acknowledgement(String baseUrl, String queueName) { .delete() .build(); Call call = http.newCall(request); - try { - Response response = call.execute(); + try (Response response = call.execute()){ validateResponse(response.code(), queueName); return true; } catch (Exception e) {