Skip to content

Commit ed9bc2b

Browse files
committed
Add initial version based on Jedis builders
0 parents  commit ed9bc2b

35 files changed

+3133
-0
lines changed

.github/workflows/integration.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Build and Test
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- name: Checkout repository
15+
uses: actions/checkout@v4
16+
17+
- name: Set up JDK 17
18+
uses: actions/setup-java@v3
19+
with:
20+
distribution: 'temurin'
21+
java-version: '17'
22+
cache: 'maven'
23+
24+
- name: Check code formatting
25+
run: mvn formatter:validate
26+
27+
- name: Build and verify jedis-test-app
28+
run: |
29+
echo "Building jedis-test-app"
30+
mvn -B clean verify
31+
32+
- name: Run integration tests
33+
run: |
34+
echo "Running integration tests"
35+
mvn test

.gitignore

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
target/
2+
appendonlydir/
3+
*.rdb
4+
*.aof
5+
-
6+
atlassian-ide-plugin.xml
7+
*.iml
8+
redis-git
9+
*.releaseBackup
10+
release.properties
11+
work/
12+
.project
13+
.classpath
14+
.settings
15+
dependency-reduced-pom.xml
16+
.idea
17+
.flattened-pom.xml
18+
*.java-version
19+
*.DS_Store

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"java.compile.nullAnalysis.mode": "automatic"
3+
}

README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Jedis Test App Runner
2+
3+
A workload runner for testing Jedis client workloads against Redis.
4+
5+
## Build
6+
7+
1. Install JDK 17+ and maven
8+
2. Build:
9+
```
10+
mvn package
11+
```
12+
13+
## Usage
14+
Basic usage with specified runner configuration file and custom log directory:
15+
```sh
16+
java -jar target/jedis-test-app.jar --runner.config=runner-config.yaml --logging.file.path=logs
17+
```
18+
### Override Configuration Properties
19+
Properties defined in `runner-config.yaml` can be overridden from the command line using the following syntax:
20+
```sh
21+
--<property-path>=<value>
22+
```
23+
24+
#### Example
25+
```sh
26+
java -jar target/jedis-test-app.jar --runner.config=runner-config.yaml --logging.file.path=logs --runner.test.workload.type=redis_commands --runner.test.workload.options.getSetRatio=0.3
27+
```
28+
In this example:
29+
- `--runner.test.workload.type=get_set`: Overrides the workload type to `get_set`.
30+
- `--runner.test.workload.options.getSetRatio=0.3`: Overrides the `getSetRatio` option for the `get_set` workload.

application.properties

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Enable metrics logging
2+
logging.metrics.enabled=true
3+
logging.metrics.step=PT5S
4+
5+
# Enable simple metrics
6+
# Store total counts of events, time spend and dump them on interval
7+
simple.metrics.enabled=true
8+
simple.metrics.dumpRate=PT5S
9+
10+
# OpenTelemetry Configuration for Micrometer (Spring Boot 3.x)
11+
management.otlp.metrics.export.enabled=false
12+
management.otlp.metrics.export.url=http://localhost:4318/v1/metrics
13+
management.otlp.metrics.export.step=PT1S

formatting.xml

Lines changed: 380 additions & 0 deletions
Large diffs are not rendered by default.

