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 e583c4b  [SCB-2094] cache heartbeat mode in mongo (#872)
e583c4b is described below

commit e583c4b5e68c4cb56d96248c0af6926aae39f6c4
Author: robotLJW <[email protected]>
AuthorDate: Thu Feb 25 15:25:47 2021 +0800

    [SCB-2094] cache heartbeat mode in mongo (#872)
    
    1. [Bugfix] the heartbeat interface is called after the registration 
instance is successful
---
 datasource/mongo/ms.go | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index eb9cad3..a2732ac 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -1546,6 +1546,13 @@ func (ds *DataSource) RegisterInstance(ctx 
context.Context, request *discovery.R
                        }, nil
                case discovery.ErrInstanceNotExists:
                        // register a new one
+                       if request.Instance.HealthCheck == nil {
+                               request.Instance.HealthCheck = 
&discovery.HealthCheck{
+                                       Mode:     discovery.CHECK_BY_HEARTBEAT,
+                                       Interval: 
apt.RegistryDefaultLeaseRenewalinterval,
+                                       Times:    
apt.RegistryDefaultLeaseRetrytimes,
+                               }
+                       }
                        return registryInstance(ctx, request)
                default:
                        log.Error(fmt.Sprintf("register instance failed, reuse 
instance %s %s, operator %s",
@@ -2082,6 +2089,17 @@ func registryInstance(ctx context.Context, request 
*discovery.RegisterInstanceRe
 
        log.Info(fmt.Sprintf("register instance %s, instanceID %s, operator %s",
                instanceFlag, insertRes.InsertedID, remoteIP))
+       heartbeatRequest := discovery.HeartbeatRequest{
+               ServiceId:  instance.ServiceId,
+               InstanceId: instance.InstanceId,
+       }
+       aliveErr := KeepAliveLease(ctx, &heartbeatRequest)
+       if aliveErr != nil {
+               log.Error(fmt.Sprintf("failed to send heartbeat after 
registering instance, instance %s operator %s", instanceFlag, remoteIP), err)
+               return &discovery.RegisterInstanceResponse{
+                       Response: discovery.CreateResponseWithSCErr(aliveErr),
+               }, err
+       }
        return &discovery.RegisterInstanceResponse{
                Response:   discovery.CreateResponse(discovery.ResponseSuccess, 
"Register service instance successfully."),
                InstanceId: instanceID,

Reply via email to