in datasource/etcd/util/dependency_query.go [68:104]
func (dr *DependencyRelation) GetDependencyProviders(opts ...DependencyRelationFilterOption) ([]*pb.MicroService, error) {
keys, err := dr.getProviderKeys()
if err != nil {
return nil, err
}
services := make([]*pb.MicroService, 0, len(keys))
op := ToDependencyRelationFilterOpt(opts...)
for _, key := range keys {
if op.SameDomainProject && key.Tenant != dr.domainProject {
continue
}
providerIDs, err := dr.parseDependencyRule(key)
if err != nil {
return nil, err
}
for _, providerID := range providerIDs {
provider, err := GetService(dr.ctx, key.Tenant, providerID)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Warn(fmt.Sprintf("provider[%s/%s/%s/%s] does not exist",
key.Environment, key.AppId, key.ServiceName, key.Version))
} else {
log.Warn(fmt.Sprintf("get provider[%s/%s/%s/%s] failed",
key.Environment, key.AppId, key.ServiceName, key.Version))
}
continue
}
if op.NonSelf && providerID == dr.consumer.ServiceId {
continue
}
services = append(services, provider)
}
}
return services, nil
}