This is an automated email from the ASF dual-hosted git repository.

tianxiaoliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git


The following commit(s) were added to refs/heads/master by this push:
     new 769aca3  Fix: Can not discovery instances by service alias (#1086)
769aca3 is described below

commit 769aca39da69f9a0627ae1daa9b6c6731583b2c4
Author: little-cui <[email protected]>
AuthorDate: Wed Jul 7 14:30:53 2021 +0800

    Fix: Can not discovery instances by service alias (#1086)
---
 datasource/mongo/ms.go                           | 14 +++--
 datasource/mongo/util/db.go                      | 10 ++++
 integration/instances_test.go                    | 22 +++++++
 server/rest/controller/v4/instance_controller.go |  4 +-
 server/service/disco/instance_test.go            | 73 +++++++++++++++++++-----
 5 files changed, 103 insertions(+), 20 deletions(-)

diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index 235452b..9b83349 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -2506,11 +2506,14 @@ func servicesBasicFilter(ctx context.Context, key 
*discovery.MicroServiceKey) ([
        if len(tenant) != 2 {
                return nil, errors.New("invalid 'domain' or 'project'")
        }
+       serviceNameOption := mutil.ServiceServiceName(key.ServiceName)
+       if len(key.Alias) > 0 {
+               serviceNameOption = mutil.Or(serviceNameOption, 
mutil.ServiceAlias(key.Alias))
+       }
        filter := mutil.NewDomainProjectFilter(tenant[0], tenant[1],
                mutil.ServiceEnv(key.Environment),
                mutil.ServiceAppID(key.AppId),
-               mutil.ServiceServiceName(key.ServiceName),
-               mutil.ServiceAlias(key.Alias),
+               serviceNameOption,
        )
        rangeIdx := strings.Index(key.Version, "-")
        // if the version number is clear, need to add the version number to 
query
@@ -2533,11 +2536,14 @@ func filterServices(ctx context.Context, key 
*discovery.MicroServiceKey) ([]*mod
                return nil, errors.New("invalid 'domain' or 'project'")
        }
        rangeIdx := strings.Index(key.Version, "-")
+       serviceNameOption := mutil.ServiceServiceName(key.ServiceName)
+       if len(key.Alias) > 0 {
+               serviceNameOption = mutil.Or(serviceNameOption, 
mutil.ServiceAlias(key.Alias))
+       }
        filter := mutil.NewDomainProjectFilter(tenant[0], tenant[1],
                mutil.ServiceEnv(key.Environment),
                mutil.ServiceAppID(key.AppId),
-               mutil.ServiceServiceName(key.ServiceName),
-               mutil.ServiceAlias(key.Alias),
+               serviceNameOption,
        )
        switch {
        case key.Version == "latest":
diff --git a/datasource/mongo/util/db.go b/datasource/mongo/util/db.go
index 0ebb40f..ad70e29 100644
--- a/datasource/mongo/util/db.go
+++ b/datasource/mongo/util/db.go
@@ -146,6 +146,16 @@ func Nor(options ...Option) Option {
        }
 }
 
+func Or(options ...Option) Option {
+       return func(filter bson.M) {
+               var conditions bson.A
+               for _, option := range options {
+                       conditions = append(conditions, NewFilter(option))
+               }
+               filter["$or"] = conditions
+       }
+}
+
 func NewFilter(options ...Option) bson.M {
        filter := bson.M{}
        for _, option := range options {
diff --git a/integration/instances_test.go b/integration/instances_test.go
index 28634ab..5467247 100644
--- a/integration/instances_test.go
+++ b/integration/instances_test.go
@@ -47,13 +47,16 @@ var _ = Describe("MicroService Api Test", func() {
        var serviceAppId = "integrationtestAppIdInstance"
        var serviceVersion = "0.0.2"
        var serviceInstanceID = ""
+       var alias = ""
        Context("Tesing MicroService Instances API's", func() {
                BeforeEach(func() {
                        schema := []string{"testSchema"}
                        properties := map[string]string{"attr1": "aa"}
                        serviceName = strconv.Itoa(rand.Intn(15))
+                       alias = serviceAppId + ":" + serviceName
                        servicemap := map[string]interface{}{
                                "serviceName": serviceName,
+                               "alias":       alias,
                                "appId":       serviceAppId,
                                "version":     serviceVersion,
                                "description": "examples",
@@ -283,6 +286,25 @@ var _ = Describe("MicroService Api Test", func() {
                                
Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))
                        })
 
+                       It("Find Micro-service Info by alias", func() {
+                               req, _ := http.NewRequest(GET, 
SCURL+FINDINSTANCE+"?appId="+serviceAppId+"&serviceName="+alias+"&version="+serviceVersion,
 nil)
+                               req.Header.Set("X-Domain-Name", "default")
+                               req.Header.Set("X-ConsumerId", serviceId)
+                               resp, _ := scclient.Do(req)
+                               respbody, _ := ioutil.ReadAll(resp.Body)
+                               Expect(resp.StatusCode).To(Equal(http.StatusOK))
+                               servicesStruct := 
map[string][]map[string]interface{}{}
+                               json.Unmarshal(respbody, &servicesStruct)
+                               foundMicroServiceInstance := false
+                               for _, services := range 
servicesStruct["instances"] {
+                                       if services["instanceId"] == 
serviceInstanceID {
+                                               foundMicroServiceInstance = true
+                                               break
+                                       }
+                               }
+                               
Expect(foundMicroServiceInstance).To(Equal(true))
+                       })
+
                        It("Find Micro-Service Instance by ServiceID", func() {
                                url := strings.Replace(GETINSTANCE, 
":serviceId", serviceId, 1)
                                req, _ := http.NewRequest(GET, SCURL+url, nil)
diff --git a/server/rest/controller/v4/instance_controller.go 
b/server/rest/controller/v4/instance_controller.go
index 91aa894..999cb5e 100644
--- a/server/rest/controller/v4/instance_controller.go
+++ b/server/rest/controller/v4/instance_controller.go
@@ -125,10 +125,12 @@ func (s *MicroServiceInstanceService) FindInstances(w 
http.ResponseWriter, r *ht
        if len(keys) > 0 {
                ids = strings.Split(keys, ",")
        }
+       serviceName := query.Get("serviceName")
        request := &pb.FindInstancesRequest{
                ConsumerServiceId: r.Header.Get("X-ConsumerId"),
                AppId:             query.Get("appId"),
-               ServiceName:       query.Get("serviceName"),
+               ServiceName:       serviceName,
+               Alias:             serviceName,
                VersionRule:       query.Get("version"),
                Environment:       query.Get("env"),
                Tags:              ids,
diff --git a/server/service/disco/instance_test.go 
b/server/service/disco/instance_test.go
index d5a787a..bb19355 100644
--- a/server/service/disco/instance_test.go
+++ b/server/service/disco/instance_test.go
@@ -819,21 +819,23 @@ var _ = Describe("'Instance' service", func() {
 
        Describe("execute 'query' operartion", func() {
                var (
-                       serviceId1  string
-                       serviceId2  string
-                       serviceId3  string
-                       serviceId4  string
-                       serviceId5  string
-                       serviceId6  string
-                       serviceId7  string
-                       serviceId8  string
-                       serviceId9  string
-                       instanceId1 string
-                       instanceId2 string
-                       instanceId4 string
-                       instanceId5 string
-                       instanceId8 string
-                       instanceId9 string
+                       serviceId1   string
+                       serviceId2   string
+                       serviceId3   string
+                       serviceId4   string
+                       serviceId5   string
+                       serviceId6   string
+                       serviceId7   string
+                       serviceId8   string
+                       serviceId9   string
+                       serviceId10  string
+                       instanceId1  string
+                       instanceId2  string
+                       instanceId4  string
+                       instanceId5  string
+                       instanceId8  string
+                       instanceId9  string
+                       instanceId10 string
                )
 
                It("should be passed", func() {
@@ -961,6 +963,20 @@ var _ = Describe("'Instance' service", func() {
                        
Expect(respCreate.Response.GetCode()).To(Equal(pb.ResponseSuccess))
                        serviceId9 = respCreate.ServiceId
 
+                       respCreate, err = serviceResource.Create(getContext(), 
&pb.CreateServiceRequest{
+                               Service: &pb.MicroService{
+                                       AppId:       "query_instance_alias",
+                                       ServiceName: "query_instance_alias",
+                                       Alias:       
"query_instance_alias:query_instance_alias",
+                                       Version:     "1.0.0",
+                                       Level:       "FRONT",
+                                       Status:      pb.MS_UP,
+                               },
+                       })
+                       Expect(err).To(BeNil())
+                       
Expect(respCreate.Response.GetCode()).To(Equal(pb.ResponseSuccess))
+                       serviceId10 = respCreate.ServiceId
+
                        resp, err := discosvc.RegisterInstance(getContext(), 
&pb.RegisterInstanceRequest{
                                Instance: &pb.MicroServiceInstance{
                                        ServiceId: serviceId1,
@@ -1044,6 +1060,20 @@ var _ = Describe("'Instance' service", func() {
                        Expect(err).To(BeNil())
                        
Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
                        instanceId9 = resp.InstanceId
+
+                       resp, err = discosvc.RegisterInstance(getContext(), 
&pb.RegisterInstanceRequest{
+                               Instance: &pb.MicroServiceInstance{
+                                       ServiceId: serviceId10,
+                                       HostName:  "UT-HOST",
+                                       Endpoints: []string{
+                                               "find:127.0.0.9:8080",
+                                       },
+                                       Status: pb.MSI_UP,
+                               },
+                       })
+                       Expect(err).To(BeNil())
+                       
Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
+                       instanceId10 = resp.InstanceId
                })
 
                Context("when query invalid parameters", func() {
@@ -1668,6 +1698,19 @@ var _ = Describe("'Instance' service", func() {
                                Expect(len(respGetC.Providers)).To(Equal(0))
 
                                core.Service.Environment = pb.ENV_DEV
+
+                               By("find with alias")
+                               respFind, err = 
discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
+                                       ConsumerServiceId: serviceId10,
+                                       AppId:             
"query_instance_alias",
+                                       ServiceName:       
"query_instance_alias:query_instance_alias",
+                                       Alias:             
"query_instance_alias:query_instance_alias",
+                                       VersionRule:       "0.0.0.0+",
+                               })
+                               Expect(err).To(BeNil())
+                               
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
+                               Expect(len(respFind.Instances)).To(Equal(1))
+                               
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId10))
                        })
                })
 

Reply via email to