This is an automated email from the ASF dual-hosted git repository.
Alanxtl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/develop by this push:
new fd4dea4f8 fix(router): avoid script process panic on invalid config
(#3417)
fd4dea4f8 is described below
commit fd4dea4f8ccef79a3190ba1d4a60af775d615135
Author: 吴杨帆 <[email protected]>
AuthorDate: Tue Jun 16 12:52:33 2026 +0800
fix(router): avoid script process panic on invalid config (#3417)
* fix(router): avoid script process panic on invalid config
* fix(router): handle script delete without config body
* test(router): cover active script delete event
---
cluster/router/script/router.go | 24 ++++++++++++++----------
cluster/router/script/router_test.go | 30 ++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 10 deletions(-)
diff --git a/cluster/router/script/router.go b/cluster/router/script/router.go
index 8823844c4..84073e15f 100644
--- a/cluster/router/script/router.go
+++ b/cluster/router/script/router.go
@@ -70,9 +70,22 @@ func (s *ScriptRouter) Process(event
*config_center.ConfigChangeEvent) {
s.mu.Lock()
defer s.mu.Unlock()
+ if event.ConfigType == remoting.EventTypeDel {
+ in, _ := ins.GetInstances(s.scriptType)
+
+ if in != nil && s.enabled {
+ in.Destroy(s.rawScript)
+ }
+ s.enabled = false
+ s.rawScript = ""
+ s.scriptType = ""
+ return
+ }
+
rawConf, ok := event.Value.(string)
if !ok {
- panic(ok)
+ logger.Errorf("[Router][Script] route config value must be
string, actualType=%T", event.Value)
+ return
}
cfg, err := parseRoute(rawConf)
if err != nil {
@@ -128,15 +141,6 @@ func (s *ScriptRouter) Process(event
*config_center.ConfigChangeEvent) {
}
}
- case remoting.EventTypeDel:
- in, _ := ins.GetInstances(s.scriptType)
-
- if in != nil && s.enabled {
- in.Destroy(s.rawScript)
- }
- s.enabled = false
- s.rawScript = ""
- s.scriptType = ""
}
}
diff --git a/cluster/router/script/router_test.go
b/cluster/router/script/router_test.go
index 8d6bf453f..e9b04c13e 100644
--- a/cluster/router/script/router_test.go
+++ b/cluster/router/script/router_test.go
@@ -227,6 +227,36 @@ script: |
}
}
+func TestScriptRouterProcessSkipsNonStringConfig(t *testing.T) {
+ s := &ScriptRouter{
+ enabled: true,
+ scriptType: "javascript",
+ rawScript: "old script",
+ }
+
+ assert.NotPanics(t, func() {
+ s.Process(&config_center.ConfigChangeEvent{Key: "", Value: 123,
ConfigType: remoting.EventTypeUpdate})
+ })
+ assert.True(t, s.enabled)
+ assert.Equal(t, "javascript", s.scriptType)
+ assert.Equal(t, "old script", s.rawScript)
+}
+
+func TestScriptRouterProcessDelSkipsConfigBody(t *testing.T) {
+ s := &ScriptRouter{
+ enabled: true,
+ scriptType: "javascript",
+ rawScript: "old script",
+ }
+
+ assert.NotPanics(t, func() {
+ s.Process(&config_center.ConfigChangeEvent{Key: "", Value: nil,
ConfigType: remoting.EventTypeDel})
+ })
+ assert.False(t, s.enabled)
+ assert.Empty(t, s.scriptType)
+ assert.Empty(t, s.rawScript)
+}
+
func checkInvokersSame(invokers []base.Invoker, otherInvokers []base.Invoker)
bool {
k := map[string]struct{}{}
for _, invoker := range otherInvokers {