Skip to content

qa(load-test): Provide load-test module#2782

Merged
kthoms merged 4 commits into
mainfrom
issues/2761-load-test-module
Apr 21, 2026
Merged

qa(load-test): Provide load-test module#2782
kthoms merged 4 commits into
mainfrom
issues/2761-load-test-module

Conversation

@kthoms

@kthoms kthoms commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

This PR adds a new test module qa/load-test which is based on the issue #2761 . The examples given are based on the work of @renattomachado provided by the issue attachments.

Co-authored-by: Renatto Machado <renatto.machado@outlook.com>
@kthoms kthoms self-assigned this Apr 20, 2026
Copilot AI review requested due to automatic review settings April 20, 2026 21:07
@kthoms kthoms added enhancement New feature or request qa Tests, quality improvements and assurance labels Apr 20, 2026
@kthoms

kthoms commented Apr 20, 2026

Copy link
Copy Markdown
Contributor Author

The load test reveils the memory leak when executed

2026-04-20T23:07:32.784+02:00  INFO 98246 --- [           main] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : === Phase 1: Warmup (10 seconds, 30 concurrent users) ===
2026-04-20T23:07:44.763+02:00  INFO 98246 --- [           main] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Warmup complete: 178 successful, 0 failed
2026-04-20T23:07:45.939+02:00  INFO 98246 --- [           main] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : === Baseline after warmup + GC: 210 MB ===
2026-04-20T23:07:45.939+02:00  INFO 98246 --- [           main] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : === Phase 2: Sustained load (60 seconds) ===
2026-04-20T23:07:57.103+02:00  INFO 98246 --- [      Thread-16] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Memory sample 1/6: 421 MB (delta from baseline: +211 MB)
2026-04-20T23:08:08.296+02:00  INFO 98246 --- [      Thread-16] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Memory sample 2/6: 520 MB (delta from baseline: +310 MB)
2026-04-20T23:08:19.554+02:00  INFO 98246 --- [      Thread-16] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Memory sample 3/6: 624 MB (delta from baseline: +414 MB)
2026-04-20T23:08:30.775+02:00  INFO 98246 --- [      Thread-16] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Memory sample 4/6: 791 MB (delta from baseline: +581 MB)
2026-04-20T23:08:42.052+02:00  INFO 98246 --- [      Thread-16] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Memory sample 5/6: 910 MB (delta from baseline: +700 MB)
2026-04-20T23:08:53.369+02:00  INFO 98246 --- [      Thread-16] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Memory sample 6/6: 867 MB (delta from baseline: +657 MB)
2026-04-20T23:08:53.370+02:00  INFO 98246 --- [           main] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : Sustained load complete: 1198 successful, 0 failed
2026-04-20T23:08:54.660+02:00  INFO 98246 --- [           main] o.o.bpm.qa.loadtest.MemoryLeakLoadTest   : === Final heap after GC: 867 MB (baseline was 210 MB, growth: +657 MB) ===
23:08:54,781 [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 86.00 s <<< FAILURE! -- in org.operaton.bpm.qa.loadtest.MemoryLeakLoadTest
23:08:54,781 [ERROR] org.operaton.bpm.qa.loadtest.MemoryLeakLoadTest.memoryStaysStableUnderSustainedLoad -- Time elapsed: 82.38 s <<< FAILURE!
java.lang.AssertionError: 
[Heap after GC should not exceed 510 MB (baseline: 210 MB). If this fails, there is likely a memory leak.] 
Expecting actual:
  867L
to be less than or equal to:
  510L 
        at org.operaton.bpm.qa.loadtest.MemoryLeakLoadTest.memoryStaysStableUnderSustainedLoad(MemoryLeakLoadTest.java:173)

@kthoms kthoms added this to the 2.1.0 milestone Apr 20, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new opt-in QA load-test module (qa/load-test) to reproduce and monitor the memory leak behavior described in #2761 under concurrent REST-driven process starts.

Changes:

  • Register new qa/load-test Maven module under the qa aggregator.
  • Introduce a Spring Boot + WireMock based load-test (failsafe-run) that samples heap usage during sustained concurrent load.
  • Add BPMN/DMN resources and test configuration used by the load test.

Reviewed changes

Copilot reviewed 13 out of 13 changed files in this pull request and generated 12 comments.

Show a summary per file
File Description
qa/pom.xml Adds load-test to the QA reactor modules.
qa/load-test/pom.xml New load-test module POM with failsafe profile and test-only dependencies.
qa/load-test/README.md Documentation for running/configuring the load test and interpreting results.
qa/load-test/src/test/java/org/operaton/bpm/qa/loadtest/LoadTestApplication.java Minimal Spring Boot app used as the embedded test runtime.
qa/load-test/src/test/java/org/operaton/bpm/qa/loadtest/MemoryLeakLoadTest.java Integration load test that drives REST starts concurrently and checks heap stability.
qa/load-test/src/test/resources/application.yml Spring/Operaton test configuration (H2, plugins, tomcat threads).
qa/load-test/src/test/resources/processes/simple-process.bpmn Minimal BPMN process for a lightweight scenario.
qa/load-test/src/test/resources/processes/script-only-process.bpmn Script-only BPMN process variant for scripting-focused load.
qa/load-test/src/test/resources/processes/pure-js-process.bpmn Pure JavaScript BPMN process variant for GraalJS load.
qa/load-test/src/test/resources/processes/http-only-process.bpmn HTTP-connector focused BPMN process variant.
qa/load-test/src/test/resources/processes/credit-eligibility.bpmn Main BPMN scenario combining HTTP connectors, DMN, and Spin usage.
qa/load-test/src/test/resources/processes/dmn-policy-age.dmn DMN decision table used by the credit eligibility process.
qa/load-test/src/test/resources/processes/dmn-policy-tenure.dmn DMN decision table used by the credit eligibility process.

Comment thread qa/load-test/src/test/java/org/operaton/bpm/qa/loadtest/MemoryLeakLoadTest.java Outdated
Comment thread qa/load-test/README.md Outdated
Comment thread qa/load-test/pom.xml Outdated
Comment thread qa/load-test/src/test/resources/processes/http-only-process.bpmn Outdated
Comment thread qa/load-test/src/test/resources/processes/dmn-policy-tenure.dmn Outdated
Comment thread qa/load-test/README.md Outdated
Comment thread qa/load-test/README.md
Comment thread qa/load-test/src/test/resources/processes/credit-eligibility.bpmn
@kthoms kthoms added the noteworthy Should be documented in the release notes label Apr 20, 2026
@kthoms

kthoms commented Apr 20, 2026

Copy link
Copy Markdown
Contributor Author

@copilot Fix the findings and the new Sonar issues

Copilot AI commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

The load test reveils the memory leak when executed

...

Updated in b87bc0d: I fixed the load-test findings that could skew/stall execution (sampling interval handling, thread-local jitter, executor termination handling, and config/doc/model consistency). The test is still expected to fail when the underlying leak reproduces, as in your log.

@copilot Fix the findings and the new Sonar issues

Done in b87bc0d (plus 4a00e0e): I fixed the review findings and Sonar-related issues in qa/load-test (test robustness fixes, README/POM alignment, and BPMN/DMN metadata corrections).

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • repository.jboss.org
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -classpath /home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/boot/plexus-classworlds-2.8.0.jar -Dclassworlds.conf=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/bin/m2.conf -Dmaven.home=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1 -Dlibrary.jansi.path=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/operaton/operaton org.codehaus.plexus.classworlds.launcher.Launcher -pl qa/load-test -Pload-test verify -Dskip.frontend.build=true (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -classpath /home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/boot/plexus-classworlds-2.8.0.jar -Dclassworlds.conf=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/bin/m2.conf -Dmaven.home=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1 -Dlibrary.jansi.path=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/operaton/operaton org.codehaus.plexus.classworlds.launcher.Launcher clean install -pl parent,bom,commons,model-api,engine-dmn,juel -DskipTests -Dskip.frontend.build=true (dns block)
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java -classpath /home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/boot/plexus-classworlds-2.8.0.jar -Dclassworlds.conf=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/bin/m2.conf -Dmaven.home=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1 -Dlibrary.jansi.path=/home/REDACTED/.m2/wrapper/dists/apache-maven-3.9.9/3477a4f1/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/operaton/operaton org.codehaus.plexus.classworlds.launcher.Launcher -pl qa/load-test validate -Dskip.frontend.build=true (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

@sonarqubecloud

Copy link
Copy Markdown

@kthoms kthoms merged commit d90e5ed into main Apr 21, 2026
16 checks passed
@kthoms kthoms deleted the issues/2761-load-test-module branch April 21, 2026 08:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request noteworthy Should be documented in the release notes qa Tests, quality improvements and assurance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants