[ 
https://issues.apache.org/jira/browse/SCB-565?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16468838#comment-16468838
 ] 

ASF GitHub Bot commented on SCB-565:
------------------------------------

asifdxtreme closed pull request #346: SCB-565 Register instance with the same 
id will create redundant endpoint index data
URL: https://github.com/apache/incubator-servicecomb-service-center/pull/346
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/server/service/instances.go b/server/service/instances.go
index 0e6e03ab..e65bcb41 100644
--- a/server/service/instances.go
+++ b/server/service/instances.go
@@ -106,7 +106,7 @@ func (s *InstanceService) Register(ctx context.Context, in 
*pb.RegisterInstanceR
        }
        //允许自定义id
        //如果没填写 并且endpoints沒重復,則产生新的全局instance id
-       oldInstanceId, checkErr := serviceUtil.CheckEndPoints(ctx, in.Instance)
+       oldInstanceId, checkErr := serviceUtil.InstanceExist(ctx, in.Instance)
        if checkErr != nil {
                util.Logger().Errorf(checkErr, "check endpoints index failed, 
service %s, operator %s.",
                        instanceFlag, remoteIP)
@@ -232,7 +232,7 @@ func (s *InstanceService) Unregister(ctx context.Context, 
in *pb.UnregisterInsta
 
        instanceFlag := util.StringJoin([]string{serviceId, instanceId}, "/")
        remoteIP := util.GetIPFromContext(ctx)
-       isExist, err := serviceUtil.InstanceExist(ctx, domainProject, 
serviceId, instanceId)
+       isExist, err := serviceUtil.InstanceExistById(ctx, domainProject, 
serviceId, instanceId)
        if err != nil {
                util.Logger().Errorf(err, "unregister instance failed, instance 
%s, operator %s: query instance failed.", instanceFlag, remoteIP)
                return &pb.UnregisterInstanceResponse{
diff --git a/server/service/util/instance_util.go 
b/server/service/util/instance_util.go
index c45845d7..a6a0b8b8 100644
--- a/server/service/util/instance_util.go
+++ b/server/service/util/instance_util.go
@@ -103,7 +103,7 @@ func GetInstanceCountOfOneService(ctx context.Context, 
domainProject string, ser
        return resp.Count, nil
 }
 
-func InstanceExist(ctx context.Context, domainProject string, serviceId 
string, instanceId string) (bool, error) {
+func InstanceExistById(ctx context.Context, domainProject string, serviceId 
string, instanceId string) (bool, error) {
        opts := append(FromContext(ctx),
                registry.WithStrKey(apt.GenerateInstanceKey(domainProject, 
serviceId, instanceId)),
                registry.WithCountOnly())
@@ -117,8 +117,20 @@ func InstanceExist(ctx context.Context, domainProject 
string, serviceId string,
        return true, nil
 }
 
-func CheckEndPoints(ctx context.Context, instance *pb.MicroServiceInstance) 
(string, *scerr.Error) {
+func InstanceExist(ctx context.Context, instance *pb.MicroServiceInstance) 
(string, *scerr.Error) {
        domainProject := util.ParseDomainProject(ctx)
+       // check id index
+       if len(instance.InstanceId) > 0 {
+               exist, err := InstanceExistById(ctx, domainProject, 
instance.ServiceId, instance.InstanceId)
+               if err != nil {
+                       return "", scerr.NewError(scerr.ErrInternal, 
err.Error())
+               }
+               if exist {
+                       return instance.InstanceId, nil
+               }
+       }
+
+       // check endpoint index
        resp, err := store.Store().Endpoints().Search(ctx,
                
registry.WithStrKey(apt.GenerateEndpointsIndexKey(domainProject, instance)))
        if err != nil {
diff --git a/server/service/util/instance_util_test.go 
b/server/service/util/instance_util_test.go
index 3293f39b..3e30ea67 100644
--- a/server/service/util/instance_util_test.go
+++ b/server/service/util/instance_util_test.go
@@ -65,24 +65,31 @@ func TestGetInstance(t *testing.T) {
        }
 }
 
-func TestInstanceExist(t *testing.T) {
-       _, err := InstanceExist(util.SetContext(context.Background(), 
"cacheOnly", "1"), "", "", "")
+func TestInstanceExistById(t *testing.T) {
+       _, err := InstanceExistById(util.SetContext(context.Background(), 
"cacheOnly", "1"), "", "", "")
        if err != nil {
-               t.Fatalf(`InstanceExist WithCacheOnly failed`)
+               t.Fatalf(`InstanceExistById WithCacheOnly failed`)
        }
 
-       _, err = InstanceExist(context.Background(), "", "", "")
+       _, err = InstanceExistById(context.Background(), "", "", "")
        if err == nil {
-               t.Fatalf(`InstanceExist failed`)
+               t.Fatalf(`InstanceExistById failed`)
        }
 }
 
-func TestCheckEndPoints(t *testing.T) {
-       _, err := CheckEndPoints(context.Background(), 
&proto.MicroServiceInstance{
+func TestInstanceExist(t *testing.T) {
+       _, err := InstanceExist(context.Background(), 
&proto.MicroServiceInstance{
                ServiceId: "a",
        })
        if err == nil {
-               t.Fatalf(`CheckEndPoints failed`)
+               t.Fatalf(`InstanceExist endpoint failed`)
+       }
+       _, err = InstanceExist(context.Background(), 
&proto.MicroServiceInstance{
+               ServiceId:  "a",
+               InstanceId: "a",
+       })
+       if err == nil {
+               t.Fatalf(`InstanceExist instanceId failed`)
        }
 }
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Register instance with the same id will create redundant endpoint index data
> ----------------------------------------------------------------------------
>
>                 Key: SCB-565
>                 URL: https://issues.apache.org/jira/browse/SCB-565
>             Project: Apache ServiceComb
>          Issue Type: Bug
>          Components: Service-Center
>            Reporter: little-cui
>            Assignee: little-cui
>            Priority: Major
>             Fix For: service-center-1.0.0-m2
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to