You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "xiaobaicai66695 (via GitHub)" <gi...@apache.org> on 2026/08/15 08:40:18 UTC
[PR] feat: align router rule delivery and management chain [dubbo-admin]
xiaobaicai66695 opened a new pull request, #1530:
URL: https://github.com/apache/dubbo-admin/pull/1530
**Please provide a description of this PR:**
## Background
Closes #1523.
Dubbo Admin could model several traffic rules, but the complete delivery chain was inconsistent across the Console API, configuration-center storage, watcher decoding, frontend editing, and dubbo-go runtime consumption. In particular, rule names and ZooKeeper paths could diverge, Condition YAML could lose fields after switching tabs, and Affinity/Script rules did not have a complete management path.
## What this PR changes
### Rule delivery and configuration-center contract
- Adds a shared external YAML codec and validation path for Condition v3.0/v3.1, Tag, Affinity, Script, and Dynamic Config rules instead of exposing internal protobuf YAML directly.
- Keeps Condition v3.0 string conditions and v3.1 structured `from`/`to`/`weight` conditions version-specific and round-trip safe.
- Adds Script route protobuf/resource types and wires Script and Affinity resources into the resource, versioning, watcher, and governor flows.
- Standardizes ZooKeeper writes, reads, updates, and deletes on `/dubbo/config/dubbo/<rule-name>`, creates missing parent nodes, and keeps legacy locations read-only for compatibility.
- Uses the configured Config Center address for rule delivery, with registry address fallback for compatibility, and aligns Nacos and ZooKeeper on the same external YAML contract.
- Makes Service Argument Route create/update an upsert so its first save no longer depends on a pre-existing resource.
### Console API
- Adds search/detail/create/update/delete endpoints for Affinity and Script rules.
- Adds typed Condition input conversion so v3.0 and v3.1 request bodies are decoded without losing their version-specific condition shape.
- Validates rule names, suffixes, scope, keys, script type/content, and route content before calling the governor.
- Preserves mutation metadata and version-history behavior for the new rule types.
### Frontend
- Adds Affinity and Script list/editor routes using shared router-rule list and YAML editor components.
- Fixes the traffic menu state so nested dynamic-router pages expand and select consistently; this is navigation grouping only, not a runtime parent/child relationship.
- Fixes Condition form/YAML equivalence: v3.1 structured `conditions` are visible and editable in the form, while v3.0 continues to use string conditions.
- Reloads complete Condition details when tab state contains only a partial draft and stops form initialization from publishing an incomplete `{ enabled, key, runtime, scope }` object.
- Preserves `configVersion`, `priority`, `force`, `conditions`, and the remaining backend fields across detail, form, YAML, and save round trips.
- Aligns Tag rule names generated by both form and YAML creation with the runtime node name.
## Problems fixed
| Problem | Root cause | Resolution |
|---|---|---|
| Deleting a previously created rule could fail with `zk: node does not exist` | Create/read/delete used different rule-name or legacy path derivations | All new operations use the same standard node path and update can create a missing standard node |
| Saved Condition YAML later showed only `enabled/key/runtime/scope` | A partial shared tab object was treated as complete and initialization overwrote the full detail | Detect incomplete shared state, reload backend detail, and preserve the complete rule object |
| Condition YAML contained `conditions`, but the form did not | The form only understood v3.0 strings and had no v3.1 structured editor | Add version-aware models and structured v3.1 form rendering/editing |
| Condition YAML editing silently forced v3.0 | The YAML update path overwrote `configVersion` | Submit the version and condition shape provided by the rule |
| Affinity and Script lacked a complete Admin chain | Resource/API/watcher/frontend wiring was incomplete | Add resource types, codecs, validation, CRUD APIs, watcher/governor integration, routes, and UI |
| First Service Argument Route save could fail | The service path only updated an existing resource | Use create-or-update semantics |
## End-to-end verification
The local reproduction harness verifies the full behavior chain, not only receipt of a ZooKeeper event:
```text
Admin UI / Console API
-> /dubbo/config/dubbo/<rule-name>
-> dubbo-go listener / router / configurator
-> actual provider calls
-> ASSERTION_PASS and process exit code 0
```
The harness and evidence are intentionally kept outside this PR under `quickstart-demo/e2e/admin-router-rule-chain`; they are local reproduction artifacts and are not tracked by dubbo-admin.
| Scenario | Isolated service | Result |
|---|---|---|
| Condition v3.0 / v3.1 | `Greeter`, group `demo`, providers `20000/20001` | Manually verified hot updates for both versions; each version routed continuous calls only to Hangzhou `20000`, and disabling/deleting the rule restored unrestricted provider selection |
| Tag primary | `GreeterTag`, group `tag` | 8/8 calls routed to Hangzhou `20100`; Admin detail, standard ZK node, consumer assertion, and provider logs all passed |
| Tag secondary update | Same rule | 8/8 calls switched to Shanghai `20101` |
| Script primary | `GreeterScript`, group `script` | 8/8 calls routed to Hangzhou `20200` through actual JavaScript invoker filtering |
| Script secondary update | Same rule | 8/8 calls switched to Shanghai `20201` |
| Affinity primary | `GreeterAffinity`, group `affinity` | Hangzhou consumer application: 8/8 calls to the matching Hangzhou provider `20300` |
| Affinity secondary | Same rule | Shanghai consumer application: 8/8 calls to the matching Shanghai provider `20301` |
| Dynamic Config control | `GreeterDynamic`, group `dynamic` | `consistenthashing` with identical arguments kept all 8 calls on one provider; Admin response, standard ZK node, consumer assertion, and provider logs passed |
The newer Dynamic Config `roundrobin` variant has not produced a final successful report yet, so it is deliberately not claimed as passed here. Dynamic Config runtime parsing/matching also depends on apache/dubbo-go#3660 (background: apache/dubbo-go#3661).
## Automated tests
- `go test ./...` — passed.
- `yarn test` — passed: 9 test files, 18 tests.
- ESLint on all changed TS/Vue files — passed with 0 errors (existing unused-variable warnings remain in legacy Tag files).
- `yarn vite build` — passed.
- `git diff --check upstream/develop...HEAD` — passed.
New regression coverage includes external YAML codec round trips and validation, Console request/response contracts, Service Argument Route upsert behavior, ZooKeeper path/config-center selection, Condition v3.1 form/YAML round trips and incomplete-state reload, Tag rule naming, and nested menu state.
`yarn type-check` and repository-wide `yarn lint` still report pre-existing baseline errors in unchanged Home, Resource/Grafana, test placeholder, and legacy traffic pages. The changed-file ESLint run and production Vite build complete successfully.
**To help us figure out who should review this PR, please put an X in all the areas that this PR affects.**
- [ ] Docs
- [ ] Installation
- [x] User Experience
- [ ] Dubboctl
- [x] Console
- [x] Core Component
**Please check any characteristics that apply to this pull request.**
- [x] Adds or changes Console API behavior
- [x] Adds frontend traffic-rule management
- [x] Changes configuration-center serialization and node handling
- [x] Includes backend and frontend regression tests
--
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] draft: router rule delivery integration [dubbo-admin]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #1530:
URL: https://github.com/apache/dubbo-admin/pull/1530#issuecomment-5488471504
## [](https://sonarcloud.io/dashboard?id=apache_dubbo-admin&pullRequest=1530) **Quality Gate passed**
Issues
 [0 New issues](https://sonarcloud.io/project/issues?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-admin&pullRequest=1530&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-admin&pullRequest=1530&metric=new_duplicated_lines_density&view=list)
<!-- sqra-placement-anchor -->
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache_dubbo-admin&pullRequest=1530)
--
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] draft: router rule delivery integration [dubbo-admin]
Posted by "xiaobaicai66695 (via GitHub)" <gi...@apache.org>.
xiaobaicai66695 commented on PR #1530:
URL: https://github.com/apache/dubbo-admin/pull/1530#issuecomment-5488607680
Closing this draft because the router-rule changes will be reorganized into smaller fork-internal PRs based on feature/router-rule-integration for easier review before submitting to apache/develop.
--
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] feat: align router rule delivery and management chain [dubbo-admin]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #1530:
URL: https://github.com/apache/dubbo-admin/pull/1530#issuecomment-5301456801
## [](https://sonarcloud.io/dashboard?id=apache_dubbo-admin&pullRequest=1530) **Quality Gate passed**
Issues
 [0 New issues](https://sonarcloud.io/project/issues?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-admin&pullRequest=1530&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-admin&pullRequest=1530&metric=new_duplicated_lines_density&view=list)
<!-- sqra-placement-anchor -->
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache_dubbo-admin&pullRequest=1530)
--
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] draft: router rule delivery integration [dubbo-admin]
Posted by "xiaobaicai66695 (via GitHub)" <gi...@apache.org>.
xiaobaicai66695 closed pull request #1530: draft: router rule delivery integration
URL: https://github.com/apache/dubbo-admin/pull/1530
--
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] feat: align router rule delivery and management chain [dubbo-admin]
Posted by "Alanxtl (via GitHub)" <gi...@apache.org>.
Alanxtl commented on PR #1530:
URL: https://github.com/apache/dubbo-admin/pull/1530#issuecomment-5303024857
Please do not push down any further commits or changes regarding this task. We are reserving this feature for OSPP
--
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] feat: align router rule delivery and management chain [dubbo-admin]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #1530:
URL: https://github.com/apache/dubbo-admin/pull/1530#issuecomment-5301420877
## [](https://sonarcloud.io/dashboard?id=apache_dubbo-admin&pullRequest=1530) **Quality Gate passed**
Issues
 [0 New issues](https://sonarcloud.io/project/issues?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache_dubbo-admin&pullRequest=1530&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-admin&pullRequest=1530&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-admin&pullRequest=1530&metric=new_duplicated_lines_density&view=list)
<!-- sqra-placement-anchor -->
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache_dubbo-admin&pullRequest=1530)
--
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