pom.xml

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>redis.clients.jedis.test</groupId>
8+
<artifactId>jedis-test-app</artifactId>
9+
<version>0.0.1-SNAPSHOT</version>
10+
<packaging>jar</packaging>
11+
<parent>
12+
<groupId>org.springframework.boot</groupId>
13+
<artifactId>spring-boot-starter-parent</artifactId>
14+
<version>3.4.3</version>
15+
<relativePath/>
16+
</parent>
17+
<properties>
18+
<java.version>17</java.version>
19+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20+
<jedis.version>7.0.0-SNAPSHOT</jedis.version>
21+
</properties>
22+
23+
<repositories>
24+
<repository>
25+
<id>central</id>
26+
<name>Maven Central Repository</name>
27+
<url>https://repo1.maven.org/maven2</url>
28+
<releases>
29+
<enabled>true</enabled>
30+
</releases>
31+
<snapshots>
32+
<enabled>false</enabled>
33+
</snapshots>
34+
</repository>
35+
<repository>
36+
<id>central-snapshots</id>
37+
<name>Maven Central Snapshot Repository</name>
38+
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
39+
<releases>
40+
<enabled>false</enabled>
41+
</releases>
42+
<snapshots>
43+
<enabled>true</enabled>
44+
<updatePolicy>daily</updatePolicy>
45+
</snapshots>
46+
</repository>
47+
<repository>
48+
<id>sonatype-ossrh-snapshots</id>
49+
<name>Sonatype OSSRH Snapshots</name>
50+
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
51+
<releases>
52+
<enabled>false</enabled>
53+
</releases>
54+
<snapshots>
55+
<enabled>true</enabled>
56+
<updatePolicy>always</updatePolicy>
57+
</snapshots>
58+
</repository>
59+
60+
</repositories>
61+
62+
<dependencies>
63+
<dependency>
64+
<groupId>org.springframework.boot</groupId>
65+
<artifactId>spring-boot-starter-actuator</artifactId>
66+
</dependency>
67+
68+
<dependency>
69+
<groupId>io.micrometer</groupId>
70+
<artifactId>micrometer-core</artifactId>
71+
</dependency>
72+
<dependency>
73+
<groupId>io.micrometer</groupId>
74+
<artifactId>micrometer-registry-influx</artifactId>
75+
</dependency>
76+
<dependency>
77+
<groupId>io.micrometer</groupId>
78+
<artifactId>micrometer-registry-otlp</artifactId>
79+
</dependency>
80+
<dependency>
81+
<groupId>org.springframework.boot</groupId>
82+
<artifactId>spring-boot-starter-test</artifactId>
83+
<scope>test</scope>
84+
</dependency>
85+
<dependency>
86+
<groupId>org.testcontainers</groupId>
87+
<artifactId>junit-jupiter</artifactId>
88+
<scope>test</scope>
89+
</dependency>
90+
<dependency>
91+
<groupId>com.fasterxml.jackson.dataformat</groupId>
92+
<artifactId>jackson-dataformat-yaml</artifactId>
93+
</dependency>
94+
<dependency>
95+
<groupId>org.apache.commons</groupId>
96+
<artifactId>commons-lang3</artifactId>
97+
<version>3.17.0</version>
98+
</dependency>
99+
<dependency>
100+
<groupId>org.assertj</groupId>
101+
<artifactId>assertj-core</artifactId>
102+
</dependency>
103+
<dependency>
104+
<groupId>com.fasterxml.jackson.datatype</groupId>
105+
<artifactId>jackson-datatype-jsr310</artifactId>
106+
</dependency>
107+
108+
<!-- Jedis Dependencies -->
109+
<dependency>
110+
<groupId>redis.clients</groupId>
111+
<artifactId>jedis</artifactId>
112+
<version>${jedis.version}</version>
113+
</dependency>
114+
<dependency>
115+
<groupId>io.github.resilience4j</groupId>
116+
<artifactId>resilience4j-circuitbreaker</artifactId>
117+
<version>1.7.1</version>
118+
</dependency>
119+
<dependency>
120+
<groupId>io.github.resilience4j</groupId>
121+
<artifactId>resilience4j-retry</artifactId>
122+
<version>1.7.1</version>
123+
</dependency>
124+
</dependencies>
125+
126+
<build>
127+
<finalName>jedis-test-app</finalName>
128+
129+
<plugins>
130+
131+
<plugin>
132+
<groupId>net.revelc.code.formatter</groupId>
133+
<artifactId>formatter-maven-plugin</artifactId>
134+
<version>2.16.0</version>
135+
<configuration>
136+
<directories>
137+
<directory>${project.build.sourceDirectory}</directory>
138+
<directory>${project.build.testSourceDirectory}</directory>
139+
</directories>
140+
<configFile>formatting.xml</configFile>
141+
</configuration>
142+
<executions>
143+
<execution>
144+
<goals>
145+
<goal>validate</goal>
146+
</goals>
147+
</execution>
148+
149+
</executions>
150+
</plugin>
151+
<plugin>
152+
<groupId>org.springframework.boot</groupId>
153+
<artifactId>spring-boot-maven-plugin</artifactId>
154+
<configuration>
155+
<mainClass>redis.clients.jedis.test.JedisTestApplication</mainClass>
156+
</configuration>
157+
</plugin>
158+
159+
160+
161+
</plugins>
162+
</build>
163+
164+
</project>

runner-config.yaml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
runner:
2+
redis:
3+
clientName: "jedis-test-app"
4+
endpoints:
5+
- redis://localhost:6379/0
6+
#username: "default"
7+
#password: "foobared"
8+
verifyPeer: false
9+
10+
test:
11+
mode: standalone # Only standalone is supported for Jedis
12+
clients: 1 # Number of client instances
13+
connectionsPerClient: 100 # Number of connections per client
14+
threadsPerConnection: 1 # Number of threads sharing same connection
15+
workload:
16+
type: redis_commands
17+
maxDuration: PT1M # Max duration in seconds per workload
18+
options: # Options specific per workload. See below for example configuration of get_set_async workload
19+
valueSize: 100 # 100 characters
20+
iterationCount: 1000 # How many iterations to run of the workload before finishing
21+
#delayAfterIteration: PT0S # 0s Delay after each iteration
22+
#delayAfterWorkload: PT1S # 0s Delay after each workload
23+
#elementsCount: 1 # 1 elements per operation E.g how many elements to push with a `lpush`
24+
#keyGenerationStrategy: RANDOM # RANDOM Options: RANDOM, SEQUENTIAL;
25+
#keyPattern: "key-%d" # key-%d Key pattern to use for key generation
26+
keyRangeMin: 0 # 0 Minimum key range
27+
keyRangeMax: 1000 # 10000 Maximum key range
28+
29+
30+
clientOptions: # Jedis connection-level options applied via JedisPooled.builder()
31+
timeoutOptions:
32+
fixedTimeout: PT2S # Socket/read timeout
33+
#blockingSocketTimeout: PT5S # Timeout for blocking operations
34+
socketOptions:
35+
connectTimeout: PT2S # TCP connect timeout
36+
pool:
37+
# poolSize is controlled by test.connectionsPerClient
38+
maxIdle: 100 # Defaults to poolSize
39+
minIdle: 1
40+
maxWait: PT3S
41+
blockWhenExhausted: true
42+
testWhileIdle: true
43+
timeBetweenEvictionRuns: PT10S
44+
# SSL/TLS is controlled by runner.redis.endpoints and runner.redis.verifyPeer
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package redis.clients.jedis.test;
2+
3+
import java.time.Duration;
4+
5+
public interface CommonWorkloadOptions extends WorkloadOptions {
6+
7+
int valueSize();
8+
9+
int elementsCount();
10+
11+
int iterationCount();
12+
13+
Duration delayAfterIteration();
14+
15+
Duration delayAfterWorkload();
16+
17+
double getSetRatio();
18+
19+
int transactionSize();
20+
21+
}

0 commit comments

Comments
 (0)