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(&registry.ServiceEvent{
+                               events = append(events, &registry.ServiceEvent{
                                        Action:  remoting.EventTypeAdd,
                                        Service: url,
                                })
                        }
+                       notifyListener.NotifyAll(events, func() {})
                }
        }
        return nil

Reply via email to