Skip to content

Commit ae30d13

Browse files
authored
Use Virtual Threads (#519)
* migrating thread pools to virtual threads * using virtual thread executor when querying remote dns servers * fixing test * stress test related code * configuring supervisor * adjusting default dns * created stress test * created stress test * creating docs of how to use stress tests * more asserts * creating collector structure * skipping login page and set as admin * configuring metrics * fixing test conflict with running dps on machine * configuring default dashboards * changing filter time * updating the docs * adjusting the docs order * linking doc * clean code * clean code * release notes * [Gradle Release Plugin] - new version commit: '3.25.0-snapshot'.
1 parent a8b99f2 commit ae30d13

File tree

27 files changed

+712
-24
lines changed

27 files changed

+712
-24
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,5 @@ issues
7171
/files
7272
tmp/
7373
Poc.java
74+
75+
src/stress-test/docker/dps-stress-test-instance/files

RELEASE-NOTES.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
## 3.24.2
1+
## 3.25.0
2+
* Optimize resource utilization by using Java Virtual Threads #436.
3+
4+
## 3.24.2
25
* Mitigate arm release failure due inexistence of required debian package #517
36

47
## 3.24.1

build.gradle

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,21 @@ repositories {
2424
sourceCompatibility = JavaVersion.VERSION_21
2525
targetCompatibility = JavaVersion.VERSION_21
2626

27+
sourceSets {
28+
stressTest {
29+
java {
30+
srcDir 'src/stress-test/java'
31+
}
32+
resources {
33+
srcDir 'src/stress-test/resources'
34+
}
35+
compileClasspath += sourceSets.test.runtimeClasspath
36+
runtimeClasspath += sourceSets.test.runtimeClasspath
37+
}
38+
}
39+
40+
41+
2742
dependencies {
2843

2944
compileOnly('org.projectlombok:lombok:1.18.+')
@@ -56,9 +71,13 @@ dependencies {
5671
implementation('com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.17.1')
5772

5873
testAnnotationProcessor("com.google.dagger:dagger-compiler:2.45")
74+
5975
testCompileOnly('org.projectlombok:lombok:1.18.+')
6076
testAnnotationProcessor('org.projectlombok:lombok:1.18.+')
6177

78+
stressTestCompileOnly('org.projectlombok:lombok:1.18.+')
79+
stressTestAnnotationProcessor('org.projectlombok:lombok:1.18.+')
80+
6281
testImplementation("org.junit.jupiter:junit-jupiter:5.10.+")
6382
testImplementation('org.mockito:mockito-junit-jupiter:5.12.+')
6483
testImplementation('io.rest-assured:rest-assured:5.3.0')
@@ -83,6 +102,19 @@ task compTest(type: Test) {
83102
}
84103
}
85104

105+
task stressTest(type: Test) {
106+
107+
testClassesDirs = sourceSets.stressTest.output.classesDirs
108+
classpath += sourceSets.stressTest.runtimeClasspath
109+
110+
useJUnitPlatform()
111+
include "**/*Test.class"
112+
failFast = true
113+
testLogging {
114+
events "passed", "skipped", "failed"
115+
}
116+
}
117+
86118
compileJava {
87119
options.encoding = 'UTF-8'
88120
options.compilerArgs << '-parameters'

docs/content/4-developing/compiling.en.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Compiling from source
33
weight: 4
4-
pre: "<b>4. </b>"
4+
pre: "<b>1. </b>"
55
---
66

77
## Requirements

docs/content/4-developing/generating-docs.en.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Generating the docs
33
weight: 6
4-
pre: "<b>6. </b>"
4+
pre: "<b>2. </b>"
55
---
66

77
## Introduction

docs/content/4-developing/releasing.en.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Release Process
33
weight: 7
4-
pre: "<b>7. </b>"
4+
pre: "<b>3. </b>"
55
---
66

77
## Feature Request - Phase 1
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
title: Stress Tests
3+
pre: "<b>4. </b>"
4+
---
5+
6+
Start DPS Instance to be tested
7+
8+
```bash
9+
./gradlew clean build compTest shadowJar nativeImageJar nativeCompile -i
10+
cp build/native/nativeCompile/dns-proxy-server ./src/stress-test/docker/dps-stress-test-instance/files/
11+
docker-compose -f src/stress-test/docker/dps-stress-test-instance/docker-compose.yml up --build
12+
```
13+
14+
Start Grafana Stack to Collect Performance Metrics
15+
16+
```bash
17+
docker-compose -f src/stress-test/docker/grafana/docker-compose.yml up --build
18+
```
19+
20+
Run the Stress Test Suite
21+
22+
```bash
23+
./gradlew build stressTest
24+
```
25+
26+
Access http://localhost:3000 to see the metrics
27+
28+
[1]: {{%relref "1-getting-started/requirements/_index.en.md" %}}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version=3.24.2-snapshot
1+
version=3.25.0-snapshot

src/main/java/com/mageddo/dnsproxyserver/solver/RemoteResolvers.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,39 @@
33
import com.mageddo.net.IpAddr;
44

55
import java.util.List;
6+
import java.util.concurrent.Executor;
7+
import java.util.concurrent.ExecutorService;
8+
import java.util.concurrent.Executors;
69
import java.util.function.Function;
710

8-
public class RemoteResolvers {
11+
public class RemoteResolvers implements AutoCloseable {
912

1013
private final List<Resolver> resolvers;
14+
private final ExecutorService executor;
1115

12-
private RemoteResolvers(List<Resolver> resolvers) {
16+
private RemoteResolvers(List<Resolver> resolvers, ExecutorService executor) {
1317
this.resolvers = resolvers;
18+
this.executor = executor;
1419
}
1520

1621
public static RemoteResolvers of(List<IpAddr> servers, final Function<IpAddr, Resolver> resolverProvider) {
1722
final var resolvers = servers
1823
.stream()
1924
.map(resolverProvider)
2025
.toList();
21-
return new RemoteResolvers(resolvers);
26+
return new RemoteResolvers(resolvers, Executors.newVirtualThreadPerTaskExecutor());
2227
}
2328

2429
public List<Resolver> resolvers() {
2530
return this.resolvers;
2631
}
32+
33+
@Override
34+
public void close() throws Exception {
35+
this.executor.close();
36+
}
37+
38+
public Executor getExecutor() {
39+
return this.executor;
40+
}
2741
}

src/main/java/com/mageddo/dnsproxyserver/solver/SolverRemote.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Result safeQueryResult(Request req) {
8787
}
8888

8989
Result queryResultWhilePingingResolver(Request req) {
90-
final var resFuture = req.sendQueryAsyncToResolver();
90+
final var resFuture = req.sendQueryAsyncToResolver(this.delegate.getExecutor());
9191
this.netWatchdog.watch(req.getResolverAddr(), resFuture, PING_TIMEOUT_IN_MS);
9292
return this.transformToResult(resFuture, req);
9393
}

0 commit comments

Comments
 (0)