in datasource/mongo/ms.go [1012:1071]
func (ds *MetadataManager) ListInstance(ctx context.Context, request *discovery.GetInstancesRequest) (*discovery.GetInstancesResponse, error) {
service := &model.Service{}
var err error
if len(request.ConsumerServiceId) > 0 {
service, err = GetServiceByID(ctx, request.ConsumerServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("consumer does not exist, consumer %s find provider %s instances",
request.ConsumerServiceId, request.ProviderServiceId))
return nil, discovery.NewError(discovery.ErrServiceNotExists,
fmt.Sprintf("Consumer[%s] does not exist.", request.ConsumerServiceId))
}
log.Error(fmt.Sprintf("get consumer failed, consumer %s find provider %s instances",
request.ConsumerServiceId, request.ProviderServiceId), err)
return nil, discovery.NewError(discovery.ErrInternal, err.Error())
}
}
provider, err := GetServiceByID(ctx, request.ProviderServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("provider does not exist, consumer %s find provider %s instances",
request.ConsumerServiceId, request.ProviderServiceId))
return nil, discovery.NewError(discovery.ErrServiceNotExists,
fmt.Sprintf("provider[%s] does not exist.", request.ProviderServiceId))
}
log.Error(fmt.Sprintf("get provider failed, consumer %s find provider instances %s",
request.ConsumerServiceId, request.ProviderServiceId), err)
return nil, discovery.NewError(discovery.ErrInternal, err.Error())
}
findFlag := func() string {
return fmt.Sprintf("consumer[%s][%s/%s/%s/%s] find provider[%s][%s/%s/%s/%s] instances",
request.ConsumerServiceId, service.Service.Environment, service.Service.AppId, service.Service.ServiceName, service.Service.Version,
provider.Service.ServiceId, provider.Service.Environment, provider.Service.AppId, provider.Service.ServiceName, provider.Service.Version)
}
rev, _ := ctx.Value(util.CtxRequestRevision).(string)
serviceIDs := filterServiceIDs(ctx, request.ConsumerServiceId, request.Tags, []*model.Service{provider})
if len(serviceIDs) == 0 {
mes := fmt.Errorf("%s failed, provider does not exist", findFlag())
log.Error("query service failed", mes)
return nil, discovery.NewError(discovery.ErrServiceNotExists, mes.Error())
}
instances, err := GetAllInstancesOfOneService(ctx, request.ProviderServiceId)
if err != nil {
log.Error(fmt.Sprintf("get instances failed %s", findFlag()), err)
return nil, discovery.NewError(discovery.ErrInternal, err.Error())
}
newRev, _ := formatRevision(request.ConsumerServiceId, instances)
if rev == newRev {
instances = nil // for gRPC
}
_ = util.WithResponseRev(ctx, newRev)
return &discovery.GetInstancesResponse{
Instances: instances,
}, nil
}