You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2026/09/15 08:51:02 UTC
(dubbo-go) branch develop updated: fix(config-center): emit delete for empty Nacos callbacks (#3725)
This is an automated email from the ASF dual-hosted git repository.
AlexStocks 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 2e338fa1e fix(config-center): emit delete for empty Nacos callbacks (#3725)
2e338fa1e is described below
commit 2e338fa1e8bdb899501b50d951ca180c2d406b7a
Author: xiaobaicai66695 <57...@qq.com>
AuthorDate: Tue Sep 15 16:50:56 2026 +0800
fix(config-center): emit delete for empty Nacos callbacks (#3725)
* fix(config-center): emit delete for empty nacos callbacks
---
config_center/nacos/listener.go | 13 +++++++++++--
config_center/nacos/listener_test.go | 15 +++++++++++++++
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/config_center/nacos/listener.go b/config_center/nacos/listener.go
index c1b44ff05..d48636720 100644
--- a/config_center/nacos/listener.go
+++ b/config_center/nacos/listener.go
@@ -81,9 +81,18 @@ func (s *keyListenerSet) snapshot() []config_center.ConfigurationListener {
}
func callback(set *keyListenerSet, _, group, dataId, data string) {
+ eventType := remoting.EventTypeUpdate
+ // Nacos SDK callbacks do not include a change type. In nacos-sdk-go v2.2.5,
+ // a deleted config reaches this callback with empty content. Match the
+ // ZooKeeper cache listener by treating empty content as a deletion. This
+ // intentionally makes deleting a config and updating it to an empty string
+ // equivalent.
+ if data == "" {
+ eventType = remoting.EventTypeDel
+ }
for _, l := range set.snapshot() {
- l.Process(&config_center.ConfigChangeEvent{Key: dataId, Value: data, ConfigType: remoting.EventTypeUpdate})
- metrics.Publish(metricsConfigCenter.NewIncMetricEvent(dataId, group, remoting.EventTypeUpdate, metricsConfigCenter.Nacos))
+ l.Process(&config_center.ConfigChangeEvent{Key: dataId, Value: data, ConfigType: eventType})
+ metrics.Publish(metricsConfigCenter.NewIncMetricEvent(dataId, group, eventType, metricsConfigCenter.Nacos))
}
}
diff --git a/config_center/nacos/listener_test.go b/config_center/nacos/listener_test.go
index 121fe5d32..cbd2f9d19 100644
--- a/config_center/nacos/listener_test.go
+++ b/config_center/nacos/listener_test.go
@@ -49,6 +49,21 @@ func TestCallback(t *testing.T) {
}
}
+func TestCallbackDelete(t *testing.T) {
+ l := &recordingListener{}
+ set := newKeyListenerSet("test-group")
+ set.add(l)
+
+ callback(set, "", "g", "data", "")
+
+ if len(l.events) != 1 {
+ t.Fatalf("expected 1 event, got %d", len(l.events))
+ }
+ if l.events[0].Key != "data" || l.events[0].Value != "" || l.events[0].ConfigType != remoting.EventTypeDel {
+ t.Fatalf("unexpected event %+v", l.events[0])
+ }
+}
+
func TestRemoveListener(t *testing.T) {
n := &nacosDynamicConfiguration{}
key := "k"