tianxiaoliang commented on a change in pull request #759:
URL: 
https://github.com/apache/servicecomb-service-center/pull/759#discussion_r533344235



##########
File path: datasource/mongo/engine.go
##########
@@ -22,17 +22,114 @@ import (
        "time"
 
        "github.com/apache/servicecomb-service-center/pkg/cluster"
+
+       "fmt"
+       "strconv"
+       "strings"
+
+       "github.com/apache/servicecomb-service-center/datasource"
+       "github.com/apache/servicecomb-service-center/datasource/etcd/path"
+       "github.com/apache/servicecomb-service-center/datasource/mongo/client"
+       "github.com/apache/servicecomb-service-center/pkg/log"
+       "github.com/apache/servicecomb-service-center/pkg/util"
+       "github.com/apache/servicecomb-service-center/server/core"
+       "github.com/apache/servicecomb-service-center/server/metrics"
+       pb "github.com/go-chassis/cari/discovery"
+       "go.mongodb.org/mongo-driver/bson"
 )
 
 func (ds *DataSource) SelfRegister(ctx context.Context) error {
-       return nil
+       err := ds.registryService(ctx)
+       if err != nil {
+               return err
+       }
+
+       // 实例信息
+       err = ds.registryInstance(ctx)
+
+       // wait heartbeat
+       ds.autoSelfHeartBeat()
+
+       metrics.ReportScInstance()
+       return err
 }
 func (ds *DataSource) SelfUnregister(ctx context.Context) error {
+       if len(core.Instance.InstanceId) == 0 {
+               return nil
+       }
+
+       ctx = core.AddDefaultContextValue(ctx)
+       respI, err := datasource.Instance().UnregisterInstance(ctx, 
core.UnregisterInstanceRequest())
+       if err != nil {
+               log.Error("unregister failed", err)
+               return err
+       }
+       if respI.Response.GetCode() != pb.ResponseSuccess {
+               err = fmt.Errorf("unregister service center instance[%s/%s] 
failed, %s",
+                       core.Instance.ServiceId, core.Instance.InstanceId, 
respI.Response.GetMessage())
+               log.Error(err.Error(), nil)
+               return err
+       }
+       log.Warn(fmt.Sprintf("unregister service center instance[%s/%s]",
+               core.Service.ServiceId, core.Instance.InstanceId))
        return nil
 }
 
 // OPS
 func (ds *DataSource) ClearNoInstanceServices(ctx context.Context, ttl 
time.Duration) error {
+       services, err := GetAllServicesAcrossDomainProject(ctx)
+       if err != nil {
+               return err
+       }
+       if len(services) == 0 {
+               log.Info("no service found, no need to clear")
+               return nil
+       }
+
+       timeLimit := time.Now().Add(0 - ttl)
+       log.Info(fmt.Sprintf("clear no-instance services created before %s", 
timeLimit))
+       timeLimitStamp := strconv.FormatInt(timeLimit.Unix(), 10)
+
+       for domainProject, svcList := range services {
+               if len(svcList) == 0 {
+                       continue
+               }
+               ctx, err := ctxFromDomainProject(ctx, domainProject)
+               if err != nil {
+                       log.Error("get domain project context failed", err)
+                       continue
+               }
+               for _, svc := range svcList {
+                       if svc == nil {
+                               continue
+                       }
+                       ok, err := shouldClear(ctx, timeLimitStamp, svc)
+                       if err != nil {
+                               log.Error("check service clear necessity 
failed", err)
+                               continue
+                       }
+                       if !ok {
+                               continue
+                       }
+                       svcCtxStr := "domainProject: " + domainProject + ", " +

Review comment:
       这个字符串也该复用




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