You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ti...@apache.org on 2020/11/28 00:55:09 UTC
[servicecomb-service-center] branch master updated: SCB-2094 Bug
fixes (#764)
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 <su...@qq.com>
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, ¬ModifiedResult, &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, ¬ModifiedResult, &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, ¬ModifiedResult, &failedResult)
AppendFindResponse(ctx, 2, find.Response, find.Instances, &updatedResult, ¬ModifiedResult, &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, ¬ModifiedResult, &failedResult)
AppendFindResponse(cloneCtx, 4, find.Response, find.Instances, &updatedResult, ¬ModifiedResult, &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) {