xiaobaicai66695 opened a new issue, #3661:
URL: https://github.com/apache/dubbo-go/issues/3661

   ## What happened?
   
   A standard v3 dynamic configurator rule cannot reliably execute the v3 
matching path.
   
   Expected:
   
   - The rule-level YAML field `configVersion: v3.0` selects 
`configureIfMatchV3`.
   - An omitted match or `match: {}` means match-all.
   - A partial match evaluates only the dimensions explicitly configured.
   - Matching parameters such as `loadbalance` are applied to the target URL.
   
   Actual:
   
   - `DefaultConfigurationParser` writes the rule version to the generated URL 
as `configVersion`.
   - `overrideConfigurator` reads `constant.ConfigVersionKey`, whose value is 
`config-center.configVersion` and belongs to the config-center component 
parameter namespace.
   - The version lookup therefore returns empty and the standard v3 rule falls 
into `configureDeprecated`, bypassing v3 match semantics. Simple rules may 
still appear to work through the deprecated path, producing a false-positive 
integration result.
   - When the v3 path is reached, an omitted or empty `ConditionMatch` contains 
nil pointers. `ConditionMatch.IsMatch` dereferences `Address`, 
`ProviderAddress`, `Service`, and `App` unconditionally, so match-all and 
partial matches can panic before parameters are applied.
   
   The version-key collision was introduced when config-center component keys 
were namespaced from values such as `configVersion` to 
`config-center.configVersion`; the configurator continued reusing that 
component constant for the rule schema.
   
   ## How can we reproduce it?
   
   Use a v3 application-scoped dynamic configuration such as:
   
   ```yaml
   configVersion: v3.0
   enabled: true
   key: demo-consumer
   scope: application
   configs:
     - side: consumer
       match: {}
       enabled: true
       parameters:
         loadbalance: roundrobin
   ```
   
   1. Parse the YAML with `DefaultConfigurationParser.ParseToUrls`.
   2. Observe that the generated configurator URL contains `configVersion=v3.0`.
   3. Pass that URL to `overrideConfigurator.Configure`.
   4. The configurator looks for `config-center.configVersion`, does not 
recognize the v3 rule, and enters the deprecated path.
   5. If version dispatch is corrected independently, evaluating the empty 
match reaches nil matcher fields and can panic.
   
   A non-matching application constraint also demonstrates the incorrect 
dispatch: the parameter is applied by the deprecated path even though the v3 
match should reject the target URL.
   
   This blocks an end-to-end assertion of the intended chain:
   
   ```text
   Admin rule -> config center data -> v3 parser/configurator -> target URL 
parameters -> invocation behavior
   ```
   
   ## Environment
   
   - dubbo-go: `develop` at `a10df2f7`
   - Go: `go1.25.5`
   - OS: Windows amd64; the issue is platform-independent
   - Config center: ZooKeeper


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to