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 d198992  SCB-2094 Bug fixes (#764)
d198992 is described below

commit d19899224b8103862dbc650e14639cc7ef881264
Author: little-cui <[email protected]>
AuthorDate: Sat Nov 28 08:55:00 2020 +0800

    SCB-2094 Bug fixes (#764)
    
    * SCB-2094 Bug fixes
    
    * SCB-2094 Bug fixes
    
    * SCB-2094 Bug fixes
---
 datasource/etcd/cache/filter_consistency.go       |  3 +-
 datasource/etcd/engine.go                         | 85 ++++++++++++-----------
 datasource/etcd/engine_test.go                    |  4 +-
 datasource/etcd/etcd_suite_test.go                |  8 +--
 datasource/etcd/event/dependency_event_handler.go |  4 +-
 datasource/etcd/event/instance_event_handler.go   |  4 +-
 datasource/etcd/event/rule_event_handler.go       |  4 +-
 datasource/etcd/event/tag_event_handler.go        |  4 +-
 datasource/etcd/ms.go                             | 12 ++--
 datasource/etcd/ms_test.go                        | 10 +--
 datasource/etcd/util/dependency_util.go           |  2 +-
 datasource/etcd/util/domain_util.go               |  2 +-
 datasource/etcd/util/instance_util_test.go        | 12 ++--
 datasource/etcd/util/microservice_util.go         |  6 +-
 datasource/etcd/util/rule_util.go                 |  4 +-
 datasource/etcd/util/rule_util_test.go            |  2 +-
 datasource/etcd/util/util_suite_test.go           |  6 +-
 datasource/mongo/mongo_suite_test.go              |  4 +-
 pkg/util/context.go                               | 20 ++++++
 server/api.go                                     |  3 +
 server/broker/service_test.go                     |  6 +-
 server/core/microservice.go                       |  8 +--
 server/rest/admin/service_test.go                 |  4 +-
 server/rest/govern/govern_suite_test.go           |  4 +-
 server/rest/govern/service.go                     |  5 +-
 server/service/instance_test.go                   |  4 +-
 server/service/service_suite_test.go              |  4 +-
 27 files changed, 116 insertions(+), 118 deletions(-)

diff --git a/datasource/etcd/cache/filter_consistency.go 
b/datasource/etcd/cache/filter_consistency.go
index 3987f9c..b7d1987 100644
--- a/datasource/etcd/cache/filter_consistency.go
+++ b/datasource/etcd/cache/filter_consistency.go
@@ -63,8 +63,7 @@ func (f *ConsistencyFilter) Init(ctx context.Context, parent 
*cache.Node) (node
                return
        }
 
-       cloneCtx := util.CloneContext(ctx)
-       cloneCtx = util.SetContext(cloneCtx, util.CtxNocache, "1")
+       cloneCtx := util.WithNoCache(util.CloneContext(ctx))
        insts, _, err := f.Find(cloneCtx, parent)
        if err != nil {
                pCache.InitBrokenQueue()
diff --git a/datasource/etcd/engine.go b/datasource/etcd/engine.go
index 426543c..685a04b 100644
--- a/datasource/etcd/engine.go
+++ b/datasource/etcd/engine.go
@@ -24,7 +24,6 @@ import (
        "github.com/apache/servicecomb-service-center/datasource/etcd/path"
        "github.com/apache/servicecomb-service-center/pkg/cluster"
        "github.com/apache/servicecomb-service-center/pkg/gopool"
-       "github.com/apache/servicecomb-service-center/server/metrics"
        "strconv"
        "strings"
        "time"
@@ -37,20 +36,25 @@ import (
 )
 
 func (ds *DataSource) SelfRegister(ctx context.Context) error {
-       err := ds.registryService(ctx)
+       err := ds.selfRegister(ctx)
        if err != nil {
                return err
        }
-       // 实例信息
-       err = ds.registryInstance(ctx)
        // start send heart beat job
        ds.autoSelfHeartBeat()
-       // report the metrics
-       metrics.ReportScInstance()
-       return err
+       return nil
+}
+
+func (ds *DataSource) selfRegister(ctx context.Context) error {
+       err := ds.registerService(ctx)
+       if err != nil {
+               return err
+       }
+       // 实例信息
+       return ds.registerInstance(ctx)
 }
 
-func (ds *DataSource) registryService(pCtx context.Context) error {
+func (ds *DataSource) registerService(pCtx context.Context) error {
        ctx := core.AddDefaultContextValue(pCtx)
        respE, err := core.ServiceAPI.Exist(ctx, core.GetExistenceRequest())
        if err != nil {
@@ -78,7 +82,7 @@ func (ds *DataSource) registryService(pCtx context.Context) 
error {
        return nil
 }
 
-func (ds *DataSource) registryInstance(pCtx context.Context) error {
+func (ds *DataSource) registerInstance(pCtx context.Context) error {
        core.Instance.InstanceId = ""
        core.Instance.ServiceId = core.Service.ServiceId
 
@@ -101,32 +105,11 @@ func (ds *DataSource) registryInstance(pCtx 
context.Context) error {
        return nil
 }
 
-func (ds *DataSource) SelfUnregister(pCtx context.Context) error {
-       if len(core.Instance.InstanceId) == 0 {
-               return nil
-       }
-       ctx := core.AddDefaultContextValue(pCtx)
-       respI, err := core.InstanceAPI.Unregister(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.Warnf("unregister service center instance[%s/%s]",
-               core.Service.ServiceId, core.Instance.InstanceId)
-       return nil
-}
-
 func (ds *DataSource) selfHeartBeat(pCtx context.Context) error {
        ctx := core.AddDefaultContextValue(pCtx)
        respI, err := core.InstanceAPI.Heartbeat(ctx, core.HeartbeatRequest())
        if err != nil {
-               log.Error("sen heartbeat failed", err)
+               log.Error("send heartbeat failed", err)
                return err
        }
        if respI.Response.GetCode() == pb.ResponseSuccess {
@@ -134,15 +117,9 @@ func (ds *DataSource) selfHeartBeat(pCtx context.Context) 
error {
                        core.Instance.ServiceId, core.Instance.InstanceId)
                return nil
        }
+       err = fmt.Errorf(respI.Response.GetMessage())
        log.Errorf(err, "update service center instance[%s/%s] heartbeat 
failed",
                core.Instance.ServiceId, core.Instance.InstanceId)
-
-       //服务不存在,创建服务
-       err = ds.SelfRegister(pCtx)
-       if err != nil {
-               log.Errorf(err, "retry to register[%s/%s/%s/%s] failed",
-                       core.Service.Environment, core.Service.AppId, 
core.Service.ServiceName, core.Service.Version)
-       }
        return err
 }
 
@@ -153,12 +130,42 @@ func (ds *DataSource) autoSelfHeartBeat() {
                        case <-ctx.Done():
                                return
                        case 
<-time.After(time.Duration(core.Instance.HealthCheck.Interval) * time.Second):
-                               _ = ds.selfHeartBeat(ctx)
+                               err := ds.selfHeartBeat(ctx)
+                               if err == nil {
+                                       continue
+                               }
+                               //服务不存在,创建服务
+                               err = ds.selfRegister(ctx)
+                               if err != nil {
+                                       log.Errorf(err, "retry to 
register[%s/%s/%s/%s] failed",
+                                               core.Service.Environment, 
core.Service.AppId, core.Service.ServiceName, core.Service.Version)
+                               }
                        }
                }
        })
 }
 
+func (ds *DataSource) SelfUnregister(pCtx context.Context) error {
+       if len(core.Instance.InstanceId) == 0 {
+               return nil
+       }
+       ctx := core.AddDefaultContextValue(pCtx)
+       respI, err := core.InstanceAPI.Unregister(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.Warnf("unregister service center instance[%s/%s]",
+               core.Service.ServiceId, core.Instance.InstanceId)
+       return nil
+}
+
 // ClearNoInstanceService clears services which have no instance
 func (ds *DataSource) ClearNoInstanceServices(ctx context.Context, serviceTTL 
time.Duration) error {
        services, err := serviceUtil.GetAllServicesAcrossDomainProject(ctx)
diff --git a/datasource/etcd/engine_test.go b/datasource/etcd/engine_test.go
index eaf9218..e5142f0 100644
--- a/datasource/etcd/engine_test.go
+++ b/datasource/etcd/engine_test.go
@@ -42,9 +42,7 @@ type serviceCleanInfo struct {
 }
 
 func getContextWith(domain string, project string) context.Context {
-       return util.SetContext(
-               util.SetDomainProject(context.Background(), domain, project),
-               util.CtxNocache, "1")
+       return util.WithNoCache(util.SetDomainProject(context.Background(), 
domain, project))
 }
 
 func createService(domain string, project string, name string, withInstance 
bool, shouldClear bool) {
diff --git a/datasource/etcd/etcd_suite_test.go 
b/datasource/etcd/etcd_suite_test.go
index 24f0f64..0c1ac71 100644
--- a/datasource/etcd/etcd_suite_test.go
+++ b/datasource/etcd/etcd_suite_test.go
@@ -38,15 +38,11 @@ var _ = BeforeSuite(func() {
 })
 
 func getContext() context.Context {
-       return util.SetContext(
-               util.SetDomainProject(context.Background(), "default", 
"default"),
-               util.CtxNocache, "1")
+       return util.WithNoCache(util.SetDomainProject(context.Background(), 
"default", "default"))
 }
 
 func depGetContext() context.Context {
-       return util.SetContext(
-               util.SetDomainProject(context.Background(), "new_default", 
"new_default"),
-               util.CtxNocache, "1")
+       return util.WithNoCache(util.SetDomainProject(context.Background(), 
"new_default", "new_default"))
 }
 
 func TestEtcd(t *testing.T) {
diff --git a/datasource/etcd/event/dependency_event_handler.go 
b/datasource/etcd/event/dependency_event_handler.go
index bc1d0bb..c204845 100644
--- a/datasource/etcd/event/dependency_event_handler.go
+++ b/datasource/etcd/event/dependency_event_handler.go
@@ -174,7 +174,7 @@ func (h *DependencyEventHandler) Handle() error {
 }
 
 func (h *DependencyEventHandler) dependencyRuleHandle(res interface{}) error {
-       ctx := context.WithValue(context.Background(), util.CtxGlobal, "1")
+       ctx := util.WithGlobal(context.Background())
        dependencyEventHandlerRes := res.(*DependencyEventHandlerResource)
        r := dependencyEventHandlerRes.dep
        consumerFlag := util.StringJoin([]string{r.Consumer.Environment, 
r.Consumer.AppId, r.Consumer.ServiceName, r.Consumer.Version}, "/")
@@ -223,7 +223,7 @@ func (h *DependencyEventHandler) removeKV(ctx 
context.Context, kv *sd.KeyValue)
 
 func (h *DependencyEventHandler) CleanUp(domainProjects map[string]struct{}) {
        for domainProject := range domainProjects {
-               ctx := context.WithValue(context.Background(), util.CtxGlobal, 
"1")
+               ctx := util.WithGlobal(context.Background())
                if err := serviceUtil.CleanUpDependencyRules(ctx, 
domainProject); err != nil {
                        log.Errorf(err, "clean up '%s' dependency rules 
failed", domainProject)
                }
diff --git a/datasource/etcd/event/instance_event_handler.go 
b/datasource/etcd/event/instance_event_handler.go
index 381cdb2..1990687 100644
--- a/datasource/etcd/event/instance_event_handler.go
+++ b/datasource/etcd/event/instance_event_handler.go
@@ -90,9 +90,7 @@ func (h *InstanceEventHandler) OnEvent(evt sd.KvEvent) {
        }
 
        // 查询服务版本信息
-       ctx := context.WithValue(context.WithValue(context.Background(),
-               util.CtxCacheOnly, "1"),
-               util.CtxGlobal, "1")
+       ctx := util.WithGlobal(util.WithCacheOnly(context.Background()))
        ms, err := serviceUtil.GetService(ctx, domainProject, providerID)
        if ms == nil {
                log.Errorf(err, "caught [%s] instance[%s/%s] event, endpoints 
%v, get cached provider's file failed",
diff --git a/datasource/etcd/event/rule_event_handler.go 
b/datasource/etcd/event/rule_event_handler.go
index 397b21b..f5c3a55 100644
--- a/datasource/etcd/event/rule_event_handler.go
+++ b/datasource/etcd/event/rule_event_handler.go
@@ -55,9 +55,7 @@ func (apt *RulesChangedTask) Err() error {
 }
 
 func (apt *RulesChangedTask) publish(ctx context.Context, domainProject, 
providerID string) error {
-       ctx = context.WithValue(context.WithValue(ctx,
-               util.CtxCacheOnly, "1"),
-               util.CtxGlobal, "1")
+       ctx = util.WithGlobal(util.WithCacheOnly(ctx))
 
        provider, err := serviceUtil.GetService(ctx, domainProject, providerID)
        if err != nil {
diff --git a/datasource/etcd/event/tag_event_handler.go 
b/datasource/etcd/event/tag_event_handler.go
index 957c20e..d406dd9 100644
--- a/datasource/etcd/event/tag_event_handler.go
+++ b/datasource/etcd/event/tag_event_handler.go
@@ -56,9 +56,7 @@ func (apt *TagsChangedTask) Err() error {
 }
 
 func (apt *TagsChangedTask) publish(ctx context.Context, domainProject, 
consumerID string) error {
-       ctx = context.WithValue(context.WithValue(ctx,
-               util.CtxCacheOnly, "1"),
-               util.CtxGlobal, "1")
+       ctx = util.WithGlobal(util.WithCacheOnly(ctx))
 
        consumer, err := serviceUtil.GetService(ctx, domainProject, consumerID)
        if err != nil {
diff --git a/datasource/etcd/ms.go b/datasource/etcd/ms.go
index 6c7bc56..76b40d8 100644
--- a/datasource/etcd/ms.go
+++ b/datasource/etcd/ms.go
@@ -268,7 +268,7 @@ func (ds *DataSource) GetServiceDetail(ctx context.Context, 
request *pb.GetServi
 
 func (ds *DataSource) GetServicesInfo(ctx context.Context, request 
*pb.GetServicesInfoRequest) (
        *pb.GetServicesInfoResponse, error) {
-       ctx = util.SetContext(ctx, util.CtxCacheOnly, "1")
+       ctx = util.WithCacheOnly(ctx)
 
        optionMap := make(map[string]struct{}, len(request.Options))
        for _, opt := range request.Options {
@@ -737,7 +737,7 @@ func (ds *DataSource) GetInstance(ctx context.Context, 
request *pb.GetOneInstanc
        if rev == item.Rev {
                instance = nil // for gRPC
        }
-       _ = util.SetContext(ctx, util.CtxResponseRevision, item.Rev)
+       _ = util.WithResponseRev(ctx, item.Rev)
 
        return &pb.GetOneInstanceResponse{
                Response: pb.CreateResponse(pb.ResponseSuccess, "Get instance 
successfully."),
@@ -817,7 +817,7 @@ func (ds *DataSource) GetInstances(ctx context.Context, 
request *pb.GetInstances
        if rev == item.Rev {
                instances = nil // for gRPC
        }
-       _ = util.SetContext(ctx, util.CtxResponseRevision, item.Rev)
+       _ = util.WithResponseRev(ctx, item.Rev)
 
        return &pb.GetInstancesResponse{
                Response:  pb.CreateResponse(pb.ResponseSuccess, "Query service 
instances successfully."),
@@ -1022,7 +1022,7 @@ func (ds *DataSource) genFindResult(ctx context.Context, 
oldRev string, item *ca
                instances = nil // for gRPC
        }
        // TODO support gRPC output context
-       _ = util.SetContext(ctx, util.CtxResponseRevision, item.Rev)
+       _ = util.WithResponseRev(ctx, item.Rev)
        return &pb.FindInstancesResponse{
                Response:  pb.CreateResponse(pb.ResponseSuccess, "Query service 
instances successfully."),
                Instances: instances,
@@ -1204,7 +1204,7 @@ func (ds *DataSource) batchFindServices(ctx 
context.Context, request *pb.BatchFi
        services := &pb.BatchFindResult{}
        failedResult := make(map[int32]*pb.FindFailedResult)
        for index, key := range request.Services {
-               findCtx := util.SetContext(cloneCtx, util.CtxRequestRevision, 
key.Rev)
+               findCtx := util.WithRequestRev(cloneCtx, key.Rev)
                resp, err := ds.FindInstances(findCtx, &pb.FindInstancesRequest{
                        ConsumerServiceId: request.ConsumerServiceId,
                        AppId:             key.Service.AppId,
@@ -1239,7 +1239,7 @@ func (ds *DataSource) batchFindInstances(ctx 
context.Context, request *pb.BatchF
        instances := &pb.BatchFindResult{}
        failedResult := make(map[int32]*pb.FindFailedResult)
        for index, key := range request.Instances {
-               getCtx := util.SetContext(cloneCtx, util.CtxRequestRevision, 
key.Rev)
+               getCtx := util.WithRequestRev(cloneCtx, key.Rev)
                resp, err := ds.GetInstance(getCtx, &pb.GetOneInstanceRequest{
                        ConsumerServiceId:  request.ConsumerServiceId,
                        ProviderServiceId:  key.Instance.ServiceId,
diff --git a/datasource/etcd/ms_test.go b/datasource/etcd/ms_test.go
index 80b0f5b..531b57d 100644
--- a/datasource/etcd/ms_test.go
+++ b/datasource/etcd/ms_test.go
@@ -1409,7 +1409,7 @@ func TestInstance_Query(t *testing.T) {
                assert.Equal(t, instanceId8, respFind.Instances[0].InstanceId)
                assert.NotEqual(t, 0, len(rev))
 
-               util.SetContext(ctx, util.CtxRequestRevision, "x")
+               util.WithRequestRev(ctx, "x")
                respFind, err = datasource.Instance().FindInstances(ctx, 
&pb.FindInstancesRequest{
                        ConsumerServiceId: serviceId8,
                        AppId:             "query_instance_ms",
@@ -1888,9 +1888,7 @@ func TestInstance_GetAll(t *testing.T) {
                        serviceId1 string
                        serviceId2 string
                )
-               ctx := util.SetContext(
-                       util.SetDomainProject(context.Background(), 
"TestInstance_GetAll", "1"),
-                       util.CtxNocache, "1")
+               ctx := 
util.WithNoCache(util.SetDomainProject(context.Background(), 
"TestInstance_GetAll", "1"))
                respCreateService, err := 
datasource.Instance().RegisterService(ctx, &pb.CreateServiceRequest{
                        Service: &pb.MicroService{
                                AppId:       "get_instance_ms",
@@ -1950,9 +1948,7 @@ func TestInstance_GetAll(t *testing.T) {
        })
 
        t.Run("domain contain no instances, get all instances should be pass, 
return 0 instance", func(t *testing.T) {
-               ctx := util.SetContext(
-                       util.SetDomainProject(context.Background(), 
"TestInstance_GetAll", "2"),
-                       util.CtxNocache, "1")
+               ctx := 
util.WithNoCache(util.SetDomainProject(context.Background(), 
"TestInstance_GetAll", "2"))
                respAll, err := datasource.Instance().GetAllInstances(ctx, 
&pb.GetAllInstancesRequest{})
                assert.NoError(t, err)
                assert.Equal(t, pb.ResponseSuccess, respAll.Response.GetCode())
diff --git a/datasource/etcd/util/dependency_util.go 
b/datasource/etcd/util/dependency_util.go
index d851f37..9e62924 100644
--- a/datasource/etcd/util/dependency_util.go
+++ b/datasource/etcd/util/dependency_util.go
@@ -96,7 +96,7 @@ func GetAllProviderIds(ctx context.Context, domainProject 
string, service *pb.Mi
        }
        allowIdx, denyIdx := 0, l
        providerIDs := make([]string, l)
-       copyCtx := util.SetContext(util.CloneContext(ctx), util.CtxCacheOnly, 
"1")
+       copyCtx := util.WithCacheOnly(util.CloneContext(ctx))
        for _, providerID := range providerIDsInCache {
                providerRules, err := GetRulesUtil(copyCtx, domainProject, 
providerID)
                if err != nil {
diff --git a/datasource/etcd/util/domain_util.go 
b/datasource/etcd/util/domain_util.go
index a8ec78a..5c0a06f 100644
--- a/datasource/etcd/util/domain_util.go
+++ b/datasource/etcd/util/domain_util.go
@@ -105,7 +105,7 @@ func ProjectExist(ctx context.Context, domain, project 
string) (bool, error) {
 }
 
 func NewDomainProject(ctx context.Context, domain, project string) error {
-       copyCtx := util.SetContext(util.CloneContext(ctx), util.CtxCacheOnly, 
"1")
+       copyCtx := util.WithCacheOnly(util.CloneContext(ctx))
        ok, err := DomainExist(copyCtx, domain)
        if !ok && err == nil {
                ok, err = AddDomain(ctx, domain)
diff --git a/datasource/etcd/util/instance_util_test.go 
b/datasource/etcd/util/instance_util_test.go
index 7ead196..35bef49 100644
--- a/datasource/etcd/util/instance_util_test.go
+++ b/datasource/etcd/util/instance_util_test.go
@@ -88,7 +88,7 @@ func TestGetInstanceCountOfOneService(t *testing.T) {
 }
 
 func TestUpdateInstance(t *testing.T) {
-       err := UpdateInstance(util.SetContext(context.Background(), 
util.CtxNocache, "1"), "", &pb.MicroServiceInstance{})
+       err := UpdateInstance(util.WithNoCache(context.Background()), "", 
&pb.MicroServiceInstance{})
        if err == nil {
                t.Fatalf(`UpdateInstance CTX_NOCACHE failed`)
        }
@@ -111,7 +111,7 @@ func TestAppendFindResponse(t *testing.T) {
        }
 
        updatedResult = nil
-       cloneCtx := context.WithValue(ctx, util.CtxResponseRevision, "1")
+       cloneCtx := util.WithResponseRev(ctx, "1")
        AppendFindResponse(cloneCtx, 1, find.Response, find.Instances, 
&updatedResult, &notModifiedResult, &failedResult)
        if updatedResult == nil || notModifiedResult != nil || failedResult != 
nil {
                t.Fatal("TestAppendFindResponse failed")
@@ -121,8 +121,8 @@ func TestAppendFindResponse(t *testing.T) {
        }
 
        updatedResult = nil
-       cloneCtx = context.WithValue(ctx, util.CtxRequestRevision, "1")
-       cloneCtx = context.WithValue(cloneCtx, util.CtxResponseRevision, "1")
+       cloneCtx = util.WithRequestRev(ctx, "1")
+       cloneCtx = util.WithResponseRev(cloneCtx, "1")
        AppendFindResponse(cloneCtx, 1, find.Response, find.Instances, 
&updatedResult, &notModifiedResult, &failedResult)
        if updatedResult != nil || notModifiedResult == nil || failedResult != 
nil {
                t.Fatal("TestAppendFindResponse failed")
@@ -153,8 +153,8 @@ func TestAppendFindResponse(t *testing.T) {
        find.Response = nil
        AppendFindResponse(ctx, 1, find.Response, find.Instances, 
&updatedResult, &notModifiedResult, &failedResult)
        AppendFindResponse(ctx, 2, find.Response, find.Instances, 
&updatedResult, &notModifiedResult, &failedResult)
-       cloneCtx = context.WithValue(ctx, util.CtxRequestRevision, "1")
-       cloneCtx = context.WithValue(cloneCtx, util.CtxResponseRevision, "1")
+       cloneCtx = util.WithRequestRev(ctx, "1")
+       cloneCtx = util.WithResponseRev(cloneCtx, "1")
        AppendFindResponse(cloneCtx, 3, find.Response, find.Instances, 
&updatedResult, &notModifiedResult, &failedResult)
        AppendFindResponse(cloneCtx, 4, find.Response, find.Instances, 
&updatedResult, &notModifiedResult, &failedResult)
        find.Response = pb.CreateResponse(pb.ErrInternal, "test")
diff --git a/datasource/etcd/util/microservice_util.go 
b/datasource/etcd/util/microservice_util.go
index 003b35c..b9a4321 100644
--- a/datasource/etcd/util/microservice_util.go
+++ b/datasource/etcd/util/microservice_util.go
@@ -32,8 +32,6 @@ import (
        pb "github.com/go-chassis/cari/discovery"
 )
 
-const defaultCacheValue = "1"
-
 /*
        get Service by service id
 */
@@ -66,9 +64,7 @@ func GetService(ctx context.Context, domainProject string, 
serviceID string) (*p
 
 // GetServiceFromCache gets service from cache
 func GetServiceFromCache(domainProject string, serviceID string) 
*pb.MicroService {
-       ctx := context.WithValue(context.WithValue(context.Background(),
-               util.CtxCacheOnly, defaultCacheValue),
-               util.CtxGlobal, defaultCacheValue)
+       ctx := util.WithGlobal(util.WithCacheOnly(context.Background()))
        svc, _ := GetService(ctx, domainProject, serviceID)
        return svc
 }
diff --git a/datasource/etcd/util/rule_util.go 
b/datasource/etcd/util/rule_util.go
index 12c7c36..eb2cf70 100644
--- a/datasource/etcd/util/rule_util.go
+++ b/datasource/etcd/util/rule_util.go
@@ -39,7 +39,7 @@ type RuleFilter struct {
 }
 
 func (rf *RuleFilter) Filter(ctx context.Context, consumerID string) (bool, 
error) {
-       copyCtx := util.SetContext(util.CloneContext(ctx), util.CtxCacheOnly, 
"1")
+       copyCtx := util.WithCacheOnly(util.CloneContext(ctx))
        consumer, err := GetService(copyCtx, rf.DomainProject, consumerID)
        if consumer == nil {
                return false, err
@@ -278,7 +278,7 @@ func Accessible(ctx context.Context, consumerID string, 
providerID string) *disc
                return discovery.NewError(discovery.ErrPermissionDeny, 
err.Error())
        }
 
-       ctx = util.SetContext(util.CloneContext(ctx), util.CtxCacheOnly, "1")
+       ctx = util.WithCacheOnly(util.CloneContext(ctx))
 
        // 黑白名单
        rules, err := GetRulesUtil(ctx, targetDomainProject, providerID)
diff --git a/datasource/etcd/util/rule_util_test.go 
b/datasource/etcd/util/rule_util_test.go
index db5718e..ba72871 100644
--- a/datasource/etcd/util/rule_util_test.go
+++ b/datasource/etcd/util/rule_util_test.go
@@ -67,7 +67,7 @@ func TestRuleExist(t *testing.T) {
                        t.Fatalf("TestRuleExist panic")
                }
        }()
-       RuleExist(util.SetContext(context.Background(), util.CtxCacheOnly, 
"1"), "", "", "", "")
+       RuleExist(util.WithCacheOnly(context.Background()), "", "", "", "")
        RuleExist(context.Background(), "", "", "", "")
 }
 
diff --git a/datasource/etcd/util/util_suite_test.go 
b/datasource/etcd/util/util_suite_test.go
index d014c28..56fa8a8 100644
--- a/datasource/etcd/util/util_suite_test.go
+++ b/datasource/etcd/util/util_suite_test.go
@@ -94,11 +94,11 @@ func TestServiceExist(t *testing.T) {
                        t.Fatalf("TestServiceExist failed")
                }
        }()
-       serviceUtil.ServiceExist(util.SetContext(context.Background(), 
util.CtxCacheOnly, "1"), "", "")
+       serviceUtil.ServiceExist(util.WithCacheOnly(context.Background()), "", 
"")
 }
 
 func TestFromContext(t *testing.T) {
-       ctx := context.WithValue(context.Background(), util.CtxNocache, "1")
+       ctx := util.WithNoCache(context.Background())
        opts := serviceUtil.FromContext(ctx)
        if len(opts) == 0 {
                t.Fatalf("TestFromContext failed")
@@ -109,7 +109,7 @@ func TestFromContext(t *testing.T) {
                t.Fatalf("TestFromContext failed")
        }
 
-       ctx = context.WithValue(context.Background(), util.CtxCacheOnly, "1")
+       ctx = util.WithCacheOnly(context.Background())
        opts = serviceUtil.FromContext(ctx)
        if len(opts) == 0 {
                t.Fatalf("TestFromContext failed")
diff --git a/datasource/mongo/mongo_suite_test.go 
b/datasource/mongo/mongo_suite_test.go
index 015c0f0..557f350 100644
--- a/datasource/mongo/mongo_suite_test.go
+++ b/datasource/mongo/mongo_suite_test.go
@@ -40,9 +40,7 @@ var _ = BeforeSuite(func() {
 })
 
 func getContext() context.Context {
-       return util.SetContext(
-               util.SetDomainProject(context.Background(), "default", 
"default"),
-               util.CtxNocache, "1")
+       return util.WithNoCache(util.SetDomainProject(context.Background(), 
"default", "default"))
 }
 
 func TestMongo(t *testing.T) {
diff --git a/pkg/util/context.go b/pkg/util/context.go
index 7fbec0c..220af73 100644
--- a/pkg/util/context.go
+++ b/pkg/util/context.go
@@ -181,3 +181,23 @@ func SetDomainProject(ctx context.Context, domain string, 
project string) contex
 func SetTargetDomainProject(ctx context.Context, domain string, project 
string) context.Context {
        return SetTargetProject(SetTargetDomain(ctx, domain), project)
 }
+
+func WithNoCache(ctx context.Context) context.Context {
+       return SetContext(ctx, CtxNocache, "1")
+}
+
+func WithCacheOnly(ctx context.Context) context.Context {
+       return SetContext(ctx, CtxCacheOnly, "1")
+}
+
+func WithGlobal(ctx context.Context) context.Context {
+       return SetContext(ctx, CtxGlobal, "1")
+}
+
+func WithRequestRev(ctx context.Context, rev string) context.Context {
+       return SetContext(ctx, CtxRequestRevision, rev)
+}
+
+func WithResponseRev(ctx context.Context, rev string) context.Context {
+       return SetContext(ctx, CtxResponseRevision, rev)
+}
diff --git a/server/api.go b/server/api.go
index f368a29..e33b5a3 100644
--- a/server/api.go
+++ b/server/api.go
@@ -27,6 +27,7 @@ import (
        "github.com/apache/servicecomb-service-center/pkg/rest"
        "github.com/apache/servicecomb-service-center/server/config"
        "github.com/apache/servicecomb-service-center/server/core"
+       "github.com/apache/servicecomb-service-center/server/metrics"
        rs "github.com/apache/servicecomb-service-center/server/rest"
        "github.com/apache/servicecomb-service-center/server/service"
        "net"
@@ -193,6 +194,8 @@ func (s *APIServer) selfRegister() {
                s.err <- err
                return
        }
+       // report the metrics
+       metrics.ReportScInstance()
 }
 
 func (s *APIServer) selfUnregister() {
diff --git a/server/broker/service_test.go b/server/broker/service_test.go
index d19d077..17618ef 100644
--- a/server/broker/service_test.go
+++ b/server/broker/service_test.go
@@ -236,8 +236,8 @@ var _ = Describe("Controller", func() {
 
 func getContext() context.Context {
        ctx := context.TODO()
-       ctx = util.SetContext(ctx, "domain", "default")
-       ctx = util.SetContext(ctx, "project", "default")
-       ctx = util.SetContext(ctx, util.CtxNocache, "1")
+       ctx = util.SetDomain(ctx, "default")
+       ctx = util.SetProject(ctx, "default")
+       ctx = util.WithNoCache(ctx)
        return ctx
 }
diff --git a/server/core/microservice.go b/server/core/microservice.go
index f67ecd0..4db4d8d 100644
--- a/server/core/microservice.go
+++ b/server/core/microservice.go
@@ -48,8 +48,7 @@ const (
        RegistryDefaultLeaseRenewalinterval int32 = 30
        RegistryDefaultLeaseRetrytimes      int32 = 3
 
-       CtxScSelf     = "_sc_self"
-       CtxScRegistry = "_registryOnly"
+       CtxScSelf = "_sc_self"
 )
 
 func init() {
@@ -88,10 +87,9 @@ func prepareSelfRegistration() {
 }
 
 func AddDefaultContextValue(ctx context.Context) context.Context {
-       return util.SetContext(util.SetContext(util.SetDomainProject(ctx,
+       return util.WithNoCache(util.SetContext(util.SetDomainProject(ctx,
                RegistryDomain, RegistryProject),
-               CtxScSelf, true),
-               CtxScRegistry, "1")
+               CtxScSelf, true))
 }
 
 func IsDefaultDomainProject(domainProject string) bool {
diff --git a/server/rest/admin/service_test.go 
b/server/rest/admin/service_test.go
index ea77ede..cd4ab4f 100644
--- a/server/rest/admin/service_test.go
+++ b/server/rest/admin/service_test.go
@@ -46,7 +46,5 @@ func TestAdminService_Dump(t *testing.T) {
 }
 
 func getContext() context.Context {
-       return util.SetContext(
-               util.SetDomainProject(context.Background(), "default", 
"default"),
-               util.CtxNocache, "1")
+       return util.WithNoCache(util.SetDomainProject(context.Background(), 
"default", "default"))
 }
diff --git a/server/rest/govern/govern_suite_test.go 
b/server/rest/govern/govern_suite_test.go
index 82d032f..0eed7e8 100644
--- a/server/rest/govern/govern_suite_test.go
+++ b/server/rest/govern/govern_suite_test.go
@@ -43,7 +43,5 @@ var _ = BeforeSuite(func() {
 })
 
 func getContext() context.Context {
-       return util.SetContext(
-               util.SetDomainProject(context.Background(), "default", 
"default"),
-               util.CtxNocache, "1")
+       return util.WithNoCache(util.SetDomainProject(context.Background(), 
"default", "default"))
 }
diff --git a/server/rest/govern/service.go b/server/rest/govern/service.go
index 866edea..1700847 100644
--- a/server/rest/govern/service.go
+++ b/server/rest/govern/service.go
@@ -32,13 +32,12 @@ type Service struct {
 }
 
 func (governService *Service) GetServicesInfo(ctx context.Context, in 
*pb.GetServicesInfoRequest) (*pb.GetServicesInfoResponse, error) {
-       ctx = util.SetContext(ctx, util.CtxCacheOnly, "1")
-
+       ctx = util.WithCacheOnly(ctx)
        return datasource.Instance().GetServicesInfo(ctx, in)
 }
 
 func (governService *Service) GetServiceDetail(ctx context.Context, in 
*pb.GetServiceRequest) (*pb.GetServiceDetailResponse, error) {
-       ctx = util.SetContext(ctx, util.CtxCacheOnly, "1")
+       ctx = util.WithCacheOnly(ctx)
 
        if len(in.ServiceId) == 0 {
                return &pb.GetServiceDetailResponse{
diff --git a/server/service/instance_test.go b/server/service/instance_test.go
index a198941..f8fa29f 100644
--- a/server/service/instance_test.go
+++ b/server/service/instance_test.go
@@ -1575,7 +1575,7 @@ var _ = Describe("'Instance' service", func() {
                                
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId8))
                                Expect(len(rev)).NotTo(Equal(0))
 
-                               util.SetContext(ctx, util.CtxRequestRevision, 
"x")
+                               util.WithRequestRev(ctx, "x")
                                respFind, err = instanceResource.Find(ctx, 
&pb.FindInstancesRequest{
                                        ConsumerServiceId: serviceId8,
                                        AppId:             "query_instance",
@@ -1587,7 +1587,7 @@ var _ = Describe("'Instance' service", func() {
                                
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId8))
                                
Expect(ctx.Value(util.CtxResponseRevision)).To(Equal(rev))
 
-                               util.SetContext(ctx, util.CtxRequestRevision, 
rev)
+                               util.WithRequestRev(ctx, rev)
                                respFind, err = instanceResource.Find(ctx, 
&pb.FindInstancesRequest{
                                        ConsumerServiceId: serviceId8,
                                        AppId:             "query_instance",
diff --git a/server/service/service_suite_test.go 
b/server/service/service_suite_test.go
index 9740f64..ae8ead5 100644
--- a/server/service/service_suite_test.go
+++ b/server/service/service_suite_test.go
@@ -37,9 +37,7 @@ var _ = BeforeSuite(func() {
 })
 
 func getContext() context.Context {
-       return util.SetContext(
-               util.SetDomainProject(context.Background(), "default", 
"default"),
-               util.CtxNocache, "1")
+       return util.WithNoCache(util.SetDomainProject(context.Background(), 
"default", "default"))
 }
 
 func TestGrpc(t *testing.T) {

Reply via email to