This is an automated email from the ASF dual-hosted git repository.
justxuewei pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 34934d1e2 feat: use notifyAll insteadOf notify for listener events
notify (#2043)
34934d1e2 is described below
commit 34934d1e2fe3c47b09acf0d174b3529716752070
Author: Lexus Lee <[email protected]>
AuthorDate: Sat Sep 10 14:21:04 2022 +0800
feat: use notifyAll insteadOf notify for listener events notify (#2043)
Signed-off-by: LexusLee<[email protected]>
---
registry/directory/directory.go | 8 ++++----
registry/event/service_instances_changed_listener_impl.go | 4 +++-
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/registry/directory/directory.go b/registry/directory/directory.go
index bef438b63..5f1f12dd2 100644
--- a/registry/directory/directory.go
+++ b/registry/directory/directory.go
@@ -141,7 +141,7 @@ func (dir *RegistryDirectory) refreshInvokers(event
*registry.ServiceEvent) {
}
// refreshAllInvokers the argument is the complete list of the service events,
we can safely assume any cached invoker
-// not in the incoming list can be removed. The Action of serviceEvent should
be EventTypeUpdate.
+// not in the incoming list can be removed. The Action of serviceEvent should
be EventTypeUpdate or EventTypeAdd.
func (dir *RegistryDirectory) refreshAllInvokers(events
[]*registry.ServiceEvent, callback func()) {
var (
oldInvokers []protocol.Invoker
@@ -152,7 +152,7 @@ func (dir *RegistryDirectory) refreshAllInvokers(events
[]*registry.ServiceEvent
// loop the events to check the Action should be EventTypeUpdate.
for _, event := range events {
- if event.Action != remoting.EventTypeUpdate {
+ if event.Action != remoting.EventTypeUpdate && event.Action !=
remoting.EventTypeAdd {
panic("Your implements of register center is wrong, " +
"please check the Action of ServiceEvent should
be EventTypeUpdate")
}
@@ -186,9 +186,9 @@ func (dir *RegistryDirectory) refreshAllInvokers(events
[]*registry.ServiceEvent
addEvents = append(addEvents, event)
}
}
- // loop the updateEvents
+ // loop the serviceEvents
for _, event := range addEvents {
- logger.Debugf("[Registry Directory] registry update,
result{%s}", event)
+ logger.Debugf("[Registry Directory] registry changed,
result{%s}", event)
if event != nil && event.Service != nil {
logger.Infof("[Registry Directory] selector add
service url{%s}", event.Service.String())
}
diff --git a/registry/event/service_instances_changed_listener_impl.go
b/registry/event/service_instances_changed_listener_impl.go
index a9ce70a52..a65913aac 100644
--- a/registry/event/service_instances_changed_listener_impl.go
+++ b/registry/event/service_instances_changed_listener_impl.go
@@ -130,12 +130,14 @@ func (lstn *ServiceInstancesChangedListenerImpl)
OnEvent(e observer.Event) error
for key, notifyListener := range lstn.listeners {
urls := lstn.serviceUrls[key]
+ events := make([]*registry.ServiceEvent, 0, len(urls))
for _, url := range urls {
- notifyListener.Notify(®istry.ServiceEvent{
+ events = append(events, ®istry.ServiceEvent{
Action: remoting.EventTypeAdd,
Service: url,
})
}
+ notifyListener.NotifyAll(events, func() {})
}
}
return nil