You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "XnLemon (via GitHub)" <gi...@apache.org> on 2026/07/30 02:42:03 UTC
[PR] fix(filter, protocol, registry, apollo): guard unsafe type assertions [dubbo-go]
XnLemon opened a new pull request, #3563:
URL: https://github.com/apache/dubbo-go/pull/3563
### Description
Fixes #3554
This change removes panic-prone type assertions from the affected Apollo, registry, directory, Dubbo codec, and accesslog paths.
本次修改修复了 Apollo、registry、directory、Dubbo codec 和 accesslog 路径中可能导致 panic 的不安全类型断言问题。
- Validate Apollo configuration values before converting them to strings.
在转换 Apollo 配置值为字符串前增加类型校验。
- Safely handle unexpected registry and invoker cache values.
安全处理 registry 和 invoker 缓存中的异常类型。
- Avoid eager registry creation on cache hits.
避免缓存命中时重复创建 registry。
- Support both `result.RPCResult` and `*result.RPCResult` in Dubbo response encoding.
Dubbo 响应编码同时支持 `result.RPCResult` 和 `*result.RPCResult`。
- Return an error for unsupported response result types.
对不支持的响应结果类型返回错误。
- Skip invalid accesslog attachments and fall back from `interface` to `path`.
跳过非法的 accesslog attachment,并在 `interface` 无效时回退到 `path`。
- Add regression tests covering all affected locations.
为所有受影响位置补充回归测试。
### Checklist
- [x] I confirm the target branch is `develop`
- [x] Code has passed local testing
- [x] I have added tests that prove my fix is effective or that my feature works
--
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(filter, protocol, registry, config_center): guard unsafe type assertions [dubbo-go]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563#issuecomment-5196970415
## [](https://sonarcloud.io/dashboard?id=apache_dubbo-go&pullRequest=3563) **Quality Gate passed**
Issues
 [0 New issues](https://sonarcloud.io/project/issues?id=apache_dubbo-go&pullRequest=3563&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache_dubbo-go&pullRequest=3563&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache_dubbo-go&pullRequest=3563&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-go&pullRequest=3563&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-go&pullRequest=3563&metric=new_duplicated_lines_density&view=list)
<!-- sqra-placement-anchor -->
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache_dubbo-go&pullRequest=3563)
--
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(filter, protocol, registry, config_center): guard unsafe type assertions [dubbo-go]
Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563#discussion_r3717992199
##########
registry/protocol/protocol.go:
##########
@@ -86,15 +86,26 @@ func (proto *registryProtocol) getRegistry(registryUrl *common.URL) registry.Reg
if namespace != "" {
cacheKey = cacheKey + "?" + constant.NacosNamespaceID + "=" + namespace
}
- actualReg, _ := proto.registries.LoadOrStore(cacheKey, func() any {
- reg, err := extension.GetRegistry(registryUrl.Protocol, registryUrl)
- if err != nil {
- logger.Errorf("[Registry] registry cannot connect successfully, err=%s", err.Error())
- panic(err)
- }
- return reg
- }())
- return actualReg.(registry.Registry)
+ if actualReg, loaded := proto.registries.Load(cacheKey); loaded {
+ return cachedRegistry(actualReg, cacheKey)
+ }
+
+ reg, err := extension.GetRegistry(registryUrl.Protocol, registryUrl)
+ if err != nil {
+ logger.Errorf("[Registry] registry cannot connect successfully, err=%s", err.Error())
+ panic(err)
+ }
Review Comment:
getRegistry still panics on registry connection errors. Since call sites now handle `reg == nil` (e.g., Refer/Export/Destroy/UnregisterRegistries), consider returning `nil` (and not storing) instead of panicking to avoid crashing the whole process on transient/isolated registry failures.
##########
registry/directory/directory.go:
##########
@@ -586,7 +611,7 @@ func (dir *RegistryDirectory) RemoveClosingInstance(instanceKey string) bool {
defer dir.registerLock.Unlock()
if cacheInvoker, ok := dir.cacheInvokersMap.Load(instanceKey); ok {
- removed = cacheInvoker.(protocolbase.Invoker)
+ removed, _ = cachedInvoker(instanceKey, cacheInvoker)
}
dir.markClosingTombstone(instanceKey, removed, "closing-event")
removed = dir.uncacheInvokerWithKey(instanceKey)
Review Comment:
In `RemoveClosingInstance`, if `cachedInvoker` returns `ok=false` the invalid cache entry is left in `cacheInvokersMap`. For consistency with other call sites (e.g., `toGroupInvokers`, `uncacheInvokerWithClusterID`), consider deleting `instanceKey` from the cache when an unexpected cached type is encountered to prevent repeated log noise and lingering corrupted entries.
##########
registry/protocol/protocol.go:
##########
@@ -86,15 +86,26 @@ func (proto *registryProtocol) getRegistry(registryUrl *common.URL) registry.Reg
if namespace != "" {
cacheKey = cacheKey + "?" + constant.NacosNamespaceID + "=" + namespace
}
- actualReg, _ := proto.registries.LoadOrStore(cacheKey, func() any {
- reg, err := extension.GetRegistry(registryUrl.Protocol, registryUrl)
- if err != nil {
- logger.Errorf("[Registry] registry cannot connect successfully, err=%s", err.Error())
- panic(err)
- }
- return reg
- }())
- return actualReg.(registry.Registry)
+ if actualReg, loaded := proto.registries.Load(cacheKey); loaded {
+ return cachedRegistry(actualReg, cacheKey)
+ }
+
+ reg, err := extension.GetRegistry(registryUrl.Protocol, registryUrl)
+ if err != nil {
+ logger.Errorf("[Registry] registry cannot connect successfully, err=%s", err.Error())
+ panic(err)
+ }
+ actualReg, _ := proto.registries.LoadOrStore(cacheKey, reg)
+ return cachedRegistry(actualReg, cacheKey)
+}
+
+func cachedRegistry(value any, cacheKey string) registry.Registry {
+ reg, ok := value.(registry.Registry)
+ if !ok || reg == nil {
+ logger.Errorf("[Registry] cached registry has unexpected type %T for key %s", value, cacheKey)
+ return nil
+ }
+ return reg
Review Comment:
Two related issues: (1) when `cachedRegistry` returns nil due to an unexpected cached type, the invalid entry remains in `proto.registries`, so all future callers will keep returning nil (and logging) without any chance to self-heal; consider deleting the cacheKey (and/or overwriting it with a newly created registry) when a type mismatch is detected. (2) The `Load`-then-create-then-`LoadOrStore` pattern can still create duplicate registry instances under concurrent misses; if registry creation is expensive or has side effects, consider a singleflight/once-per-key approach to ensure only one initializer runs per key.
##########
filter/accesslog/filter.go:
##########
@@ -184,6 +178,19 @@ func (f *Filter) buildAccessLogData(_ base.Invoker, invocation base.Invocation)
return dataMap
}
+func stringAttachment(attachments map[string]any, key string) (string, bool) {
+ value, exists := attachments[key]
+ if !exists || value == nil {
+ return "", false
+ }
+ stringValue, ok := value.(string)
+ if !ok {
+ logger.Warnf("[Filter][AccessLog] attachment %q has unexpected type %T and will be omitted", key, value)
+ return "", false
+ }
+ return stringValue, true
+}
Review Comment:
Logging a Warn-level message for every non-string attachment can be noisy and potentially exploitable for log-volume amplification if attachments are influenced by requests. Consider lowering the level (e.g., Debug) and/or adding sampling/rate-limiting for this message, while still omitting the invalid attachment.
##########
protocol/dubbo/dubbo_codec_test.go:
##########
@@ -26,6 +26,12 @@ import (
"github.com/stretchr/testify/require"
)
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/constant"
+ "dubbo.apache.org/dubbo-go/v3/protocol/result"
+ "dubbo.apache.org/dubbo-go/v3/remoting"
+)
Review Comment:
This file now has a second `import (...)` block. In Go, it’s standard to keep a single import block (letting `gofmt` group stdlib/third-party), and it also helps avoid accidental duplicate imports of the same path across blocks.
--
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(filter, protocol, registry, config_center): guard unsafe type assertions [dubbo-go]
Posted by "AlexStocks (via GitHub)" <gi...@apache.org>.
AlexStocks commented on PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563#issuecomment-5188080962
<img width="948" height="446" alt="image" src="https://github.com/user-attachments/assets/e8a105e6-1583-411a-9fe6-760cd4cbf0b8" />
please fix this safety problem from sonar.
--
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(filter, protocol, registry, apollo): guard unsafe type assertions [dubbo-go]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563#issuecomment-5125759359
## [](https://sonarcloud.io/dashboard?id=apache_dubbo-go&pullRequest=3563) **Quality Gate passed**
Issues
 [1 New issue](https://sonarcloud.io/project/issues?id=apache_dubbo-go&pullRequest=3563&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache_dubbo-go&pullRequest=3563&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache_dubbo-go&pullRequest=3563&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-go&pullRequest=3563&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache_dubbo-go&pullRequest=3563&metric=new_duplicated_lines_density&view=list)
<!-- sqra-placement-anchor -->
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache_dubbo-go&pullRequest=3563)
--
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(filter, protocol, registry, config_center): guard unsafe type assertions [dubbo-go]
Posted by "AlexStocks (via GitHub)" <gi...@apache.org>.
AlexStocks commented on code in PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563#discussion_r3718097926
##########
registry/protocol/protocol.go:
##########
@@ -86,15 +86,26 @@ func (proto *registryProtocol) getRegistry(registryUrl *common.URL) registry.Reg
if namespace != "" {
cacheKey = cacheKey + "?" + constant.NacosNamespaceID + "=" + namespace
}
- actualReg, _ := proto.registries.LoadOrStore(cacheKey, func() any {
- reg, err := extension.GetRegistry(registryUrl.Protocol, registryUrl)
- if err != nil {
- logger.Errorf("[Registry] registry cannot connect successfully, err=%s", err.Error())
- panic(err)
- }
- return reg
- }())
- return actualReg.(registry.Registry)
+ if actualReg, loaded := proto.registries.Load(cacheKey); loaded {
+ return cachedRegistry(actualReg, cacheKey)
+ }
+
+ reg, err := extension.GetRegistry(registryUrl.Protocol, registryUrl)
+ if err != nil {
+ logger.Errorf("[Registry] registry cannot connect successfully, err=%s", err.Error())
+ panic(err)
+ }
+ actualReg, _ := proto.registries.LoadOrStore(cacheKey, reg)
+ return cachedRegistry(actualReg, cacheKey)
+}
+
+func cachedRegistry(value any, cacheKey string) registry.Registry {
+ reg, ok := value.(registry.Registry)
+ if !ok || reg == nil {
Review Comment:
[P1] 同时拒绝缓存接口中的 typed nil
Go 接口里装着 `(*T)(nil)` 时,类型断言会成功且接口本身不等于 nil,因此这里的防御仍会把 typed-nil registry 当成有效值返回;同一 PR 新增的 `registry/directory.cachedInvoker` 也有相同问题。隔离 Linux 探针中,前者返回了伪非 nil `registry.Registry`,后者通过校验后在 `toGroupInvokers -> invoker.GetURL()` 稳定 SIGSEGV。这些 helper 正是为不可信缓存值替代直接断言而新增的,不能留下另一种可崩溃的非法值。请用一个同时检查 nil-able 动态值的公共 helper(或对具体接口提供安全判空)覆盖这两个缓存入口,并补 typed-nil registry/invoker 回归测试。
--
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(filter, protocol, registry, config_center): guard unsafe type assertions [dubbo-go]
Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563#issuecomment-5125771899
## [Codecov](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
:x: Patch coverage is `67.24138%` with `38 lines` in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 55.31%. Comparing base ([`53d81d1`](https://app.codecov.io/gh/apache/dubbo-go/commit/53d81d17c0f658b7151fb8c44f0d80371ef047e7?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`4fce27e`](https://app.codecov.io/gh/apache/dubbo-go/commit/4fce27e1958f85d1f460918b61ce8659284ce80f?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
| [Files with missing lines](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Patch % | Lines |
|---|---|---|
| [registry/directory/directory.go](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?src=pr&el=tree&filepath=registry%2Fdirectory%2Fdirectory.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cmVnaXN0cnkvZGlyZWN0b3J5L2RpcmVjdG9yeS5nbw==) | 60.46% | [15 Missing and 2 partials :warning: ](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [registry/protocol/protocol.go](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?src=pr&el=tree&filepath=registry%2Fprotocol%2Fprotocol.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cmVnaXN0cnkvcHJvdG9jb2wvcHJvdG9jb2wuZ28=) | 41.37% | [11 Missing and 6 partials :warning: ](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [protocol/dubbo/dubbo\_codec.go](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?src=pr&el=tree&filepath=protocol%2Fdubbo%2Fdubbo_codec.go&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-cHJvdG9jb2wvZHViYm8vZHViYm9fY29kZWMuZ28=) | 75.00% | [3 Missing and 1 partial :warning: ](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
<details><summary>Additional details and impacted files</summary>
```diff
@@ Coverage Diff @@
## main #3563 +/- ##
==========================================
+ Coverage 55.23% 55.31% +0.07%
==========================================
Files 462 462
Lines 36005 36078 +73
==========================================
+ Hits 19886 19955 +69
Misses 14562 14562
- Partials 1557 1561 +4
```
</details>
[:umbrella: View full report in Codecov by Harness](https://app.codecov.io/gh/apache/dubbo-go/pull/3563?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.
</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(filter, protocol, registry, config_center): guard unsafe type assertions [dubbo-go]
Posted by "XnLemon (via GitHub)" <gi...@apache.org>.
XnLemon commented on PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563#issuecomment-5197043199
> <img alt="image" width="948" height="446" src="https://private-user-images.githubusercontent.com/7959374/631561373-e8a105e6-1583-411a-9fe6-760cd4cbf0b8.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODU5NjI0MTgsIm5iZiI6MTc4NTk2MjExOCwicGF0aCI6Ii83OTU5Mzc0LzYzMTU2MTM3My1lOGExMDVlNi0xNTgzLTQxMWEtOWZlNi03NjBjZDRjYmYwYjgucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDgwNSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA4MDVUMjAzNTE4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Mjc0YzUzNzc3YTM2MjA1YjI2YzJhZDU2YmRkYTA3NjA5YmVjMjJiOWVlZDI1Njk3ZDFlMDgxMjYyODQxYmY2OSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.UtXjZBDDJXnXrYW2lT8DTDjKOF4HJO2cNTasz1M1h0k"> please fix this safety problem from sonar.
done -w-
--
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(filter, protocol, registry, config_center): guard unsafe type assertions [dubbo-go]
Posted by "AlexStocks (via GitHub)" <gi...@apache.org>.
AlexStocks merged PR #3563:
URL: https://github.com/apache/dubbo-go/pull/3563
--
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