You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "Anshul-creator (via GitHub)" <gi...@apache.org> on 2025/11/20 15:58:29 UTC
[PR] Fix: Stabilize multiple tests in `ServiceConfigTest` by isolating system properties and cached state [dubbo]
Anshul-creator opened a new pull request, #15785:
URL: https://github.com/apache/dubbo/pull/15785
## What is the purpose of the change?
This PR stabilizes several tests inside `ServiceConfigTest`:
- `testMethodConfigWithInvalidArgumentIndex`
- `testExport`
- `testVersionAndGroupConfigFromProvider`
- `testUnexport`
- `testMethodConfigWithUnmatchedArgument`
- `testMethodConfigWithUnknownArgumentType`
- `testMethodConfigWithInvalidArgumentConfig`
- `testMethodConfigWithConfiguredArgumentTypeAndIndex`
- `testMethodConfigWithConfiguredArgumentType`
- `testExportWithoutRegistryConfig`
- `testDelayExport`
- `testApplicationInUrl`
- `testServiceListener`
- `testProxy`
- `testMethodConfigWithConfiguredArgumentIndex`
These tests were intermittently failing under randomized execution orders (NonDex). All of them involve the service export/unexport lifecycle and indirectly trigger application bootstrap logic, including the initialization of the metrics subsystem.
When metrics are enabled, Micrometer’s composite meter registry is created during bootstrap. Its internal data structures (such as `IdentityHashMap`) exhibit nondeterministic iteration behavior under random JVM execution orders, which leads to unpredictable test failures.
Additionally, `ServiceConfig` interacts with the global `DubboBootstrap` singleton, so any leftover state from one test can leak into the next one under random execution order.
## Root Cause
Two independent sources of nondeterminism were affecting the tests:
### 1. Metrics subsystem initialization
Even though `ServiceConfigTest` does not test metrics functionality, the metrics subsystem is still initialized by default as part of the service export flow.
Micrometer uses an `IdentityHashMap` internally, and under certain NonDex seeds this leads to exceptions such as:
```lua
java.lang.ArrayIndexOutOfBoundsException
at java.util.IdentityHashMap$KeyIterator.next(...)
at io.micrometer.core.instrument.composite.CompositeMeterRegistry.updateDescendants(...)
```
This happens _before_ the test reaches any `ServiceConfig` assertions.
### 2. Shared `DubboBootstrap` singleton
`DubboBootstrap` stores global state such as exported services, protocol configuration, and application metadata.
Without cleanup between tests, the bootstrap instance from a previous test can leak into the next one, creating nondeterministic behavior under reordered execution.
## Changes Made
The fix is as follows:
- Metrics are explicitly disabled at the beginning of each test so that the metrics subsystem never initializes, removing one major source of nondeterminism.
- All system properties introduced during testing are cleared afterward to prevent them from leaking across test boundaries.
- The global Dubbo bootstrap instance is reset after every test to ensure complete isolation and eliminate interference caused by shared internal state.
- No test logic, assertions, or mocks were modified.
## Verification
You can try running the following snippet of code from the dubbo repo root, on both pre-fix and post-fix code
```bash
./mvnw -q -pl dubbo-config/dubbo-config-api \
edu.illinois:nondex-maven-plugin:2.2.1:nondex \
-DnondexRuns=20
```
The tests should fail intermittently on the pre-fix version, but pass consistently across all seeds on the post-fix version.
NonDex run logs will be available under the `dubbo-config/dubbo-config-api/.nondex` directory.
## Checklist
- [x] Make sure there is a [GitHub_issue](https://github.com/apache/dubbo/issues) field for the change.
- [x] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
- [x] Write necessary unit-test to verify your logic correction. If the new feature or significant change is committed, please remember to add sample in [dubbo samples](https://github.com/apache/dubbo-samples) project.
- [x] Make sure gitHub actions can pass. [Why the workflow is failing and how to fix it?](../CONTRIBUTING.md)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org
Re: [PR] Fix: Stabilize multiple tests in `ServiceConfigTest` by isolating system properties and cached state [dubbo]
Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #15785:
URL: https://github.com/apache/dubbo/pull/15785#issuecomment-3558932856
## [Codecov](https://app.codecov.io/gh/apache/dubbo/pull/15785?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
:white_check_mark: All modified and coverable lines are covered by tests.
:white_check_mark: Project coverage is 29.66%. Comparing base ([`58d7386`](https://app.codecov.io/gh/apache/dubbo/commit/58d738682f02f0a315d72857b594eb9eace5e13d?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`c1326d6`](https://app.codecov.io/gh/apache/dubbo/commit/c1326d64eda65ed94fe261379141db5c8221cb36?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
:warning: Report is 3 commits behind head on 3.3.
> :exclamation: There is a different number of reports uploaded between BASE (58d7386) and HEAD (c1326d6). Click for more details.
>
> <details><summary>HEAD has 8 uploads less than BASE</summary>
>
>| Flag | BASE (58d7386) | HEAD (c1326d6) |
>|------|------|------|
>|samples-tests-java21|1|0|
>|integration-tests-java8|1|0|
>|integration-tests-java21|1|0|
>|unit-tests-java8|1|0|
>|unit-tests-java11|1|0|
>|unit-tests-java25|1|0|
>|unit-tests-java17|1|0|
>|unit-tests-java21|1|0|
></details>
<details><summary>Additional details and impacted files</summary>
```diff
@@ Coverage Diff @@
## 3.3 #15785 +/- ##
=============================================
- Coverage 60.77% 29.66% -31.12%
+ Complexity 11706 9323 -2383
=============================================
Files 1938 1937 -1
Lines 88646 88624 -22
Branches 13379 13295 -84
=============================================
- Hits 53875 26290 -27585
- Misses 29249 58265 +29016
+ Partials 5522 4069 -1453
```
| [Flag](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
|---|---|---|
| [integration-tests-java21](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [integration-tests-java8](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [samples-tests-java21](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [samples-tests-java8](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `29.66% <ø> (-0.07%)` | :arrow_down: |
| [unit-tests-java11](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [unit-tests-java17](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [unit-tests-java21](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [unit-tests-java25](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
| [unit-tests-java8](https://app.codecov.io/gh/apache/dubbo/pull/15785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
</details>
[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/apache/dubbo/pull/15785?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
<details><summary> :rocket: New features to boost your workflow: </summary>
- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org
Re: [PR] Fix: Stabilize multiple tests in `ServiceConfigTest` by isolating system properties and cached state [dubbo]
Posted by "RainYuY (via GitHub)" <gi...@apache.org>.
RainYuY merged PR #15785:
URL: https://github.com/apache/dubbo/pull/15785
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org