Modo-me commented on code in PR #3605:
URL: https://github.com/apache/dubbo-go/pull/3605#discussion_r3781509546


##########
metadata/mapping/metadata/service_name_mapping.go:
##########
@@ -117,27 +136,52 @@ func backoff(attempt int) time.Duration {
 }
 
 // Get will return the application-level services. If not found, the empty set 
will be returned.
-func (d *ServiceNameMapping) Get(url *common.URL, listener 
mapping.MappingListener) (*gxset.HashSet, error) {
+func (d *ServiceNameMapping) Get(url *common.URL, listener 
mapping.MappingListener) (result *gxset.HashSet, err error) {
        serviceInterface := url.GetParam(constant.InterfaceKey, "")
+
+       operation := "get"
+       eventName := metadataMetrics.MetadataMappingGet
+       if listener != nil {
+               operation = "listen"
+               eventName = metadataMetrics.MetadataMappingListen
+       }
+
+       event := metadataMetrics.NewMetadataMetricTimeEvent(eventName)
+       event.Attachment[constant.InterfaceKey] = serviceInterface
+       event.Attachment[constant.GroupKey] = DefaultGroup
+       var errs []error
+       defer func() {
+               event.Succ = err == nil
+               event.Partial = err == nil && len(errs) > 0
+               event.End = time.Now()
+               metrics.Publish(event)
+       }()
+
        metadataReports := metadata.GetMetadataReports()
        if len(metadataReports) == 0 {
-               return nil, perrors.New("can not get mapping in remote cause no 
metadata report instance found")
+               err = perrors.New("can not get mapping in remote cause no 
metadata report instance found")
+               logger.Warnf("[Metadata][Mapping] get failed interface=%s 
group=%s reports=0 err=%v", serviceInterface, DefaultGroup, err)
+               return nil, err
        }
+
        // Attach the listener to the stable primary report only 
(GetMetadataReport uses
        // a deterministic selection: prefer "default", otherwise lexicographic 
first).
        // GetMetadataReports() iterates a map so its order is 
non-deterministic; using
        // i==0 as the anchor would bind the listener to a random backend each 
run.
        primaryReport := metadata.GetMetadataReport()
-       var result *gxset.HashSet
-       var errs []error
-       for _, metadataReport := range metadataReports {
+       for i, metadataReport := range metadataReports {
                var reportListener mapping.MappingListener
                if metadataReport == primaryReport {
                        reportListener = listener
                }
-               set, err := 
metadataReport.GetServiceAppMapping(serviceInterface, DefaultGroup, 
reportListener)
-               if err != nil {
-                       errs = append(errs, err)
+               set, getErr := 
metadataReport.GetServiceAppMapping(serviceInterface, DefaultGroup, 
reportListener)
+               if getErr != nil {
+                       errs = append(errs, getErr)
+                       reportURL := ""
+                       if u := metadataReport.URL(); u != nil {
+                               reportURL = u.String()

Review Comment:
   已移除log敏感信息并添加测试



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to