AlexStocks commented on code in PR #3605:
URL: https://github.com/apache/dubbo-go/pull/3605#discussion_r3780864136


##########
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:
   [P1] 这里把 `metadataReport.URL().String()` 直接写入 Warn 日志会泄露 metadata center 
凭据。`ReportOptions.toUrl` 会把 Username/Password 写入 `common.URL`,而 `URL.String()` 
会原样拼出 `user:password@host`;固定当前 Head 的探针实际输出了 
`nacos://review-user:[email protected]:8848`。只要 `GetServiceAppMapping` 
失败,密码就会进入集中日志。请只记录脱敏后的 protocol/address/registry ID,统一移除 userinfo 和敏感 query 
参数,并增加失败路径测试断言日志不包含原始 secret。



-- 
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