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]