robotLJW commented on a change in pull request #782:
URL: 
https://github.com/apache/servicecomb-service-center/pull/782#discussion_r540754256



##########
File path: datasource/mongo/ms.go
##########
@@ -1464,44 +1469,51 @@ func (ds *DataSource) GetInstance(ctx context.Context, 
request *pb.GetOneInstanc
                                fmt.Sprintf("Provider[%s] does not exist.", 
request.ProviderServiceId)),
                }, nil
        }
+       findFlag := fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find 
provider[%s][%s/%s/%s/%s] instance[%s]",
+               request.ConsumerServiceId, service.ServiceInfo.Environment, 
service.ServiceInfo.AppId, service.ServiceInfo.ServiceName, 
service.ServiceInfo.Version,
+               provider.ServiceInfo.ServiceId, 
provider.ServiceInfo.Environment, provider.ServiceInfo.AppId, 
provider.ServiceInfo.ServiceName, provider.ServiceInfo.Version,
+               request.ProviderInstanceId)
 
-       findFlag := func() string {
-               return fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find 
provider[%s][%s/%s/%s/%s] instance[%s]",
-                       request.ConsumerServiceId, 
service.ServiceInfo.Environment, service.ServiceInfo.AppId, 
service.ServiceInfo.ServiceName, service.ServiceInfo.Version,
-                       provider.ServiceInfo.ServiceId, 
provider.ServiceInfo.Environment, provider.ServiceInfo.AppId, 
provider.ServiceInfo.ServiceName, provider.ServiceInfo.Version,
-                       request.ProviderInstanceId)
-       }
-
-       domain := util.ParseDomain(ctx)
-       project := util.ParseProject(ctx)
-       filter = bson.M{
-               ColumnDomain:  domain,
-               ColumnProject: project,
-               StringBuilder([]string{ColumnInstanceInfo, ColumnServiceID}): 
request.ProviderServiceId}
-       findOneRes, err := client.GetMongoClient().FindOne(ctx, 
CollectionInstance, filter)
+       domainProject := util.ParseDomainProject(ctx)
+       services, err := findServices(ctx, pb.MicroServiceToKey(domainProject, 
provider.ServiceInfo))
        if err != nil {
-               mes := fmt.Errorf("%s failed, provider instance does not 
exist", findFlag())
-               log.Error("FindInstances.GetWithProviderID failed", err)
+               log.Error(fmt.Sprintf("GetInstance.Get failed %s failed", 
findFlag), err)
                return &pb.GetOneInstanceResponse{
-                       Response: pb.CreateResponse(pb.ErrInstanceNotExists, 
mes.Error()),
+                       Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
+               }, err
+       }
+       if services == nil {
+               mes := fmt.Errorf("%s failed, provider does not exist", 
findFlag)
+               log.Error("GetInstance.Get failed", mes)
+               return &pb.GetOneInstanceResponse{
+                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
mes.Error()),
                }, nil
        }
-       var instance Instance
-       err = findOneRes.Decode(&instance)
-       if err != nil {
-               log.Error(fmt.Sprintf("FindInstances.GetWithProviderID failed 
%s failed", findFlag()), err)
+       serviceIDs := filterServiceIDs(ctx, request.ConsumerServiceId, 
request.Tags, services)
+       if len(serviceIDs) == 0 {
+               mes := fmt.Errorf("%s failed, provider instance does not 
exist", findFlag)
+               log.Error("GetInstances.GetWithProviderID failed", mes)
                return &pb.GetOneInstanceResponse{
-                       Response: pb.CreateResponse(pb.ErrInternal, 
err.Error()),
-               }, err
+                       Response: pb.CreateResponse(pb.ErrServiceNotExists, 
mes.Error()),
+               }, nil
+       }
+       instances, err := findInstancesByServiceIDs(ctx, serviceIDs)
+       if len(instances) == 0 {
+               mes := fmt.Errorf("%s failed, provider instance does not 
exist", findFlag)

Review comment:
       `if services == nil || len(serviceIDs) == 0 {
                mes := fmt.Errorf("%s failed, provider does not exist", 
findFlag)
                log.Error("get instance failed", mes)
                return &discovery.GetOneInstanceResponse{
                        Response: 
discovery.CreateResponse(discovery.ErrServiceNotExists, mes.Error()),
                }, nil
        }`




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

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


Reply via email to