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 2021/08/05 01:21:35 UTC
[servicecomb-service-center] branch master updated: Change: Remove
the dependency registration API, VersionRule mechanism,
Dependence of * (#1125)
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 4db45fb Change: Remove the dependency registration API, VersionRule mechanism, Dependence of * (#1125)
4db45fb is described below
commit 4db45fbbe341998c1447471f8ad2450885de2aaa
Author: little-cui <su...@qq.com>
AuthorDate: Thu Aug 5 09:21:28 2021 +0800
Change: Remove the dependency registration API, VersionRule mechanism, Dependence of * (#1125)
* Change: Remove the dependency registration API, VersionRule mechanism, Dependence of *
* Update docs
* Fix: UT
---
datasource/cache/ms_cache.go | 4 +-
datasource/dep.go | 1 -
datasource/dep_test.go | 388 -------------
datasource/dependency_util.go | 11 -
datasource/etcd/cache/common.go | 16 +-
datasource/etcd/cache/dependency.go | 17 +-
datasource/etcd/cache/filter_consistency.go | 14 +-
datasource/etcd/cache/filter_consumer.go | 4 +-
datasource/etcd/cache/filter_instances.go | 28 +-
datasource/etcd/cache/filter_permission.go | 14 +-
datasource/etcd/cache/filter_service.go | 2 +-
datasource/etcd/cache/filter_tags.go | 12 +-
datasource/etcd/cache/filter_version.go | 30 +-
datasource/etcd/cache/instance.go | 18 +-
datasource/etcd/dep.go | 62 +-
datasource/etcd/event/dependency_event_handler.go | 8 +-
.../event/dependency_rule_event_handler_test.go | 12 +-
datasource/etcd/ms.go | 38 +-
datasource/etcd/path/key_convertor.go | 12 -
datasource/etcd/path/key_convertor_test.go | 14 -
datasource/etcd/path/key_generator.go | 61 +-
datasource/etcd/path/key_generator_test.go | 15 -
datasource/etcd/util.go | 5 +-
datasource/etcd/util/dependency.go | 9 +-
datasource/etcd/util/dependency_query.go | 133 +----
datasource/etcd/util/dependency_query_test.go | 96 ++++
datasource/etcd/util/dependency_util.go | 87 +--
...{dependency_test.go => dependency_util_test.go} | 91 +--
datasource/etcd/util/microservice_util.go | 53 +-
.../etcd/util/{util_suite_test.go => util_test.go} | 98 ++--
datasource/instance_test.go | 119 ++--
datasource/mongo/client/dao/dep.go | 5 +-
datasource/mongo/dep.go | 109 +---
datasource/mongo/dep_util.go | 12 +
datasource/mongo/dependency_query.go | 287 +---------
datasource/mongo/event/instance_event_handler.go | 4 +-
datasource/mongo/ms.go | 97 +---
datasource/service_test.go | 38 --
datasource/tag_test.go | 3 -
docs/openapi/v4.yaml | 14 +-
integration/apis.go | 7 -
integration/instances_test.go | 137 +++--
integration/microservices_test.go | 267 +--------
pkg/proto/service.go | 2 -
pkg/validate/validator.go | 7 +
server/rest/controller/v3/dependency_controller.go | 2 -
server/rest/controller/v4/dependency_controller.go | 54 --
server/rest/controller/v4/instance_controller.go | 1 -
server/service/disco/dependency.go | 24 -
server/service/disco/dependency_test.go | 621 +--------------------
server/service/disco/instance_test.go | 268 ++-------
server/service/disco/microservice_test.go | 63 +--
server/service/disco/tag_test.go | 2 -
server/service/validator/dependency_validator.go | 76 ---
server/service/validator/instance_validator.go | 6 +-
server/service/validator/microservice_validator.go | 19 +-
server/service/validator/validator.go | 5 +-
57 files changed, 645 insertions(+), 2957 deletions(-)
diff --git a/datasource/cache/ms_cache.go b/datasource/cache/ms_cache.go
index 5325546..9c7cd8a 100644
--- a/datasource/cache/ms_cache.go
+++ b/datasource/cache/ms_cache.go
@@ -33,7 +33,7 @@ const (
)
func GetProviderServiceOfDeps(provider *discovery.MicroService) (*discovery.MicroServiceDependency, bool) {
- res := sd.Store().Dep().Cache().GetValue(genDepserivceKey(Provider, provider))
+ res := sd.Store().Dep().Cache().GetValue(genDepServiceKey(Provider, provider))
deps, ok := transCacheToDep(res)
if !ok {
return nil, false
@@ -56,7 +56,7 @@ func transCacheToDep(cache []interface{}) ([]*discovery.MicroServiceDependency,
return res, true
}
-func genDepserivceKey(ruleType string, service *discovery.MicroService) string {
+func genDepServiceKey(ruleType string, service *discovery.MicroService) string {
return strings.Join([]string{ruleType, service.AppId, service.ServiceName, service.Version}, "/")
}
diff --git a/datasource/dep.go b/datasource/dep.go
index 1be1222..d3cee31 100644
--- a/datasource/dep.go
+++ b/datasource/dep.go
@@ -27,6 +27,5 @@ import (
type DependencyManager interface {
SearchProviderDependency(ctx context.Context, request *pb.GetDependenciesRequest) (*pb.GetProDependenciesResponse, error)
SearchConsumerDependency(ctx context.Context, request *pb.GetDependenciesRequest) (*pb.GetConDependenciesResponse, error)
- AddOrUpdateDependencies(ctx context.Context, dependencyInfos []*pb.ConsumerDependency, override bool) (*pb.Response, error)
DependencyHandle(ctx context.Context) error
}
diff --git a/datasource/dep_test.go b/datasource/dep_test.go
index e3e9ee7..435d881 100644
--- a/datasource/dep_test.go
+++ b/datasource/dep_test.go
@@ -27,389 +27,6 @@ import (
"github.com/stretchr/testify/assert"
)
-func Test_Create(t *testing.T) {
- var (
- consumerId1 string
- consumerId2 string
- consumerId3 string
- )
- t.Run("create service, should be passed", func(t *testing.T) {
- resp, err := datasource.GetMetadataManager().RegisterService(depGetContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_consumer",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
- consumerId1 = resp.ServiceId
-
- resp, err = datasource.GetMetadataManager().RegisterService(depGetContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_consumer_all",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
- consumerId3 = resp.ServiceId
-
- resp, err = datasource.GetMetadataManager().RegisterService(depGetContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- Environment: pb.ENV_PROD,
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_consumer",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
- consumerId2 = resp.ServiceId
-
- resp, err = datasource.GetMetadataManager().RegisterService(depGetContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
- resp, err = datasource.GetMetadataManager().RegisterService(depGetContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.1",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
-
- resp, err = datasource.GetMetadataManager().RegisterService(depGetContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- Environment: pb.ENV_PROD,
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
- })
-
- t.Run("add dep and search, when request is invalid, should be failed", func(t *testing.T) {
- consumer := &pb.MicroServiceKey{
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_consumer",
- Version: "1.0.0",
- }
- providers := []*pb.MicroServiceKey{
- {
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.0",
- },
- }
-
- // consumer does not exist
- resp, err := datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "noexistapp",
- ServiceName: "noexistservice",
- Version: "1.0.0",
- },
- Providers: providers,
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ErrServiceNotExists, resp.GetCode())
-
- err = datasource.GetDependencyManager().DependencyHandle(getContext())
- assert.NoError(t, err)
-
- // provider in diff env
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- Environment: pb.ENV_PROD,
- AppId: "dep_service_group_provider",
- ServiceName: "dep_service_name_provider",
- Version: "latest",
- },
- },
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- //consumer in diff env
- consumer.Environment = pb.ENV_PROD
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "dep_service_group_provider",
- ServiceName: "dep_service_name_provider",
- Version: "latest",
- },
- },
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- err = datasource.GetDependencyManager().DependencyHandle(getContext())
- assert.NoError(t, err)
-
- respCon, err := datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- assert.NotNil(t, respCon)
- assert.NoError(t, err)
- assert.Equal(t, 0, len(respCon.Providers))
-
- respCon, err = datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId2,
- })
- assert.NotNil(t, respCon)
- assert.NoError(t, err)
- assert.Equal(t, 0, len(respCon.Providers))
- })
-
- t.Run("add dep and search,,when request is valid, should be passed", func(t *testing.T) {
- consumer := &pb.MicroServiceKey{
- ServiceName: "dep_create_dep_consumer",
- AppId: "dep_create_dep_group",
- Version: "1.0.0",
- }
-
- // add latest
- resp, err := datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "latest",
- },
- },
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- err = datasource.GetDependencyManager().DependencyHandle(getContext())
- assert.NoError(t, err)
-
- respPro, err := datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- assert.NotNil(t, respPro)
- assert.NoError(t, err)
- assert.NotEqual(t, 0, len(respPro.Providers))
- assert.Equal(t, "1.0.1", respPro.Providers[0].Version)
-
- // add 1.0.0+
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.0+",
- },
- },
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- err = datasource.GetDependencyManager().DependencyHandle(getContext())
- assert.NoError(t, err)
-
- respPro, err = datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- assert.NotNil(t, respPro)
- assert.NoError(t, err)
- assert.Equal(t, 2, len(respPro.Providers))
-
- // add *
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- ServiceName: "dep_create_dep_consumer_all",
- AppId: "dep_create_dep_group",
- Version: "1.0.0",
- },
- Providers: []*pb.MicroServiceKey{
- {
- ServiceName: "*",
- },
- },
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- respPro, err = datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId3,
- })
- assert.NotNil(t, respPro)
- assert.NoError(t, err)
-
- // clean all
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- ServiceName: "dep_create_dep_consumer_all",
- AppId: "dep_create_dep_group",
- Version: "1.0.0",
- },
- Providers: nil,
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- // add multiple providers
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.0",
- },
- {
- ServiceName: "*",
- },
- },
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- // add 1.0.0-2.0.0 to override *
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.0-1.0.1",
- },
- },
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- err = datasource.GetDependencyManager().DependencyHandle(getContext())
- assert.NoError(t, err)
-
- respPro, err = datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- assert.NotNil(t, respPro)
- assert.NoError(t, err)
- assert.Equal(t, "1.0.0", respPro.Providers[0].Version)
-
- // add not override
- respAdd, err := datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "dep_create_dep_group",
- ServiceName: "dep_create_dep_provider",
- Version: "1.0.0-3.0.0",
- },
- },
- },
- }, false)
- assert.NotNil(t, respAdd)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, respAdd.GetCode())
-
- err = datasource.GetDependencyManager().DependencyHandle(getContext())
- assert.NoError(t, err)
-
- respPro, err = datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- assert.NotNil(t, respPro)
- assert.NoError(t, err)
-
- // add provider is empty
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{},
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- resp, err = datasource.GetDependencyManager().AddOrUpdateDependencies(depGetContext(), []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- },
- }, false)
- assert.NotNil(t, resp)
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, resp.GetCode())
-
- err = datasource.GetDependencyManager().DependencyHandle(getContext())
- assert.NoError(t, err)
-
- respPro, err = datasource.GetDependencyManager().SearchConsumerDependency(depGetContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- assert.NotNil(t, respPro)
- assert.NoError(t, err)
- })
-}
-
func Test_Get(t *testing.T) {
var (
consumerId1 string
@@ -483,7 +100,6 @@ func Test_Get(t *testing.T) {
ConsumerServiceId: consumerId1,
AppId: "dep_get_dep_group",
ServiceName: "dep_get_dep_provider",
- VersionRule: "1.0.0+",
})
assert.NotNil(t, resp)
assert.NoError(t, err)
@@ -511,7 +127,6 @@ func Test_Get(t *testing.T) {
ConsumerServiceId: consumerId1,
AppId: "dep_get_dep_group",
ServiceName: "dep_get_dep_consumer",
- VersionRule: "1.0.0+",
})
assert.NotNil(t, resp)
assert.NoError(t, err)
@@ -532,7 +147,6 @@ func Test_Get(t *testing.T) {
ConsumerServiceId: providerId2,
AppId: "dep_get_dep_group",
ServiceName: "dep_get_dep_finder",
- VersionRule: "1.0.0+",
})
assert.NotNil(t, resp)
assert.NoError(t, err)
@@ -556,7 +170,6 @@ func Test_Get(t *testing.T) {
ConsumerServiceId: providerId2,
AppId: "dep_get_dep_group",
ServiceName: "dep_get_dep_finder",
- VersionRule: "1.0.0+",
})
assert.NotNil(t, resp)
assert.NoError(t, err)
@@ -609,7 +222,6 @@ func Test_Get(t *testing.T) {
ConsumerServiceId: providerId2,
AppId: "dep_get_dep_group",
ServiceName: "dep_get_dep_finder",
- VersionRule: "1.0.0+",
})
assert.NotNil(t, resp)
assert.NoError(t, err)
diff --git a/datasource/dependency_util.go b/datasource/dependency_util.go
index 37ac69a..6733fbc 100644
--- a/datasource/dependency_util.go
+++ b/datasource/dependency_util.go
@@ -88,13 +88,6 @@ func ParseAddOrUpdateRules(ctx context.Context, dep *Dependency, oldProviderRule
if ok, _ := ContainServiceDependency(oldProviderRules.Dependency, tmpProviderRule); ok {
continue
}
-
- if tmpProviderRule.ServiceName == "*" {
- createDependencyRuleList = append([]*discovery.MicroServiceKey{}, tmpProviderRule)
- deleteDependencyRuleList = oldProviderRules.Dependency
- break
- }
-
createDependencyRuleList = append(createDependencyRuleList, tmpProviderRule)
old := IsNeedUpdate(oldProviderRules.Dependency, tmpProviderRule)
if old != nil {
@@ -102,14 +95,10 @@ func ParseAddOrUpdateRules(ctx context.Context, dep *Dependency, oldProviderRule
}
}
for _, oldProviderRule := range oldProviderRules.Dependency {
- if oldProviderRule.ServiceName == "*" {
- return
- }
if ok, _ := ContainServiceDependency(deleteDependencyRuleList, oldProviderRule); !ok {
existDependencyRuleList = append(existDependencyRuleList, oldProviderRule)
}
}
-
dep.ProvidersRule = append(createDependencyRuleList, existDependencyRuleList...)
setDep(dep, createDependencyRuleList, existDependencyRuleList, deleteDependencyRuleList)
}
diff --git a/datasource/etcd/cache/common.go b/datasource/etcd/cache/common.go
index 112dff9..929d176 100644
--- a/datasource/etcd/cache/common.go
+++ b/datasource/etcd/cache/common.go
@@ -29,14 +29,14 @@ import (
type ClustersIndex map[string]int
const (
- CtxFindConsumer util.CtxKey = "_consumer"
- CtxFindProvider util.CtxKey = "_provider"
- CtxFindProviderInstance util.CtxKey = "_provider_instance"
- CtxFindTags util.CtxKey = "_tags"
- CtxFindRequestRev util.CtxKey = "_rev"
-
- Find = "_find"
- Dep = "_dep"
+ CtxConsumerID util.CtxKey = "_consumer"
+ CtxProviderKey util.CtxKey = "_provider"
+ CtxProviderInstanceKey util.CtxKey = "_provider_instance"
+ CtxTags util.CtxKey = "_tags"
+ CtxRequestRev util.CtxKey = "_rev"
+
+ FindResult = "_find"
+ DepResult = "_dep"
DefaultCacheMaxSize = 10000
)
diff --git a/datasource/etcd/cache/dependency.go b/datasource/etcd/cache/dependency.go
index 5d11982..5ec1e72 100644
--- a/datasource/etcd/cache/dependency.go
+++ b/datasource/etcd/cache/dependency.go
@@ -36,30 +36,31 @@ func init() {
}
type DependencyRuleItem struct {
- VersionRule string
+ // Access whether the cache is access by outside
+ Access bool
}
type DependencyRuleCache struct {
*cache.Tree
}
-func (f *DependencyRuleCache) ExistVersionRule(ctx context.Context, consumerID string, provider *pb.MicroServiceKey) bool {
+func (f *DependencyRuleCache) ExistRule(ctx context.Context, consumerID string, provider *pb.MicroServiceKey) bool {
cloneCtx := context.WithValue(context.WithValue(ctx,
- CtxFindConsumer, consumerID),
- CtxFindProvider, provider)
+ CtxConsumerID, consumerID),
+ CtxProviderKey, provider)
node, _ := f.Tree.Get(cloneCtx, cache.Options().Temporary(ctx.Value(util.CtxNocache) == "1"))
if node == nil {
return false
}
- v := node.Cache.Get(Dep).(*DependencyRuleItem)
- if v.VersionRule != provider.Version {
- v.VersionRule = provider.Version
+ v := node.Cache.Get(DepResult).(*DependencyRuleItem)
+ if !v.Access {
+ v.Access = true
return false
}
return true
}
func (f *DependencyRuleCache) Remove(provider *pb.MicroServiceKey) {
- f.Tree.Remove(context.WithValue(context.Background(), CtxFindProvider, provider))
+ f.Tree.Remove(context.WithValue(context.Background(), CtxProviderKey, provider))
}
diff --git a/datasource/etcd/cache/filter_consistency.go b/datasource/etcd/cache/filter_consistency.go
index a33ea05..ff499aa 100644
--- a/datasource/etcd/cache/filter_consistency.go
+++ b/datasource/etcd/cache/filter_consistency.go
@@ -34,8 +34,8 @@ type ConsistencyFilter struct {
}
func (f *ConsistencyFilter) Name(ctx context.Context, parent *cache.Node) string {
- item := parent.Cache.Get(Find).(*VersionRuleCacheItem)
- requestRev := ctx.Value(CtxFindRequestRev).(string)
+ item := parent.Cache.Get(FindResult).(*VersionRuleCacheItem)
+ requestRev := ctx.Value(CtxRequestRev).(string)
if len(requestRev) == 0 || requestRev == item.Rev {
return ""
}
@@ -50,8 +50,8 @@ func (f *ConsistencyFilter) Name(ctx context.Context, parent *cache.Node) string
// It's impossible to guarantee consistency if the backend is not creditable,
// thus in this condition RevisionFilter uses cache only.
func (f *ConsistencyFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.Node, err error) {
- pCache := parent.Cache.Get(Find).(*VersionRuleCacheItem)
- requestRev := ctx.Value(CtxFindRequestRev).(string)
+ pCache := parent.Cache.Get(FindResult).(*VersionRuleCacheItem)
+ requestRev := ctx.Value(CtxRequestRev).(string)
// do not need to check consistency between sc instances:
// 1. request without rev param
// 2. request rev is the same as cache current sc instance
@@ -59,13 +59,13 @@ func (f *ConsistencyFilter) Init(ctx context.Context, parent *cache.Node) (node
if len(requestRev) == 0 || requestRev == pCache.Rev ||
!(kv.Store().Instance().Creditable()) {
node = cache.NewNode()
- node.Cache.Set(Find, pCache)
+ node.Cache.Set(FindResult, pCache)
return
}
if pCache.BrokenWait() {
node = cache.NewNode()
- node.Cache.Set(Find, pCache)
+ node.Cache.Set(FindResult, pCache)
return
}
@@ -82,6 +82,6 @@ func (f *ConsistencyFilter) Init(ctx context.Context, parent *cache.Node) (node
pCache.Broken()
node = cache.NewNode()
- node.Cache.Set(Find, pCache)
+ node.Cache.Set(FindResult, pCache)
return
}
diff --git a/datasource/etcd/cache/filter_consumer.go b/datasource/etcd/cache/filter_consumer.go
index 420f258..e16135d 100644
--- a/datasource/etcd/cache/filter_consumer.go
+++ b/datasource/etcd/cache/filter_consumer.go
@@ -27,11 +27,11 @@ type ConsumerFilter struct {
}
func (f *ConsumerFilter) Name(ctx context.Context, _ *cache.Node) string {
- return ctx.Value(CtxFindConsumer).(string)
+ return ctx.Value(CtxConsumerID).(string)
}
func (f *ConsumerFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.Node, err error) {
node = cache.NewNode()
- node.Cache.Set(Dep, &DependencyRuleItem{})
+ node.Cache.Set(DepResult, &DependencyRuleItem{})
return
}
diff --git a/datasource/etcd/cache/filter_instances.go b/datasource/etcd/cache/filter_instances.go
index 1d53899..ef04896 100644
--- a/datasource/etcd/cache/filter_instances.go
+++ b/datasource/etcd/cache/filter_instances.go
@@ -35,7 +35,7 @@ type InstancesFilter struct {
}
func (f *InstancesFilter) Name(ctx context.Context, _ *cache.Node) string {
- instanceKey, ok := ctx.Value(CtxFindProviderInstance).(*pb.HeartbeatSetElement)
+ instanceKey, ok := ctx.Value(CtxProviderInstanceKey).(*pb.HeartbeatSetElement)
if ok {
return instanceKey.ServiceId + path.SPLIT + instanceKey.InstanceId
}
@@ -43,7 +43,7 @@ func (f *InstancesFilter) Name(ctx context.Context, _ *cache.Node) string {
}
func (f *InstancesFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.Node, err error) {
- pCopy := *parent.Cache.Get(Find).(*VersionRuleCacheItem)
+ pCopy := *parent.Cache.Get(FindResult).(*VersionRuleCacheItem)
pCopy.Instances, pCopy.Rev, err = f.Find(ctx, parent)
if err != nil {
@@ -52,16 +52,16 @@ func (f *InstancesFilter) Init(ctx context.Context, parent *cache.Node) (node *c
pCopy.InitBrokenQueue()
node = cache.NewNode()
- node.Cache.Set(Find, &pCopy)
+ node.Cache.Set(FindResult, &pCopy)
return
}
func (f *InstancesFilter) Find(ctx context.Context, parent *cache.Node) (
instances []*pb.MicroServiceInstance, rev string, err error) {
- pCache := parent.Cache.Get(Find).(*VersionRuleCacheItem)
- provider := ctx.Value(CtxFindProvider).(*pb.MicroServiceKey)
+ pCache := parent.Cache.Get(FindResult).(*VersionRuleCacheItem)
+ provider := ctx.Value(CtxProviderKey).(*pb.MicroServiceKey)
- instanceKey, ok := ctx.Value(CtxFindProviderInstance).(*pb.HeartbeatSetElement)
+ instanceKey, ok := ctx.Value(CtxProviderInstanceKey).(*pb.HeartbeatSetElement)
if ok {
if len(pCache.ServiceIds) == 0 {
// can not find by instanceKey.ServiceID after pre-filters init
@@ -72,9 +72,9 @@ func (f *InstancesFilter) Find(ctx context.Context, parent *cache.Node) (
instances, rev, err = f.BatchFindInstances(ctx, provider.Tenant, pCache.ServiceIds)
}
if err != nil {
- consumer := ctx.Value(CtxFindConsumer).(*pb.MicroService)
- findFlag := fmt.Sprintf("consumer '%s' find provider %s/%s/%s", consumer.ServiceId,
- provider.AppId, provider.ServiceName, provider.Version)
+ consumer := ctx.Value(CtxConsumerID).(*pb.MicroService)
+ findFlag := fmt.Sprintf("consumer '%s' find provider %s/%s", consumer.ServiceId,
+ provider.AppId, provider.ServiceName)
log.Errorf(err, "Find failed, %s", findFlag)
}
return
@@ -105,8 +105,9 @@ func (f *InstancesFilter) findInstances(ctx context.Context, domainProject, serv
func (f *InstancesFilter) FindInstances(ctx context.Context, domainProject string, instanceKey *pb.HeartbeatSetElement) (instances []*pb.MicroServiceInstance, rev string, err error) {
var (
- maxRevs = make([]int64, len(getOrCreateClustersIndex()))
- counts = make([]int64, len(getOrCreateClustersIndex()))
+ index = getOrCreateClustersIndex()
+ maxRevs = make([]int64, len(index))
+ counts = make([]int64, len(index))
)
instances, err = f.findInstances(ctx, domainProject, instanceKey.ServiceId, instanceKey.InstanceId, maxRevs, counts)
if err != nil {
@@ -117,8 +118,9 @@ func (f *InstancesFilter) FindInstances(ctx context.Context, domainProject strin
func (f *InstancesFilter) BatchFindInstances(ctx context.Context, domainProject string, serviceIDs []string) (instances []*pb.MicroServiceInstance, rev string, err error) {
var (
- maxRevs = make([]int64, len(getOrCreateClustersIndex()))
- counts = make([]int64, len(getOrCreateClustersIndex()))
+ index = getOrCreateClustersIndex()
+ maxRevs = make([]int64, len(index))
+ counts = make([]int64, len(index))
)
for _, providerServiceID := range serviceIDs {
insts, err := f.findInstances(ctx, domainProject, providerServiceID, "", maxRevs, counts)
diff --git a/datasource/etcd/cache/filter_permission.go b/datasource/etcd/cache/filter_permission.go
index ad9e3f0..9c2e355 100644
--- a/datasource/etcd/cache/filter_permission.go
+++ b/datasource/etcd/cache/filter_permission.go
@@ -32,19 +32,19 @@ type AccessibleFilter struct {
}
func (f *AccessibleFilter) Name(ctx context.Context, _ *cache.Node) string {
- consumer := ctx.Value(CtxFindConsumer).(*pb.MicroService)
+ consumer := ctx.Value(CtxConsumerID).(*pb.MicroService)
return consumer.ServiceId
}
func (f *AccessibleFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.Node, err error) {
var ids []string
- consumerID := ctx.Value(CtxFindConsumer).(*pb.MicroService).ServiceId
- pCopy := *parent.Cache.Get(Find).(*VersionRuleCacheItem)
+ consumerID := ctx.Value(CtxConsumerID).(*pb.MicroService).ServiceId
+ pCopy := *parent.Cache.Get(FindResult).(*VersionRuleCacheItem)
for _, providerServiceID := range pCopy.ServiceIds {
if err := util.Accessible(ctx, consumerID, providerServiceID); err != nil {
- provider := ctx.Value(CtxFindProvider).(*pb.MicroServiceKey)
- findFlag := fmt.Sprintf("consumer '%s' find provider %s/%s/%s", consumerID,
- provider.AppId, provider.ServiceName, provider.Version)
+ provider := ctx.Value(CtxProviderKey).(*pb.MicroServiceKey)
+ findFlag := fmt.Sprintf("consumer '%s' find provider %s/%s", consumerID,
+ provider.AppId, provider.ServiceName)
log.Errorf(err, "AccessibleFilter failed, %s", findFlag)
continue
}
@@ -54,6 +54,6 @@ func (f *AccessibleFilter) Init(ctx context.Context, parent *cache.Node) (node *
pCopy.ServiceIds = ids
node = cache.NewNode()
- node.Cache.Set(Find, &pCopy)
+ node.Cache.Set(FindResult, &pCopy)
return
}
diff --git a/datasource/etcd/cache/filter_service.go b/datasource/etcd/cache/filter_service.go
index d5607ed..de0416d 100644
--- a/datasource/etcd/cache/filter_service.go
+++ b/datasource/etcd/cache/filter_service.go
@@ -30,7 +30,7 @@ type ServiceFilter struct {
}
func (f *ServiceFilter) Name(ctx context.Context, _ *cache.Node) string {
- provider := ctx.Value(CtxFindProvider).(*pb.MicroServiceKey)
+ provider := ctx.Value(CtxProviderKey).(*pb.MicroServiceKey)
return util.StringJoin([]string{
provider.Tenant,
provider.Environment,
diff --git a/datasource/etcd/cache/filter_tags.go b/datasource/etcd/cache/filter_tags.go
index 309213c..4466719 100644
--- a/datasource/etcd/cache/filter_tags.go
+++ b/datasource/etcd/cache/filter_tags.go
@@ -35,13 +35,13 @@ type TagsFilter struct {
}
func (f *TagsFilter) Name(ctx context.Context, _ *cache.Node) string {
- tags, _ := ctx.Value(CtxFindTags).([]string)
+ tags, _ := ctx.Value(CtxTags).([]string)
sort.Strings(tags)
return strings.Join(tags, ",")
}
func (f *TagsFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.Node, err error) {
- tags, _ := ctx.Value(CtxFindTags).([]string)
+ tags, _ := ctx.Value(CtxTags).([]string)
if len(tags) == 0 {
node = cache.NewNode()
node.Cache = parent.Cache
@@ -51,14 +51,14 @@ func (f *TagsFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.
var ids []string
targetDomainProject := util.ParseTargetDomainProject(ctx)
- pCopy := *parent.Cache.Get(Find).(*VersionRuleCacheItem)
+ pCopy := *parent.Cache.Get(FindResult).(*VersionRuleCacheItem)
loopProviderIds:
for _, providerServiceID := range pCopy.ServiceIds {
tagsFromETCD, err := serviceUtil.GetTagsUtils(ctx, targetDomainProject, providerServiceID)
if err != nil {
- consumer := ctx.Value(CtxFindConsumer).(*pb.MicroService)
- provider := ctx.Value(CtxFindProvider).(*pb.MicroServiceKey)
+ consumer := ctx.Value(CtxConsumerID).(*pb.MicroService)
+ provider := ctx.Value(CtxProviderKey).(*pb.MicroServiceKey)
findFlag := fmt.Sprintf("consumer '%s' find provider %s/%s/%s", consumer.ServiceId,
provider.AppId, provider.ServiceName, provider.Version)
log.Errorf(err, "TagsFilter failed, %s", findFlag)
@@ -78,6 +78,6 @@ loopProviderIds:
pCopy.ServiceIds = ids
node = cache.NewNode()
- node.Cache.Set(Find, &pCopy)
+ node.Cache.Set(FindResult, &pCopy)
return
}
diff --git a/datasource/etcd/cache/filter_version.go b/datasource/etcd/cache/filter_version.go
index 1deb83d..074f94a 100644
--- a/datasource/etcd/cache/filter_version.go
+++ b/datasource/etcd/cache/filter_version.go
@@ -28,31 +28,33 @@ import (
"github.com/apache/servicecomb-service-center/pkg/log"
)
-type VersionRuleFilter struct {
+type VersionFilter struct {
}
-func (f *VersionRuleFilter) Name(ctx context.Context, _ *cache.Node) string {
- provider := ctx.Value(CtxFindProvider).(*pb.MicroServiceKey)
- return provider.Version
+func (f *VersionFilter) Name(ctx context.Context, _ *cache.Node) string {
+ instanceKey, ok := ctx.Value(CtxProviderInstanceKey).(*pb.HeartbeatSetElement)
+ if ok {
+ return instanceKey.ServiceId
+ }
+ return ""
}
-func (f *VersionRuleFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.Node, err error) {
- instance, ok := ctx.Value(CtxFindProviderInstance).(*pb.HeartbeatSetElement)
+func (f *VersionFilter) Init(ctx context.Context, parent *cache.Node) (node *cache.Node, err error) {
+ instance, ok := ctx.Value(CtxProviderInstanceKey).(*pb.HeartbeatSetElement)
if ok {
node = cache.NewNode()
- node.Cache.Set(Find, &VersionRuleCacheItem{
+ node.Cache.Set(FindResult, &VersionRuleCacheItem{
ServiceIds: []string{instance.ServiceId},
})
return
}
- provider := ctx.Value(CtxFindProvider).(*pb.MicroServiceKey)
- // 版本规则
- ids, exist, err := serviceUtil.FindServiceIds(ctx, provider.Version, provider)
+ provider := ctx.Value(CtxProviderKey).(*pb.MicroServiceKey)
+ ids, exist, err := serviceUtil.FindServiceIds(ctx, provider, false)
if err != nil {
- consumer := ctx.Value(CtxFindConsumer).(*pb.MicroService)
- findFlag := fmt.Sprintf("consumer '%s' find provider %s/%s/%s", consumer.ServiceId,
- provider.AppId, provider.ServiceName, provider.Version)
+ consumer := ctx.Value(CtxConsumerID).(*pb.MicroService)
+ findFlag := fmt.Sprintf("consumer '%s' find provider %s/%s", consumer.ServiceId,
+ provider.AppId, provider.ServiceName)
log.Errorf(err, "FindServiceIds failed, %s", findFlag)
return
}
@@ -61,7 +63,7 @@ func (f *VersionRuleFilter) Init(ctx context.Context, parent *cache.Node) (node
}
node = cache.NewNode()
- node.Cache.Set(Find, &VersionRuleCacheItem{
+ node.Cache.Set(FindResult, &VersionRuleCacheItem{
ServiceIds: ids,
})
return
diff --git a/datasource/etcd/cache/instance.go b/datasource/etcd/cache/instance.go
index a5aad02..463f3ec 100644
--- a/datasource/etcd/cache/instance.go
+++ b/datasource/etcd/cache/instance.go
@@ -33,7 +33,7 @@ var FindInstances = &FindInstancesCache{
func init() {
FindInstances.AddFilter(
&ServiceFilter{},
- &VersionRuleFilter{},
+ &VersionFilter{},
&TagsFilter{},
&AccessibleFilter{},
&InstancesFilter{},
@@ -75,29 +75,29 @@ type FindInstancesCache struct {
func (f *FindInstancesCache) Get(ctx context.Context, consumer *pb.MicroService, provider *pb.MicroServiceKey,
tags []string, rev string) (*VersionRuleCacheItem, error) {
cloneCtx := context.WithValue(context.WithValue(context.WithValue(context.WithValue(ctx,
- CtxFindConsumer, consumer),
- CtxFindProvider, provider),
- CtxFindTags, tags),
- CtxFindRequestRev, rev)
+ CtxConsumerID, consumer),
+ CtxProviderKey, provider),
+ CtxTags, tags),
+ CtxRequestRev, rev)
node, err := f.Tree.Get(cloneCtx, cache.Options().Temporary(ctx.Value(util.CtxNocache) == "1"))
if node == nil {
return nil, err
}
- return node.Cache.Get(Find).(*VersionRuleCacheItem), nil
+ return node.Cache.Get(FindResult).(*VersionRuleCacheItem), nil
}
func (f *FindInstancesCache) GetWithProviderID(ctx context.Context, consumer *pb.MicroService, provider *pb.MicroServiceKey,
instanceKey *pb.HeartbeatSetElement, tags []string, rev string) (*VersionRuleCacheItem, error) {
- cloneCtx := context.WithValue(ctx, CtxFindProviderInstance, instanceKey)
+ cloneCtx := context.WithValue(ctx, CtxProviderInstanceKey, instanceKey)
return f.Get(cloneCtx, consumer, provider, tags, rev)
}
func (f *FindInstancesCache) Remove(provider *pb.MicroServiceKey) {
- f.Tree.Remove(context.WithValue(context.Background(), CtxFindProvider, provider))
+ f.Tree.Remove(context.WithValue(context.Background(), CtxProviderKey, provider))
if len(provider.Alias) > 0 {
copy := *provider
copy.ServiceName = copy.Alias
- f.Tree.Remove(context.WithValue(context.Background(), CtxFindProvider, ©))
+ f.Tree.Remove(context.WithValue(context.Background(), CtxProviderKey, ©))
}
}
diff --git a/datasource/etcd/dep.go b/datasource/etcd/dep.go
index 88d5941..601dbb5 100644
--- a/datasource/etcd/dep.go
+++ b/datasource/etcd/dep.go
@@ -19,7 +19,6 @@ package etcd
import (
"context"
- "encoding/json"
"errors"
"fmt"
@@ -53,9 +52,7 @@ func (dm *DepManager) SearchProviderDependency(ctx context.Context, request *pb.
return nil, err
}
- dr := serviceUtil.NewProviderDependencyRelation(ctx, domainProject, provider)
- services, err := dr.GetDependencyConsumers(toDependencyFilterOptions(request)...)
-
+ services, err := serviceUtil.GetConsumers(ctx, domainProject, provider, toDependencyFilterOptions(request)...)
if err != nil {
log.Error(fmt.Sprintf("query provider failed, provider is %s/%s/%s/%s",
provider.Environment, provider.AppId, provider.ServiceName, provider.Version), err)
@@ -86,8 +83,7 @@ func (dm *DepManager) SearchConsumerDependency(ctx context.Context, request *pb.
return nil, err
}
- dr := serviceUtil.NewConsumerDependencyRelation(ctx, domainProject, consumer)
- services, err := dr.GetDependencyProviders(toDependencyFilterOptions(request)...)
+ services, err := serviceUtil.GetProviders(ctx, domainProject, consumer, toDependencyFilterOptions(request)...)
if err != nil {
log.Error(fmt.Sprintf("query consumer failed, consumer is %s/%s/%s/%s",
consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version), err)
@@ -122,57 +118,3 @@ func (dm *DepManager) DependencyHandle(ctx context.Context) error {
}
return nil
}
-
-func (dm *DepManager) AddOrUpdateDependencies(ctx context.Context, dependencyInfos []*pb.ConsumerDependency, override bool) (*pb.Response, error) {
- opts := make([]client.PluginOp, 0, len(dependencyInfos))
- domainProject := util.ParseDomainProject(ctx)
- for _, dependencyInfo := range dependencyInfos {
- consumerFlag := util.StringJoin([]string{dependencyInfo.Consumer.Environment, dependencyInfo.Consumer.AppId, dependencyInfo.Consumer.ServiceName, dependencyInfo.Consumer.Version}, "/")
- consumerInfo := pb.DependenciesToKeys([]*pb.MicroServiceKey{dependencyInfo.Consumer}, domainProject)[0]
- providersInfo := pb.DependenciesToKeys(dependencyInfo.Providers, domainProject)
-
- rsp := serviceUtil.ParamsChecker(consumerInfo, providersInfo)
- if rsp != nil {
- log.Errorf(nil, "put request into dependency queue failed, override: %t, consumer is %s, %s",
- override, consumerFlag, rsp.Response.GetMessage())
- return rsp.Response, nil
- }
-
- consumerID, err := serviceUtil.GetServiceID(ctx, consumerInfo)
- if err != nil {
- log.Errorf(err, "put request into dependency queue failed, override: %t, get consumer[%s] id failed",
- override, consumerFlag)
- return pb.CreateResponse(pb.ErrInternal, err.Error()), err
- }
- if len(consumerID) == 0 {
- log.Errorf(nil, "put request into dependency queue failed, override: %t, consumer[%s] does not exist",
- override, consumerFlag)
- return pb.CreateResponse(pb.ErrServiceNotExists, fmt.Sprintf("Consumer %s does not exist.", consumerFlag)), nil
- }
-
- dependencyInfo.Override = override
- data, err := json.Marshal(dependencyInfo)
- if err != nil {
- log.Errorf(err, "put request into dependency queue failed, override: %t, marshal consumer[%s] dependency failed",
- override, consumerFlag)
- return pb.CreateResponse(pb.ErrInternal, err.Error()), err
- }
-
- id := path.DepsQueueUUID
- if !override {
- id = util.GenerateUUID()
- }
- key := path.GenerateConsumerDependencyQueueKey(domainProject, consumerID, id)
- opts = append(opts, client.OpPut(client.WithStrKey(key), client.WithValue(data)))
- }
-
- err := client.BatchCommit(ctx, opts)
- if err != nil {
- log.Errorf(err, "put request into dependency queue failed, override: %t, %v", override, dependencyInfos)
- return pb.CreateResponse(pb.ErrInternal, err.Error()), err
- }
-
- log.Infof("put request into dependency queue successfully, override: %t, %v, from remote %s",
- override, dependencyInfos, util.GetIPFromContext(ctx))
- return pb.CreateResponse(pb.ResponseSuccess, "Create dependency successfully."), nil
-}
diff --git a/datasource/etcd/event/dependency_event_handler.go b/datasource/etcd/event/dependency_event_handler.go
index c1cc6f5..57eef20 100644
--- a/datasource/etcd/event/dependency_event_handler.go
+++ b/datasource/etcd/event/dependency_event_handler.go
@@ -191,16 +191,10 @@ func (h *DependencyEventHandler) dependencyRuleHandle(res interface{}) error {
providersInfo := pb.DependenciesToKeys(r.Providers, domainProject)
var dep serviceUtil.Dependency
- var err error
dep.DomainProject = domainProject
dep.Consumer = consumerInfo
dep.ProvidersRule = providersInfo
- if r.Override {
- err = serviceUtil.CreateDependencyRule(ctx, &dep)
- } else {
- err = serviceUtil.AddDependencyRule(ctx, &dep)
- }
-
+ err := serviceUtil.AddDependencyRule(ctx, &dep)
if err != nil {
log.Errorf(err, "modify dependency rule failed, override: %t, consumer %s", r.Override, consumerFlag)
return fmt.Errorf("override: %t, consumer is %s, %s", r.Override, consumerFlag, err.Error())
diff --git a/datasource/etcd/event/dependency_rule_event_handler_test.go b/datasource/etcd/event/dependency_rule_event_handler_test.go
index 4d7a283..15c2866 100644
--- a/datasource/etcd/event/dependency_rule_event_handler_test.go
+++ b/datasource/etcd/event/dependency_rule_event_handler_test.go
@@ -30,36 +30,36 @@ import (
func TestNewDependencyRuleEventHandler(t *testing.T) {
consumerId := "1"
provider := &pb.MicroServiceKey{Tenant: "x/y", Version: "0+"}
- b := cache.DependencyRule.ExistVersionRule(context.Background(), consumerId, provider)
+ b := cache.DependencyRule.ExistRule(context.Background(), consumerId, provider)
if b {
t.Fatalf("TestNewDependencyRuleEventHandler failed")
}
h := NewDependencyRuleEventHandler()
h.OnEvent(sd.KvEvent{Type: pb.EVT_CREATE})
- b = cache.DependencyRule.ExistVersionRule(context.Background(), consumerId, provider)
+ b = cache.DependencyRule.ExistRule(context.Background(), consumerId, provider)
if !b {
t.Fatalf("TestNewDependencyRuleEventHandler failed")
}
h.OnEvent(sd.KvEvent{Type: pb.EVT_INIT})
- b = cache.DependencyRule.ExistVersionRule(context.Background(), consumerId, provider)
+ b = cache.DependencyRule.ExistRule(context.Background(), consumerId, provider)
if !b {
t.Fatalf("TestNewDependencyRuleEventHandler failed")
}
h.OnEvent(sd.KvEvent{Type: pb.EVT_UPDATE, KV: &sd.KeyValue{
Key: []byte(path.GenerateProviderDependencyRuleKey("x/y", provider))}})
- b = cache.DependencyRule.ExistVersionRule(context.Background(), consumerId, provider)
+ b = cache.DependencyRule.ExistRule(context.Background(), consumerId, provider)
if b {
t.Fatalf("TestNewDependencyRuleEventHandler failed")
}
h.OnEvent(sd.KvEvent{Type: pb.EVT_DELETE, KV: &sd.KeyValue{
Key: []byte(path.GenerateProviderDependencyRuleKey("x/y", provider))}})
- b = cache.DependencyRule.ExistVersionRule(context.Background(), consumerId, provider)
+ b = cache.DependencyRule.ExistRule(context.Background(), consumerId, provider)
if b {
t.Fatalf("TestNewDependencyRuleEventHandler failed")
}
h.OnEvent(sd.KvEvent{Type: pb.EVT_DELETE, KV: &sd.KeyValue{
Key: []byte(path.GenerateConsumerDependencyRuleKey("x/y", provider))}})
- b = cache.DependencyRule.ExistVersionRule(context.Background(), consumerId, provider)
+ b = cache.DependencyRule.ExistRule(context.Background(), consumerId, provider)
if !b {
t.Fatalf("TestNewDependencyRuleEventHandler failed")
}
diff --git a/datasource/etcd/ms.go b/datasource/etcd/ms.go
index 7b8596e..a17f9c1 100644
--- a/datasource/etcd/ms.go
+++ b/datasource/etcd/ms.go
@@ -64,7 +64,7 @@ func newMetadataManager(schemaNotEditable bool, instanceTTL int64) datasource.Me
}
}
-// RegisterService() implement:
+// RegisterService implement:
// 1. capsule request to etcd kv format
// 2. invoke etcd client to store data
// 3. check etcd-client response && construct createServiceResponse
@@ -409,14 +409,14 @@ func (ds *MetadataManager) ExistService(ctx context.Context, request *pb.GetExis
serviceFlag := util.StringJoin([]string{
request.Environment, request.AppId, request.ServiceName, request.Version}, path.SPLIT)
- ids, exist, err := serviceUtil.FindServiceIds(ctx, request.Version, &pb.MicroServiceKey{
+ ids, exist, err := serviceUtil.FindServiceIds(ctx, &pb.MicroServiceKey{
Environment: request.Environment,
AppId: request.AppId,
ServiceName: request.ServiceName,
Alias: request.ServiceName,
Version: request.Version,
Tenant: domainProject,
- })
+ }, true)
if err != nil {
log.Error(fmt.Sprintf("micro-service[%s] exist failed, find serviceIDs failed", serviceFlag), err)
return &pb.GetExistenceResponse{
@@ -881,7 +881,6 @@ func (ds *MetadataManager) FindInstances(ctx context.Context, request *pb.FindIn
AppId: request.AppId,
ServiceName: request.ServiceName,
Alias: request.Alias,
- Version: request.VersionRule,
}
rev, ok := ctx.Value(util.CtxRequestRevision).(string)
@@ -908,15 +907,15 @@ func (ds *MetadataManager) findInstance(ctx context.Context, request *pb.FindIns
service, err = serviceUtil.GetService(ctx, domainProject, request.ConsumerServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
- log.Debug(fmt.Sprintf("consumer does not exist, consumer[%s] find provider[%s/%s/%s/%s]",
- request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName, request.VersionRule))
+ log.Debug(fmt.Sprintf("consumer does not exist, consumer[%s] find provider[%s/%s/%s]",
+ request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName))
return &pb.FindInstancesResponse{
Response: pb.CreateResponse(pb.ErrServiceNotExists,
fmt.Sprintf("Consumer[%s] does not exist.", request.ConsumerServiceId)),
}, nil
}
- log.Error(fmt.Sprintf("get consumer failed, consumer[%s] find provider[%s/%s/%s/%s]",
- request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName, request.VersionRule), err)
+ log.Error(fmt.Sprintf("get consumer failed, consumer[%s] find provider[%s/%s/%s]",
+ request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName), err)
return &pb.FindInstancesResponse{
Response: pb.CreateResponse(pb.ErrInternal, err.Error()),
}, err
@@ -929,9 +928,9 @@ func (ds *MetadataManager) findInstance(ctx context.Context, request *pb.FindIns
ctx = util.SetTargetDomainProject(ctx, util.ParseDomain(ctx), util.ParseProject(ctx))
provider.Tenant = util.ParseTargetDomainProject(ctx)
- findFlag := fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find provider[%s/%s/%s/%s]",
+ findFlag := fmt.Sprintf("Consumer[%s][%s/%s/%s/%s] find provider[%s/%s/%s]",
request.ConsumerServiceId, service.Environment, service.AppId, service.ServiceName, service.Version,
- provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
+ provider.Environment, provider.AppId, provider.ServiceName)
// cache
var item *cache.VersionRuleCacheItem
@@ -953,7 +952,7 @@ func (ds *MetadataManager) findInstance(ctx context.Context, request *pb.FindIns
// add dependency queue
if len(request.ConsumerServiceId) > 0 &&
len(item.ServiceIds) > 0 &&
- !cache.DependencyRule.ExistVersionRule(ctx, request.ConsumerServiceId, provider) {
+ !cache.DependencyRule.ExistRule(ctx, request.ConsumerServiceId, provider) {
provider, err = ds.reshapeProviderKey(ctx, provider, item.ServiceIds[0])
if err != nil {
return nil, err
@@ -1022,15 +1021,14 @@ func (ds *MetadataManager) genFindResult(ctx context.Context, oldRev string, ite
func (ds *MetadataManager) reshapeProviderKey(ctx context.Context, provider *pb.MicroServiceKey, providerID string) (
*pb.MicroServiceKey, error) {
- //维护version的规则,service name 可能是别名,所以重新获取
+ // service name 可能是别名,所以重新获取
providerService, err := serviceUtil.GetService(ctx, provider.Tenant, providerID)
if err != nil {
return nil, err
}
- versionRule := provider.Version
provider = pb.MicroServiceToKey(provider.Tenant, providerService)
- provider.Version = versionRule
+ provider.Version = ""
return provider, nil
}
@@ -1200,7 +1198,6 @@ func (ds *MetadataManager) batchFindServices(ctx context.Context, request *pb.Ba
ConsumerServiceId: request.ConsumerServiceId,
AppId: key.Service.AppId,
ServiceName: key.Service.ServiceName,
- VersionRule: key.Service.Version,
Environment: key.Service.Environment,
})
if err != nil {
@@ -2045,8 +2042,7 @@ func (ds *MetadataManager) DeleteServicePri(ctx context.Context, serviceID strin
// 强制删除,则与该服务相关的信息删除,非强制删除: 如果作为该被依赖(作为provider,提供服务,且不是只存在自依赖)或者存在实例,则不能删除
if !force {
- dr := serviceUtil.NewProviderDependencyRelation(ctx, domainProject, microservice)
- services, err := dr.GetDependencyConsumerIds()
+ services, err := serviceUtil.GetConsumerIds(ctx, domainProject, microservice)
if err != nil {
log.Errorf(err, "delete micro-service[%s] failed, get service dependency failed, operator: %s",
serviceID, remoteIP)
@@ -2100,14 +2096,6 @@ func (ds *MetadataManager) DeleteServicePri(ctx context.Context, serviceID strin
}
opts = append(opts, optDeleteDep)
- //删除黑白名单
- opts = append(opts, client.OpDel(
- client.WithStrKey(path.GenerateServiceRuleKey(domainProject, serviceID, "")),
- client.WithPrefix()))
- opts = append(opts, client.OpDel(client.WithStrKey(
- util.StringJoin([]string{path.GetServiceRuleIndexRootKey(domainProject), serviceID, ""}, path.SPLIT)),
- client.WithPrefix()))
-
//删除schemas
opts = append(opts, client.OpDel(
client.WithStrKey(path.GenerateServiceSchemaKey(domainProject, serviceID, "")),
diff --git a/datasource/etcd/path/key_convertor.go b/datasource/etcd/path/key_convertor.go
index 774a6cb..fffd76c 100644
--- a/datasource/etcd/path/key_convertor.go
+++ b/datasource/etcd/path/key_convertor.go
@@ -71,18 +71,6 @@ func GetInfoFromProjectKV(key []byte) (domain, project string) {
return keys[l-2], keys[l-1]
}
-func GetInfoFromRuleKV(key []byte) (serviceID, ruleID, domainProject string) {
- keys := ToResponse(key)
- l := len(keys)
- if l < 4 {
- return
- }
- serviceID = keys[l-2]
- ruleID = keys[l-1]
- domainProject = fmt.Sprintf("%s/%s", keys[l-4], keys[l-3])
- return
-}
-
func GetInfoFromTagKV(key []byte) (serviceID, domainProject string) {
keys := ToResponse(key)
l := len(keys)
diff --git a/datasource/etcd/path/key_convertor_test.go b/datasource/etcd/path/key_convertor_test.go
index 459faf9..add76d3 100644
--- a/datasource/etcd/path/key_convertor_test.go
+++ b/datasource/etcd/path/key_convertor_test.go
@@ -52,13 +52,6 @@ func TestGetInfoFromKV(t *testing.T) {
d, p = path.GetInfoFromProjectKV([]byte("sdf"))
assert.False(t, d != "" || p != "")
- var r string
- s, r, d = path.GetInfoFromRuleKV([]byte(path.GenerateServiceRuleKey("a/b", "c", "d")))
- assert.False(t, d != "a/b" || s != "c" || r != "d")
-
- s, r, d = path.GetInfoFromRuleKV([]byte("sdf"))
- assert.False(t, d != "" || s != "" || r != "")
-
s, d = path.GetInfoFromTagKV([]byte(path.GenerateServiceTagKey("a/b", "c")))
assert.False(t, d != "a/b" || s != "c")
@@ -105,13 +98,6 @@ func TestGetInfoFromKV(t *testing.T) {
dt, k := path.GetInfoFromDependencyRuleKV([]byte(path.GenerateProviderDependencyRuleKey("a/b", &discovery.MicroServiceKey{
Tenant: "a/b",
AppId: "c",
- ServiceName: "*",
- })))
- assert.False(t, dt != path.DepsProvider || k == nil || k.AppId != "" || k.ServiceName != "*")
-
- dt, k = path.GetInfoFromDependencyRuleKV([]byte(path.GenerateProviderDependencyRuleKey("a/b", &discovery.MicroServiceKey{
- Tenant: "a/b",
- AppId: "c",
ServiceName: "d",
Version: "e",
})))
diff --git a/datasource/etcd/path/key_generator.go b/datasource/etcd/path/key_generator.go
index d95563c..2a7db02 100644
--- a/datasource/etcd/path/key_generator.go
+++ b/datasource/etcd/path/key_generator.go
@@ -31,8 +31,6 @@ const (
RegistryInstanceKey = "inst"
RegistryFile = "files"
RegistryIndex = "indexes"
- RegistryRuleKey = "rules"
- RegistryRuleIndexKey = "rule-indexes"
RegistryDomainKey = "domains"
RegistryProjectKey = "projects"
RegistryAliasKey = "alias"
@@ -40,7 +38,6 @@ const (
RegistrySchemaKey = "schemas"
RegistrySchemaSummaryKey = "schema-sum"
RegistryLeaseKey = "leases"
- RegistryDependencyKey = "deps"
RegistryDepsRuleKey = "dep-rules"
RegistryDepsQueueKey = "dep-queue"
RegistryMetricsKey = "metrics"
@@ -83,6 +80,7 @@ func GenerateRBACAccountKey(name string) string {
name,
}, SPLIT)
}
+
func GenerateRBACRoleKey(name string) string {
return util.StringJoin([]string{
GetRootKey(),
@@ -90,6 +88,7 @@ func GenerateRBACRoleKey(name string) string {
name,
}, SPLIT)
}
+
func GenRoleAccountIdxKey(role, account string) string {
return util.StringJoin([]string{
GetRootKey(),
@@ -97,6 +96,7 @@ func GenRoleAccountIdxKey(role, account string) string {
role, account,
}, SPLIT)
}
+
func GenRoleAccountPrefixIdxKey(role string) string {
return util.StringJoin([]string{
GetRootKey(),
@@ -147,24 +147,6 @@ func GetServiceAppKey(domainProject, env, appID string) string {
}, SPLIT)
}
-func GetServiceRuleRootKey(domainProject string) string {
- return util.StringJoin([]string{
- GetRootKey(),
- RegistryServiceKey,
- RegistryRuleKey,
- domainProject,
- }, SPLIT)
-}
-
-func GetServiceRuleIndexRootKey(domainProject string) string {
- return util.StringJoin([]string{
- GetRootKey(),
- RegistryServiceKey,
- RegistryRuleIndexKey,
- domainProject,
- }, SPLIT)
-}
-
func GetServiceTagRootKey(domainProject string) string {
return util.StringJoin([]string{
GetRootKey(),
@@ -201,15 +183,6 @@ func GetInstanceLeaseRootKey(domainProject string) string {
}, SPLIT)
}
-func GenerateRuleIndexKey(domainProject string, serviceID string, attr string, pattern string) string {
- return util.StringJoin([]string{
- GetServiceRuleIndexRootKey(domainProject),
- serviceID,
- attr,
- pattern,
- }, SPLIT)
-}
-
func GenerateServiceIndexKey(key *discovery.MicroServiceKey) string {
return util.StringJoin([]string{
GetServiceIndexRootKey(key.Tenant),
@@ -230,14 +203,6 @@ func GenerateServiceAliasKey(key *discovery.MicroServiceKey) string {
}, SPLIT)
}
-func GenerateServiceRuleKey(domainProject string, serviceID string, ruleID string) string {
- return util.StringJoin([]string{
- GetServiceRuleRootKey(domainProject),
- serviceID,
- ruleID,
- }, SPLIT)
-}
-
func GenerateServiceTagKey(domainProject string, serviceID string) string {
return util.StringJoin([]string{
GetServiceTagRootKey(domainProject),
@@ -293,14 +258,6 @@ func GenerateServiceDependencyRuleKey(serviceType string, domainProject string,
serviceType,
}, SPLIT)
}
- if in.ServiceName == "*" {
- return util.StringJoin([]string{
- GetServiceDependencyRuleRootKey(domainProject),
- serviceType,
- in.Environment,
- in.ServiceName,
- }, SPLIT)
- }
return util.StringJoin([]string{
GetServiceDependencyRuleRootKey(domainProject),
serviceType,
@@ -345,15 +302,6 @@ func GenerateConsumerDependencyQueueKey(domainProject, consumerID, uuid string)
}, SPLIT)
}
-func GetServiceDependencyRootKey(domainProject string) string {
- return util.StringJoin([]string{
- GetRootKey(),
- RegistryServiceKey,
- RegistryDependencyKey,
- domainProject,
- }, SPLIT)
-}
-
func GenerateAccountKey(name string) string {
return util.StringJoin([]string{
GetRootKey(),
@@ -361,6 +309,7 @@ func GenerateAccountKey(name string) string {
name,
}, SPLIT)
}
+
func GenerateAccountLockKey(key string) string {
return util.StringJoin([]string{
GetRootKey(),
@@ -368,12 +317,14 @@ func GenerateAccountLockKey(key string) string {
key,
}, SPLIT)
}
+
func GenerateRBACSecretKey() string {
return util.StringJoin([]string{
GetRootKey(),
"rbac/secret",
}, SPLIT)
}
+
func GetServerInfoKey() string {
return util.StringJoin([]string{
GetRootKey(),
diff --git a/datasource/etcd/path/key_generator_test.go b/datasource/etcd/path/key_generator_test.go
index 2614ae1..7e132d8 100644
--- a/datasource/etcd/path/key_generator_test.go
+++ b/datasource/etcd/path/key_generator_test.go
@@ -57,13 +57,6 @@ func TestGenerateDependencyRuleKey(t *testing.T) {
Version: "4",
})
assert.Equal(t, "/cse-sr/ms/dep-rules/a/c/1/2/3/4", k)
- k = path.GenerateConsumerDependencyRuleKey("a", &discovery.MicroServiceKey{
- Environment: "1",
- AppId: "2",
- ServiceName: "*",
- Version: "4",
- })
- assert.Equal(t, "/cse-sr/ms/dep-rules/a/c/1/*", k)
// provider
k = path.GenerateProviderDependencyRuleKey("a", nil)
@@ -76,12 +69,4 @@ func TestGenerateDependencyRuleKey(t *testing.T) {
Version: "4",
})
assert.Equal(t, "/cse-sr/ms/dep-rules/a/p/1/2/3/4", k)
-
- k = path.GenerateProviderDependencyRuleKey("a", &discovery.MicroServiceKey{
- Environment: "1",
- AppId: "2",
- ServiceName: "*",
- Version: "4",
- })
- assert.Equal(t, "/cse-sr/ms/dep-rules/a/p/1/*", k)
}
diff --git a/datasource/etcd/util.go b/datasource/etcd/util.go
index a6afef3..47d1c7a 100644
--- a/datasource/etcd/util.go
+++ b/datasource/etcd/util.go
@@ -254,8 +254,7 @@ func getServiceDetailUtil(ctx context.Context, serviceDetailOpt ServiceDetailOpt
serviceDetail.SchemaInfos = schemas
case "dependencies":
service := serviceDetailOpt.service
- dr := serviceUtil.NewDependencyRelation(ctx, domainProject, service, service)
- consumers, err := dr.GetDependencyConsumers(
+ consumers, err := serviceUtil.GetConsumers(ctx, domainProject, service,
serviceUtil.WithoutSelfDependency(),
serviceUtil.WithSameDomainProject())
if err != nil {
@@ -263,7 +262,7 @@ func getServiceDetailUtil(ctx context.Context, serviceDetailOpt ServiceDetailOpt
service.ServiceId, service.Environment, service.AppId, service.ServiceName, service.Version)
return nil, err
}
- providers, err := dr.GetDependencyProviders(
+ providers, err := serviceUtil.GetProviders(ctx, domainProject, service,
serviceUtil.WithoutSelfDependency(),
serviceUtil.WithSameDomainProject())
if err != nil {
diff --git a/datasource/etcd/util/dependency.go b/datasource/etcd/util/dependency.go
index 812be89..7e06057 100644
--- a/datasource/etcd/util/dependency.go
+++ b/datasource/etcd/util/dependency.go
@@ -75,8 +75,8 @@ func (dep *Dependency) removeConsumerOfProviderRule(ctx context.Context) ([]clie
func (dep *Dependency) addConsumerOfProviderRule(ctx context.Context) ([]client.PluginOp, error) {
opts := make([]client.PluginOp, 0, len(dep.CreateDependencyRuleList))
for _, providerRule := range dep.CreateDependencyRuleList {
- proProkey := path.GenerateProviderDependencyRuleKey(providerRule.Tenant, providerRule)
- tmpValue, err := TransferToMicroServiceDependency(ctx, proProkey)
+ providerRuleKey := path.GenerateProviderDependencyRuleKey(providerRule.Tenant, providerRule)
+ tmpValue, err := TransferToMicroServiceDependency(ctx, providerRuleKey)
if err != nil {
return nil, err
}
@@ -88,11 +88,8 @@ func (dep *Dependency) addConsumerOfProviderRule(ctx context.Context) ([]client.
return nil, errMarshal
}
opts = append(opts, client.OpPut(
- client.WithStrKey(proProkey),
+ client.WithStrKey(providerRuleKey),
client.WithValue(data)))
- if providerRule.ServiceName == "*" {
- break
- }
}
return opts, nil
}
diff --git a/datasource/etcd/util/dependency_query.go b/datasource/etcd/util/dependency_query.go
index d476198..9d93707 100644
--- a/datasource/etcd/util/dependency_query.go
+++ b/datasource/etcd/util/dependency_query.go
@@ -21,7 +21,6 @@ import (
"context"
"errors"
"fmt"
- "strings"
pb "github.com/go-chassis/cari/discovery"
@@ -30,7 +29,6 @@ import (
"github.com/apache/servicecomb-service-center/datasource/etcd/kv"
"github.com/apache/servicecomb-service-center/datasource/etcd/path"
"github.com/apache/servicecomb-service-center/pkg/log"
- "github.com/apache/servicecomb-service-center/pkg/util"
)
// DependencyRelationFilterOpt contains SameDomainProject and NonSelf flag
@@ -85,10 +83,6 @@ func (dr *DependencyRelation) GetDependencyProviders(opts ...DependencyRelationF
return nil, err
}
- if key.ServiceName == "*" {
- services = services[:0]
- }
-
for _, providerID := range providerIDs {
provider, err := GetService(dr.ctx, key.Tenant, providerID)
if err != nil {
@@ -106,15 +100,11 @@ func (dr *DependencyRelation) GetDependencyProviders(opts ...DependencyRelationF
}
services = append(services, provider)
}
-
- if key.ServiceName == "*" {
- break
- }
}
return services, nil
}
-func (dr *DependencyRelation) GetDependencyProviderIds() ([]string, error) {
+func (dr *DependencyRelation) getDependencyProviderIds() ([]string, error) {
keys, err := dr.getProviderKeys()
if err != nil {
return nil, err
@@ -124,7 +114,7 @@ func (dr *DependencyRelation) GetDependencyProviderIds() ([]string, error) {
func (dr *DependencyRelation) getProviderKeys() ([]*pb.MicroServiceKey, error) {
if dr.consumer == nil {
- return nil, fmt.Errorf("Invalid consumer")
+ return nil, errors.New("invalid consumer")
}
consumerMicroServiceKey := pb.MicroServiceToKey(dr.domainProject, dr.consumer)
@@ -140,52 +130,23 @@ func (dr *DependencyRelation) GetProviderIdsByRules(providerRules []*pb.MicroSer
provideServiceIds := make([]string, 0, len(providerRules))
for _, provider := range providerRules {
serviceIDs, err := dr.parseDependencyRule(provider)
- switch {
- case provider.ServiceName == "*":
- if err != nil {
- log.Errorf(err, "get all serviceIDs failed")
- return provideServiceIds, err
- }
- return serviceIDs, nil
- default:
- if err != nil {
- log.Errorf(err, "get service[%s/%s/%s/%s]'s providerIDs failed",
- provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
- return provideServiceIds, err
- }
- if len(serviceIDs) == 0 {
- log.Warnf("get service[%s/%s/%s/%s]'s providerIDs is empty",
- provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
- continue
- }
- provideServiceIds = append(provideServiceIds, serviceIDs...)
+ if err != nil {
+ log.Errorf(err, "get service[%s/%s/%s/%s]'s providerIDs failed",
+ provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
+ return provideServiceIds, err
}
+ if len(serviceIDs) == 0 {
+ log.Warnf("get service[%s/%s/%s/%s]'s providerIDs is empty",
+ provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
+ continue
+ }
+ provideServiceIds = append(provideServiceIds, serviceIDs...)
}
return provideServiceIds, nil
}
func (dr *DependencyRelation) parseDependencyRule(dependencyRule *pb.MicroServiceKey) (serviceIDs []string, err error) {
- opts := FromContext(dr.ctx)
- switch {
- case dependencyRule.ServiceName == "*":
- log.Infof("service[%s/%s/%s/%s] rely all service",
- dr.consumer.Environment, dr.consumer.AppId, dr.consumer.ServiceName, dr.consumer.Version)
- splited := strings.Split(path.GenerateServiceIndexKey(dependencyRule), "/")
- allServiceKey := util.StringJoin(splited[:len(splited)-3], "/") + "/"
- sopts := append(opts,
- client.WithStrKey(allServiceKey),
- client.WithPrefix())
- resp, err := kv.Store().ServiceIndex().Search(dr.ctx, sopts...)
- if err != nil {
- return nil, err
- }
-
- for _, kv := range resp.Kvs {
- serviceIDs = append(serviceIDs, kv.Value.(string))
- }
- default:
- serviceIDs, _, err = FindServiceIds(dr.ctx, dependencyRule.Version, dependencyRule)
- }
+ serviceIDs, _, err = FindServiceIds(dr.ctx, dependencyRule, false)
return
}
@@ -235,7 +196,7 @@ func (dr *DependencyRelation) GetServiceByMicroServiceKey(service *pb.MicroServi
return GetService(dr.ctx, service.Tenant, serviceID)
}
-func (dr *DependencyRelation) GetDependencyConsumerIds() ([]string, error) {
+func (dr *DependencyRelation) getDependencyConsumerIds() ([]string, error) {
consumerDependAllList, err := dr.GetDependencyConsumersOfProvider()
if err != nil {
return nil, err
@@ -261,49 +222,22 @@ func (dr *DependencyRelation) GetDependencyConsumerIds() ([]string, error) {
func (dr *DependencyRelation) GetDependencyConsumersOfProvider() ([]*pb.MicroServiceKey, error) {
if dr.provider == nil {
- return nil, fmt.Errorf("Invalid provider")
+ return nil, errors.New("invalid provider")
}
providerService := pb.MicroServiceToKey(dr.domainProject, dr.provider)
- consumerDependAllList, err := dr.getConsumerOfDependAllServices()
- if err != nil {
- log.Errorf(err, "get consumers that depend on all services failed, %s", dr.provider.ServiceId)
- return nil, err
- }
-
consumerDependList, err := dr.GetConsumerOfSameServiceNameAndAppID(providerService)
if err != nil {
log.Errorf(err, "get consumers that depend on rule[%s/%s/%s/%s] failed",
dr.provider.Environment, dr.provider.AppId, dr.provider.ServiceName, dr.provider.Version)
return nil, err
}
- consumerDependAllList = append(consumerDependAllList, consumerDependList...)
- return consumerDependAllList, nil
-}
-
-func (dr *DependencyRelation) getConsumerOfDependAllServices() ([]*pb.MicroServiceKey, error) {
- providerService := pb.MicroServiceToKey(dr.domainProject, dr.provider)
- providerService.ServiceName = "*"
- relyAllKey := path.GenerateProviderDependencyRuleKey(dr.domainProject, providerService)
- opts := append(FromContext(dr.ctx), client.WithStrKey(relyAllKey))
- rsp, err := kv.Store().DependencyRule().Search(dr.ctx, opts...)
- if err != nil {
- log.Errorf(err, "get consumers that rely all service failed, %s/%s/%s/%s",
- dr.provider.Environment, dr.provider.AppId, dr.provider.ServiceName, dr.provider.Version)
- return nil, err
- }
- if len(rsp.Kvs) != 0 {
- log.Infof("exist consumers that rely all service, %s/%s/%s/%s",
- dr.provider.Environment, dr.provider.AppId, dr.provider.ServiceName, dr.provider.Version)
- return rsp.Kvs[0].Value.(*pb.MicroServiceDependency).Dependency, nil
- }
- return nil, nil
+ return consumerDependList, nil
}
func (dr *DependencyRelation) GetConsumerOfSameServiceNameAndAppID(provider *pb.MicroServiceKey) ([]*pb.MicroServiceKey, error) {
- providerVersion := provider.Version
- provider.Version = ""
- prefix := path.GenerateProviderDependencyRuleKey(dr.domainProject, provider)
- provider.Version = providerVersion
+ copy := *provider
+ copy.Version = ""
+ prefix := path.GenerateProviderDependencyRuleKey(dr.domainProject, ©)
opts := append(FromContext(dr.ctx),
client.WithStrKey(prefix),
@@ -316,36 +250,7 @@ func (dr *DependencyRelation) GetConsumerOfSameServiceNameAndAppID(provider *pb.
}
allConsumers := make([]*pb.MicroServiceKey, 0, len(rsp.Kvs))
- var latestServiceID []string
-
for _, kv := range rsp.Kvs {
- providerVersionRuleArr := strings.Split(util.BytesToStringWithNoCopy(kv.Key), "/")
- providerVersionRule := providerVersionRuleArr[len(providerVersionRuleArr)-1]
- if providerVersionRule == "latest" {
- if latestServiceID == nil {
- latestServiceID, _, err = FindServiceIds(dr.ctx, providerVersionRule, provider)
- if err != nil {
- log.Errorf(err, "get service[%s/%s/%s/%s]'s serviceID failed",
- provider.Environment, provider.AppId, provider.ServiceName, providerVersionRule)
- return nil, err
- }
- }
- if len(latestServiceID) == 0 {
- log.Infof("service[%s/%s/%s/%s] does not exist",
- provider.Environment, provider.AppId, provider.ServiceName, providerVersionRule)
- continue
- }
- if dr.provider.ServiceId != latestServiceID[0] {
- continue
- }
-
- } else {
- if !VersionMatchRule(providerVersion, providerVersionRule) {
- continue
- }
- }
-
- log.Debugf("providerETCD is %s", providerVersionRuleArr)
allConsumers = append(allConsumers, kv.Value.(*pb.MicroServiceDependency).Dependency...)
}
return allConsumers, nil
diff --git a/datasource/etcd/util/dependency_query_test.go b/datasource/etcd/util/dependency_query_test.go
new file mode 100644
index 0000000..a06eff7
--- /dev/null
+++ b/datasource/etcd/util/dependency_query_test.go
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package util
+
+import (
+ "context"
+ "errors"
+ "testing"
+
+ "github.com/apache/servicecomb-service-center/datasource"
+ "github.com/go-chassis/cari/discovery"
+ "github.com/stretchr/testify/assert"
+)
+
+func TestDependency(t *testing.T) {
+ d := &Dependency{
+ DeleteDependencyRuleList: []*discovery.MicroServiceKey{
+ {ServiceName: "b", Version: "1.0.0"},
+ },
+ CreateDependencyRuleList: []*discovery.MicroServiceKey{
+ {ServiceName: "a", Version: "1.0.0"},
+ },
+ }
+ err := d.Commit(context.Background())
+ if err != nil {
+ t.Fatalf(`Dependency_UpdateProvidersRuleOfConsumer failed`)
+ }
+
+ dr := NewDependencyRelation(context.Background(), "", &discovery.MicroService{}, &discovery.MicroService{})
+ _, err = dr.GetProviderIdsByRules([]*discovery.MicroServiceKey{
+ {ServiceName: "*"},
+ })
+ if err != nil {
+ t.Fatalf(`DependencyRelation_getDependencyProviderIds * failed`)
+ }
+ _, err = dr.GetProviderIdsByRules([]*discovery.MicroServiceKey{
+ {ServiceName: "a", Version: "1.0.0"},
+ {ServiceName: "b", Version: "latest"},
+ })
+ if err != nil {
+ t.Fatalf(`DependencyRelation_getDependencyProviderIds failed`)
+ }
+
+ _, err = dr.GetDependencyConsumers()
+ if err != nil {
+ t.Fatalf(`DependencyRelation_GetDependencyConsumers failed`)
+ }
+
+ t.Run("GetServiceByMicroServiceKey when service not exist", func(t *testing.T) {
+ _, err = dr.GetServiceByMicroServiceKey(&discovery.MicroServiceKey{})
+ if err != nil && !errors.Is(err, datasource.ErrNoData) {
+ t.Fatalf(`DependencyRelation_getServiceByMicroServiceKey failed`)
+ }
+ assert.Equal(t, datasource.ErrNoData, err, "service not exist")
+ })
+
+ _, err = dr.GetConsumerOfSameServiceNameAndAppID(&discovery.MicroServiceKey{})
+ if err != nil {
+ t.Fatalf(`DependencyRelation_getConsumerOfSameServiceNameAndAppId failed`)
+ }
+
+ dr = NewConsumerDependencyRelation(context.Background(), "", &discovery.MicroService{})
+ _, err = dr.GetDependencyConsumersOfProvider()
+ if err == nil {
+ t.Fatalf(`DependencyRelation_getDependencyConsumersOfProvider failed`)
+ }
+ _, err = dr.GetDependencyProviders()
+ if err != nil {
+ t.Fatalf(`DependencyRelation_GetDependencyProviders failed`)
+ }
+}
+
+func TestDependencyRelationFilterOpt(t *testing.T) {
+ op := ToDependencyRelationFilterOpt(
+ WithSameDomainProject(),
+ WithoutSelfDependency(),
+ )
+ if !op.NonSelf || !op.SameDomainProject {
+ t.Fatalf(`ToDependencyRelationFilterOpt failed`)
+ }
+}
diff --git a/datasource/etcd/util/dependency_util.go b/datasource/etcd/util/dependency_util.go
index dd00d02..bae4bac 100644
--- a/datasource/etcd/util/dependency_util.go
+++ b/datasource/etcd/util/dependency_util.go
@@ -35,7 +35,7 @@ import (
func GetConsumerIds(ctx context.Context, domainProject string, provider *pb.MicroService) ([]string, error) {
// 查询所有consumer
dr := NewProviderDependencyRelation(ctx, domainProject, provider)
- consumerIds, err := dr.GetDependencyConsumerIds()
+ consumerIds, err := dr.getDependencyConsumerIds()
if err != nil {
log.Errorf(err, "get service[%s]'s consumerIds failed", provider.ServiceId)
return nil, err
@@ -43,10 +43,16 @@ func GetConsumerIds(ctx context.Context, domainProject string, provider *pb.Micr
return consumerIds, nil
}
+func GetConsumers(ctx context.Context, domainProject string, provider *pb.MicroService,
+ opts ...DependencyRelationFilterOption) ([]*pb.MicroService, error) {
+ dr := NewProviderDependencyRelation(ctx, domainProject, provider)
+ return dr.GetDependencyConsumers(opts...)
+}
+
func GetProviderIds(ctx context.Context, domainProject string, consumer *pb.MicroService) ([]string, error) {
// 查询所有provider
dr := NewConsumerDependencyRelation(ctx, domainProject, consumer)
- providerIDs, err := dr.GetDependencyProviderIds()
+ providerIDs, err := dr.getDependencyProviderIds()
if err != nil {
log.Errorf(err, "get service[%s]'s providerIDs failed", consumer.ServiceId)
return nil, err
@@ -54,6 +60,12 @@ func GetProviderIds(ctx context.Context, domainProject string, consumer *pb.Micr
return providerIDs, nil
}
+func GetProviders(ctx context.Context, domainProject string, consumer *pb.MicroService,
+ opts ...DependencyRelationFilterOption) ([]*pb.MicroService, error) {
+ dr := NewConsumerDependencyRelation(ctx, domainProject, consumer)
+ return dr.GetDependencyProviders(opts...)
+}
+
func DependencyRuleExist(ctx context.Context, provider *pb.MicroServiceKey, consumer *pb.MicroServiceKey) (bool, error) {
targetDomainProject := provider.Tenant
if len(targetDomainProject) == 0 {
@@ -61,16 +73,16 @@ func DependencyRuleExist(ctx context.Context, provider *pb.MicroServiceKey, cons
}
consumerKey := path.GenerateConsumerDependencyRuleKey(consumer.Tenant, consumer)
- existed, err := DependencyRuleExistUtil(ctx, consumerKey, provider)
+ existed, err := DependencyRuleExistWithKey(ctx, consumerKey, provider)
if err != nil || existed {
return existed, err
}
providerKey := path.GenerateProviderDependencyRuleKey(targetDomainProject, provider)
- return DependencyRuleExistUtil(ctx, providerKey, consumer)
+ return DependencyRuleExistWithKey(ctx, providerKey, consumer)
}
-func DependencyRuleExistUtil(ctx context.Context, key string, target *pb.MicroServiceKey) (bool, error) {
+func DependencyRuleExistWithKey(ctx context.Context, key string, target *pb.MicroServiceKey) (bool, error) {
compareData, err := TransferToMicroServiceDependency(ctx, key)
if err != nil {
return false, err
@@ -108,17 +120,14 @@ func AddServiceVersionRule(ctx context.Context, domainProject string, consumer *
id := util.StringJoin([]string{provider.AppId, provider.ServiceName}, "_")
key := path.GenerateConsumerDependencyQueueKey(domainProject, consumer.ServiceId, id)
- resp, err := client.Instance().TxnWithCmp(ctx,
- nil,
- []client.CompareOp{client.OpCmp(client.CmpStrVal(key), client.CmpEqual, util.BytesToStringWithNoCopy(data))},
- []client.PluginOp{client.OpPut(client.WithStrKey(key), client.WithValue(data))})
+ override, err := client.Instance().PutNoOverride(ctx, client.WithStrKey(key), client.WithValue(data))
if err != nil {
return err
}
- if !resp.Succeeded {
- log.Infof("put in queue[%s/%s]: consumer[%s/%s/%s/%s] -> provider[%s/%s/%s/%s]", consumer.ServiceId, id,
+ if override {
+ log.Infof("put in queue[%s/%s]: consumer[%s/%s/%s/%s] -> provider[%s/%s/%s]", consumer.ServiceId, id,
consumer.Environment, consumer.AppId, consumer.ServiceName, consumer.Version,
- provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
+ provider.Environment, provider.AppId, provider.ServiceName)
}
return nil
}
@@ -177,13 +186,6 @@ func parseAddOrUpdateRules(ctx context.Context, dep *Dependency) (createDependen
if ok, _ := ContainServiceDependency(oldProviderRules.Dependency, tmpProviderRule); ok {
continue
}
-
- if tmpProviderRule.ServiceName == "*" {
- createDependencyRuleList = append([]*pb.MicroServiceKey{}, tmpProviderRule)
- deleteDependencyRuleList = oldProviderRules.Dependency
- break
- }
-
createDependencyRuleList = append(createDependencyRuleList, tmpProviderRule)
old := IsNeedUpdate(oldProviderRules.Dependency, tmpProviderRule)
if old != nil {
@@ -191,48 +193,14 @@ func parseAddOrUpdateRules(ctx context.Context, dep *Dependency) (createDependen
}
}
for _, oldProviderRule := range oldProviderRules.Dependency {
- if oldProviderRule.ServiceName == "*" {
- createDependencyRuleList = nil
- deleteDependencyRuleList = nil
- return
- }
if ok, _ := ContainServiceDependency(deleteDependencyRuleList, oldProviderRule); !ok {
existDependencyRuleList = append(existDependencyRuleList, oldProviderRule)
}
}
-
dep.ProvidersRule = append(createDependencyRuleList, existDependencyRuleList...)
return
}
-func parseOverrideRules(ctx context.Context, dep *Dependency) (createDependencyRuleList, existDependencyRuleList, deleteDependencyRuleList []*pb.MicroServiceKey) {
- conKey := path.GenerateConsumerDependencyRuleKey(dep.DomainProject, dep.Consumer)
-
- oldProviderRules, err := TransferToMicroServiceDependency(ctx, conKey)
- if err != nil {
- log.Errorf(err, "override dependency rule failed, get consumer[%s/%s/%s/%s]'s dependency rule failed",
- dep.Consumer.Environment, dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version)
- return
- }
-
- deleteDependencyRuleList = make([]*pb.MicroServiceKey, 0, len(oldProviderRules.Dependency))
- createDependencyRuleList = make([]*pb.MicroServiceKey, 0, len(dep.ProvidersRule))
- existDependencyRuleList = make([]*pb.MicroServiceKey, 0, len(oldProviderRules.Dependency))
- for _, oldProviderRule := range oldProviderRules.Dependency {
- if ok, _ := ContainServiceDependency(dep.ProvidersRule, oldProviderRule); !ok {
- deleteDependencyRuleList = append(deleteDependencyRuleList, oldProviderRule)
- } else {
- existDependencyRuleList = append(existDependencyRuleList, oldProviderRule)
- }
- }
- for _, tmpProviderRule := range dep.ProvidersRule {
- if ok, _ := ContainServiceDependency(existDependencyRuleList, tmpProviderRule); !ok {
- createDependencyRuleList = append(createDependencyRuleList, tmpProviderRule)
- }
- }
- return
-}
-
func syncDependencyRule(ctx context.Context, dep *Dependency, filter func(context.Context, *Dependency) (_, _, _ []*pb.MicroServiceKey)) error {
//更新consumer的providers的值,consumer的版本是确定的
consumerFlag := strings.Join([]string{dep.Consumer.Environment, dep.Consumer.AppId, dep.Consumer.ServiceName, dep.Consumer.Version}, "/")
@@ -259,10 +227,6 @@ func AddDependencyRule(ctx context.Context, dep *Dependency) error {
return syncDependencyRule(ctx, dep, parseAddOrUpdateRules)
}
-func CreateDependencyRule(ctx context.Context, dep *Dependency) error {
- return syncDependencyRule(ctx, dep, parseOverrideRules)
-}
-
func IsNeedUpdate(services []*pb.MicroServiceKey, service *pb.MicroServiceKey) *pb.MicroServiceKey {
for _, tmp := range services {
if DiffServiceVersion(tmp, service) {
@@ -343,19 +307,14 @@ func removeProviderRuleOfConsumer(ctx context.Context, domainProject string, cac
}
var ops []client.PluginOp
-loop:
for _, keyValue := range resp.Kvs {
var left []*pb.MicroServiceKey
all := keyValue.Value.(*pb.MicroServiceDependency).Dependency
for _, key := range all {
- if key.ServiceName == "*" {
- continue loop
- }
-
id := path.GenerateProviderDependencyRuleKey(key.Tenant, key)
exist, ok := cache[id]
if !ok {
- _, exist, err = FindServiceIds(ctx, key.Version, key)
+ _, exist, err = FindServiceIds(ctx, key, false)
if err != nil {
return nil, fmt.Errorf("%v, find service %s/%s/%s/%s",
err, key.Tenant, key.AppId, key.ServiceName, key.Version)
@@ -403,7 +362,7 @@ func RemoveProviderRuleKeys(ctx context.Context, domainProject string, cache map
continue
}
- _, exist, err = FindServiceIds(ctx, key.Version, key)
+ _, exist, err = FindServiceIds(ctx, key, false)
if err != nil {
return nil, fmt.Errorf("find service %s/%s/%s/%s, %v",
key.Tenant, key.AppId, key.ServiceName, key.Version, err)
diff --git a/datasource/etcd/util/dependency_test.go b/datasource/etcd/util/dependency_util_test.go
similarity index 64%
rename from datasource/etcd/util/dependency_test.go
rename to datasource/etcd/util/dependency_util_test.go
index 6e03a4a..f22f061 100644
--- a/datasource/etcd/util/dependency_test.go
+++ b/datasource/etcd/util/dependency_util_test.go
@@ -19,14 +19,10 @@ package util_test
import (
"context"
- "errors"
"testing"
- "github.com/go-chassis/cari/discovery"
- "github.com/stretchr/testify/assert"
-
- "github.com/apache/servicecomb-service-center/datasource"
. "github.com/apache/servicecomb-service-center/datasource/etcd/util"
+ "github.com/go-chassis/cari/discovery"
)
func TestDeleteDependencyForService(t *testing.T) {
@@ -59,15 +55,8 @@ func TestEqualServiceDependency(t *testing.T) {
}
}
-func TestCreateDependencyRule(t *testing.T) {
- err := CreateDependencyRule(context.Background(), &Dependency{
- Consumer: &discovery.MicroServiceKey{},
- })
- if err != nil {
- t.Fatalf(`CreateDependencyRule failed`)
- }
-
- err = AddDependencyRule(context.Background(), &Dependency{
+func TestAddDependencyRule(t *testing.T) {
+ err := AddDependencyRule(context.Background(), &Dependency{
Consumer: &discovery.MicroServiceKey{},
})
if err != nil {
@@ -117,9 +106,9 @@ func TestCreateDependencyRule(t *testing.T) {
}
func TestDependencyRuleExistUtil(t *testing.T) {
- _, err := DependencyRuleExistUtil(context.Background(), "", &discovery.MicroServiceKey{})
+ _, err := DependencyRuleExistWithKey(context.Background(), "", &discovery.MicroServiceKey{})
if err == nil {
- t.Fatalf(`DependencyRuleExistUtil failed`)
+ t.Fatalf(`DependencyRuleExistWithKey failed`)
}
}
@@ -197,64 +186,8 @@ func TestUpdateServiceForAddDependency(t *testing.T) {
}
}
-func TestDependency(t *testing.T) {
- d := &Dependency{
- DeleteDependencyRuleList: []*discovery.MicroServiceKey{
- {ServiceName: "b", Version: "1.0.0"},
- },
- CreateDependencyRuleList: []*discovery.MicroServiceKey{
- {ServiceName: "a", Version: "1.0.0"},
- },
- }
- err := d.Commit(context.Background())
- if err != nil {
- t.Fatalf(`Dependency_UpdateProvidersRuleOfConsumer failed`)
- }
-
- dr := NewDependencyRelation(context.Background(), "", &discovery.MicroService{}, &discovery.MicroService{})
- _, err = dr.GetProviderIdsByRules([]*discovery.MicroServiceKey{
- {ServiceName: "*"},
- })
- if err != nil {
- t.Fatalf(`DependencyRelation_getDependencyProviderIds * failed`)
- }
- _, err = dr.GetProviderIdsByRules([]*discovery.MicroServiceKey{
- {ServiceName: "a", Version: "1.0.0"},
- {ServiceName: "b", Version: "latest"},
- })
- if err != nil {
- t.Fatalf(`DependencyRelation_getDependencyProviderIds failed`)
- }
-
- _, err = dr.GetDependencyConsumers()
- if err != nil {
- t.Fatalf(`DependencyRelation_GetDependencyConsumers failed`)
- }
-
- t.Run("GetServiceByMicroServiceKey when service not exist", func(t *testing.T) {
- _, err = dr.GetServiceByMicroServiceKey(&discovery.MicroServiceKey{})
- if err != nil && !errors.Is(err, datasource.ErrNoData) {
- t.Fatalf(`DependencyRelation_getServiceByMicroServiceKey failed`)
- }
- assert.Equal(t, datasource.ErrNoData, err, "service not exist")
- })
-
- _, err = dr.GetConsumerOfSameServiceNameAndAppID(&discovery.MicroServiceKey{})
- if err != nil {
- t.Fatalf(`DependencyRelation_getConsumerOfSameServiceNameAndAppId failed`)
- }
-
- dr = NewConsumerDependencyRelation(context.Background(), "", &discovery.MicroService{})
- _, err = dr.GetDependencyConsumersOfProvider()
- if err == nil {
- t.Fatalf(`DependencyRelation_getDependencyConsumersOfProvider failed`)
- }
- _, err = dr.GetDependencyProviders()
- if err != nil {
- t.Fatalf(`DependencyRelation_GetDependencyProviders failed`)
- }
-
- err = CleanUpDependencyRules(context.Background(), "")
+func TestCleanUpDependencyRules(t *testing.T) {
+ err := CleanUpDependencyRules(context.Background(), "")
if err == nil {
t.Fatalf(`DependencyRelation_CleanUpDependencyRules failed`)
}
@@ -269,13 +202,3 @@ func TestDependency(t *testing.T) {
t.Fatalf(`DependencyRelation_removeProviderRuleKeys failed`)
}
}
-
-func TestDependencyRelationFilterOpt(t *testing.T) {
- op := ToDependencyRelationFilterOpt(
- WithSameDomainProject(),
- WithoutSelfDependency(),
- )
- if !op.NonSelf || !op.SameDomainProject {
- t.Fatalf(`ToDependencyRelationFilterOpt failed`)
- }
-}
diff --git a/datasource/etcd/util/microservice_util.go b/datasource/etcd/util/microservice_util.go
index b2c49d8..32b8e01 100644
--- a/datasource/etcd/util/microservice_util.go
+++ b/datasource/etcd/util/microservice_util.go
@@ -183,39 +183,40 @@ func GetServiceAllVersions(ctx context.Context, key *pb.MicroServiceKey, alias b
return resp, err
}
-func FindServiceIds(ctx context.Context, versionRule string, key *pb.MicroServiceKey) ([]string, bool, error) {
- // 版本规则
- match := ParseVersionRule(versionRule)
- if match == nil {
- copy := *key
- copy.Version = versionRule
- serviceID, err := GetServiceID(ctx, ©)
+// FindServiceIds return serviceIDs match the key, the existence of the micro-service without consider of version
+func FindServiceIds(ctx context.Context, key *pb.MicroServiceKey, matchVersion bool) ([]string, bool, error) {
+ resp, err := GetServiceAllVersions(ctx, key, false)
+ if err != nil {
+ return nil, false, err
+ }
+ fromEtcdKey := path.GetInfoFromSvcIndexKV
+ kvs := resp.Kvs
+ if len(kvs) == 0 {
+ resp, err := GetServiceAllVersions(ctx, key, true)
if err != nil {
return nil, false, err
}
- if len(serviceID) > 0 {
- return []string{serviceID}, true, nil
- }
- return nil, false, nil
+ fromEtcdKey = path.GetInfoFromSvcAliasKV
+ kvs = resp.Kvs
}
-
- searchAlias := false
- alsoFindAlias := len(key.Alias) > 0
-
-FIND_RULE:
- resp, err := GetServiceAllVersions(ctx, key, searchAlias)
- if err != nil {
- return nil, false, err
+ var (
+ etcdKeys [][]byte
+ serviceIDs []string
+ )
+ for _, kv := range kvs {
+ etcdKeys = append(etcdKeys, kv.Key)
+ serviceIDs = append(serviceIDs, kv.Value.(string))
}
- if len(resp.Kvs) == 0 {
- if !alsoFindAlias {
- return nil, false, nil
+ if !matchVersion {
+ return serviceIDs, len(serviceIDs) > 0, nil
+ }
+ for i, etcdKey := range etcdKeys {
+ serviceKey := fromEtcdKey(etcdKey)
+ if serviceKey.Version == key.Version {
+ return []string{serviceIDs[i]}, len(serviceIDs) > 0, nil
}
- searchAlias = true
- alsoFindAlias = false
- goto FIND_RULE
}
- return match(resp.Kvs), true, nil
+ return nil, len(serviceIDs) > 0, nil
}
func ServiceExist(ctx context.Context, domainProject string, serviceID string) bool {
diff --git a/datasource/etcd/util/util_suite_test.go b/datasource/etcd/util/util_test.go
similarity index 58%
rename from datasource/etcd/util/util_suite_test.go
rename to datasource/etcd/util/util_test.go
index bbe3823..ca52a00 100644
--- a/datasource/etcd/util/util_suite_test.go
+++ b/datasource/etcd/util/util_test.go
@@ -23,50 +23,84 @@ import (
"errors"
"testing"
- "github.com/stretchr/testify/assert"
+ _ "github.com/apache/servicecomb-service-center/test"
"github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/etcd/client"
- _ "github.com/apache/servicecomb-service-center/test"
-
serviceUtil "github.com/apache/servicecomb-service-center/datasource/etcd/util"
"github.com/apache/servicecomb-service-center/pkg/util"
-
proto "github.com/go-chassis/cari/discovery"
-
- . "github.com/onsi/ginkgo"
- "github.com/onsi/ginkgo/reporters"
-
- . "github.com/onsi/gomega"
+ "github.com/stretchr/testify/assert"
)
-func init() {
-}
-
-func TestMicroservice(t *testing.T) {
- RegisterFailHandler(Fail)
- junitReporter := reporters.NewJUnitReporter("util.junit.xml")
- RunSpecsWithDefaultAndCustomReporters(t, "util Suite", []Reporter{junitReporter})
+func getContextWith(domain string, project string) context.Context {
+ return util.WithNoCache(util.SetDomainProject(context.Background(), domain, project))
}
func TestFindServiceIds(t *testing.T) {
- _, _, err := serviceUtil.FindServiceIds(context.Background(),
- "latest", &proto.MicroServiceKey{})
- if err != nil {
- t.Fatalf("TestFindServiceIds failed")
- }
-
- _, _, err = serviceUtil.FindServiceIds(context.Background(),
- "1.0.0", &proto.MicroServiceKey{})
- if err != nil {
- t.Fatalf("TestFindServiceIds failed")
- }
+ ctx := getContextWith("default", "default")
+ t.Run("no service, should return empty", func(t *testing.T) {
+ ids, exist, err := serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{}, false)
+ assert.NoError(t, err)
+ assert.False(t, exist)
+ assert.Empty(t, ids)
+
+ ids, exist, err = serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{}, true)
+ assert.NoError(t, err)
+ assert.False(t, exist)
+ assert.Empty(t, ids)
+ })
- _, _, err = serviceUtil.FindServiceIds(context.Background(),
- "1.0+", &proto.MicroServiceKey{Alias: "test"})
- if err != nil {
- t.Fatalf("TestFindServiceIds failed")
- }
+ t.Run("exist service, should return empty", func(t *testing.T) {
+ resp, err := datasource.GetMetadataManager().RegisterService(ctx, &proto.CreateServiceRequest{
+ Service: &proto.MicroService{
+ Alias: "test_find_alias_ids",
+ ServiceName: "test_find_service_ids",
+ Version: "2.0",
+ },
+ })
+ assert.NoError(t, err)
+ serviceID1 := resp.ServiceId
+ defer datasource.GetMetadataManager().UnregisterService(ctx, &proto.DeleteServiceRequest{ServiceId: serviceID1})
+
+ resp, err = datasource.GetMetadataManager().RegisterService(ctx, &proto.CreateServiceRequest{
+ Service: &proto.MicroService{
+ Alias: "test_find_alias_ids",
+ ServiceName: "test_find_service_ids",
+ Version: "3.0",
+ },
+ })
+ assert.NoError(t, err)
+ serviceID2 := resp.ServiceId
+ defer datasource.GetMetadataManager().UnregisterService(ctx, &proto.DeleteServiceRequest{ServiceId: serviceID2})
+
+ ids, exist, err := serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{
+ Tenant: "default/default",
+ ServiceName: "test_find_service_ids",
+ Version: "1.0",
+ }, false)
+ assert.NoError(t, err)
+ assert.True(t, exist)
+ assert.Equal(t, 2, len(ids))
+
+ ids, exist, err = serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{
+ Tenant: "default/default",
+ ServiceName: "test_find_service_ids",
+ Version: "1.0",
+ }, true)
+ assert.NoError(t, err)
+ assert.True(t, exist)
+ assert.Empty(t, ids)
+
+ ids, exist, err = serviceUtil.FindServiceIds(ctx, &proto.MicroServiceKey{
+ Tenant: "default/default",
+ ServiceName: "test_find_service_ids",
+ Version: "2.0",
+ }, true)
+ assert.NoError(t, err)
+ assert.True(t, exist)
+ assert.Equal(t, []string{serviceID1}, ids)
+ })
}
func TestGetService(t *testing.T) {
diff --git a/datasource/instance_test.go b/datasource/instance_test.go
index 5926654..291e908 100644
--- a/datasource/instance_test.go
+++ b/datasource/instance_test.go
@@ -589,54 +589,33 @@ func TestInstance_Query(t *testing.T) {
instanceId9 = respCreateInstance.InstanceId
})
- t.Run("query instance", func(t *testing.T) {
- log.Info("find with version rule")
+ t.Run("query instance, should ok", func(t *testing.T) {
respFind, err := datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId1,
AppId: "query_instance_ms",
ServiceName: "query_instance_service_ms",
- VersionRule: "latest",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
+ assertInstancesContain(t, respFind.Instances, instanceId1)
assertInstancesContain(t, respFind.Instances, instanceId2)
+ })
- respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
+ t.Run("query not exist service instance, should failed", func(t *testing.T) {
+ respFind, err := datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId1,
AppId: "query_instance_ms",
- ServiceName: "query_instance_service_ms",
- VersionRule: "1.0.0+",
- Tags: []string{},
- })
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
- assertInstancesContain(t, respFind.Instances, instanceId2)
-
- respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance_ms",
- ServiceName: "query_instance_service_ms",
- VersionRule: "1.0.0",
- })
- assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
- assertInstancesContain(t, respFind.Instances, instanceId1)
-
- respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "0.0.0",
+ ServiceName: "not-exist",
})
assert.NoError(t, err)
assert.Equal(t, pb.ErrServiceNotExists, respFind.Response.GetCode())
+ })
- log.Info("find with env")
- respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
+ t.Run("query instance when with consumerID or specify env without consumerID, should ok", func(t *testing.T) {
+ respFind, err := datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId4,
AppId: "query_instance_ms",
ServiceName: "query_instance_diff_env_service_ms",
- VersionRule: "1.0.0",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
@@ -647,20 +626,19 @@ func TestInstance_Query(t *testing.T) {
Environment: pb.ENV_PROD,
AppId: "query_instance_ms",
ServiceName: "query_instance_diff_env_service_ms",
- VersionRule: "1.0.0",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Instances))
assertInstancesContain(t, respFind.Instances, instanceId4)
+ })
- log.Info("find with rev")
+ t.Run("query instance with revision, should ok", func(t *testing.T) {
ctx := util.SetContext(getContext(), util.CtxNocache, "")
- respFind, err = datasource.GetMetadataManager().FindInstances(ctx, &pb.FindInstancesRequest{
+ respFind, err := datasource.GetMetadataManager().FindInstances(ctx, &pb.FindInstancesRequest{
ConsumerServiceId: serviceId8,
AppId: "query_instance_ms",
ServiceName: "query_instance_with_rev_ms",
- VersionRule: "1.0.0",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
@@ -673,41 +651,41 @@ func TestInstance_Query(t *testing.T) {
ConsumerServiceId: serviceId8,
AppId: "query_instance_ms",
ServiceName: "query_instance_with_rev_ms",
- VersionRule: "1.0.0",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, ctx.Value(util.CtxResponseRevision), rev)
assertInstancesContain(t, respFind.Instances, instanceId8)
+ })
- log.Info("find should return 200 if consumer is diff apps")
- respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
+ t.Run("find should return 200 if consumer is diff apps, should ok", func(t *testing.T) {
+ respFind, err := datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId3,
AppId: "query_instance_ms",
ServiceName: "query_instance_service_ms",
- VersionRule: "1.0.5",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 0, len(respFind.Instances))
+ })
- log.Info("provider tag does not exist")
- respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
+ t.Run("find provider instance but specify tag does not exist, should ok", func(t *testing.T) {
+ respFind, err := datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId1,
AppId: "query_instance_ms",
ServiceName: "query_instance_service_ms",
- VersionRule: "latest",
Tags: []string{"not_exist_tag"},
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 0, len(respFind.Instances))
+ })
- log.Info("shared service discovery")
+ t.Run("find global provider instance, should ok", func(t *testing.T) {
config.Server.Config.GlobalVisible = "query_instance_shared_provider_ms"
core.RegisterGlobalServices()
core.Service.Environment = pb.ENV_PROD
- respFind, err = datasource.GetMetadataManager().FindInstances(
+ respFind, err := datasource.GetMetadataManager().FindInstances(
util.SetTargetDomainProject(
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
"default", "default"),
@@ -715,7 +693,6 @@ func TestInstance_Query(t *testing.T) {
ConsumerServiceId: serviceId6,
AppId: "default",
ServiceName: "query_instance_shared_provider_ms",
- VersionRule: "1.0.0",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
@@ -726,7 +703,6 @@ func TestInstance_Query(t *testing.T) {
ConsumerServiceId: serviceId7,
AppId: "default",
ServiceName: "query_instance_shared_provider_ms",
- VersionRule: "1.0.0",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
@@ -739,8 +715,7 @@ func TestInstance_Query(t *testing.T) {
core.Service.Environment = pb.ENV_DEV
})
- t.Run("batch query instances", func(t *testing.T) {
- log.Info("find with version rule")
+ t.Run("batch query instances, should ok", func(t *testing.T) {
respFind, err := datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
ConsumerServiceId: serviceId1,
Services: []*pb.FindService{
@@ -748,21 +723,23 @@ func TestInstance_Query(t *testing.T) {
Service: &pb.MicroServiceKey{
AppId: "query_instance_ms",
ServiceName: "query_instance_service_ms",
- Version: "latest",
},
},
{
Service: &pb.MicroServiceKey{
AppId: "query_instance_ms",
- ServiceName: "query_instance_service_ms",
- Version: "1.0.0+",
+ ServiceName: "query_instance_diff_env_service_ms",
},
},
{
Service: &pb.MicroServiceKey{
- AppId: "query_instance_ms",
+ AppId: "query_instance_diff_app_ms",
ServiceName: "query_instance_service_ms",
- Version: "0.0.0",
+ },
+ },
+ {
+ Service: &pb.MicroServiceKey{
+ ServiceName: "not-exists",
},
},
},
@@ -770,21 +747,22 @@ func TestInstance_Query(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, int64(0), respFind.Services.Updated[0].Index)
+ assertInstancesContain(t, respFind.Services.Updated[0].Instances, instanceId1)
assertInstancesContain(t, respFind.Services.Updated[0].Instances, instanceId2)
- assert.Equal(t, int64(1), respFind.Services.Updated[1].Index)
- assertInstancesContain(t, respFind.Services.Updated[1].Instances, instanceId2)
- assert.Equal(t, int64(2), respFind.Services.Failed[0].Indexes[0])
+ assert.Equal(t, int64(2), respFind.Services.Updated[1].Index)
+ assert.Empty(t, respFind.Services.Updated[1].Instances)
+ assert.Equal(t, 2, len(respFind.Services.Failed[0].Indexes))
assert.Equal(t, pb.ErrServiceNotExists, respFind.Services.Failed[0].Error.Code)
+ })
- log.Info("find with env")
- respFind, err = datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
+ t.Run("batch query instances without specify env, should ok", func(t *testing.T) {
+ respFind, err := datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
ConsumerServiceId: serviceId4,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
AppId: "query_instance_ms",
ServiceName: "query_instance_diff_env_service_ms",
- Version: "1.0.0",
},
},
},
@@ -793,24 +771,23 @@ func TestInstance_Query(t *testing.T) {
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Services.Updated[0].Instances))
assert.Equal(t, instanceId4, respFind.Services.Updated[0].Instances[0].InstanceId)
+ })
- log.Info("find with rev")
+ t.Run("batch query instances with revision, should ok", func(t *testing.T) {
ctx := util.SetContext(getContext(), util.CtxNocache, "")
- respFind, err = datasource.GetMetadataManager().BatchFind(ctx, &pb.BatchFindInstancesRequest{
+ respFind, err := datasource.GetMetadataManager().BatchFind(ctx, &pb.BatchFindInstancesRequest{
ConsumerServiceId: serviceId8,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
AppId: "query_instance_ms",
ServiceName: "query_instance_with_rev_ms",
- Version: "1.0.0",
},
},
{
Service: &pb.MicroServiceKey{
AppId: "query_instance_ms",
ServiceName: "batch_query_instance_with_rev_ms",
- Version: "1.0.0",
},
},
},
@@ -851,7 +828,6 @@ func TestInstance_Query(t *testing.T) {
Service: &pb.MicroServiceKey{
AppId: "query_instance_ms",
ServiceName: "query_instance_with_rev_ms",
- Version: "1.0.0",
},
Rev: "x",
},
@@ -880,7 +856,6 @@ func TestInstance_Query(t *testing.T) {
Service: &pb.MicroServiceKey{
AppId: "query_instance_ms",
ServiceName: "query_instance_with_rev_ms",
- Version: "1.0.0",
},
Rev: rev,
},
@@ -899,9 +874,10 @@ func TestInstance_Query(t *testing.T) {
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, int64(0), respFind.Services.NotModified[0])
assert.Equal(t, int64(0), respFind.Instances.NotModified[0])
+ })
- log.Info("find should return 200 even if consumer is diff apps")
- respFind, err = datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
+ t.Run("find should return 200 even if consumer is diff apps, should ok", func(t *testing.T) {
+ respFind, err := datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
ConsumerServiceId: serviceId3,
Services: []*pb.FindService{
{
@@ -916,12 +892,13 @@ func TestInstance_Query(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 0, len(respFind.Services.Updated[0].Instances))
+ })
- log.Info("shared service discovery")
+ t.Run("find shared service discovery, should ok", func(t *testing.T) {
config.Server.Config.GlobalVisible = "query_instance_shared_provider_ms"
core.RegisterGlobalServices()
core.Service.Environment = pb.ENV_PROD
- respFind, err = datasource.GetMetadataManager().BatchFind(
+ respFind, err := datasource.GetMetadataManager().BatchFind(
util.SetTargetDomainProject(
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
"default", "default"),
@@ -932,7 +909,6 @@ func TestInstance_Query(t *testing.T) {
Service: &pb.MicroServiceKey{
AppId: "default",
ServiceName: "query_instance_shared_provider_ms",
- Version: "1.0.0",
},
},
},
@@ -949,7 +925,6 @@ func TestInstance_Query(t *testing.T) {
Service: &pb.MicroServiceKey{
AppId: "default",
ServiceName: "query_instance_shared_provider_ms",
- Version: "1.0.0",
},
},
},
@@ -1021,10 +996,10 @@ func TestInstance_Query(t *testing.T) {
})
}
-func assertInstancesContain(t *testing.T, instances []*pb.MicroServiceInstance, instanceId2 string) {
+func assertInstancesContain(t *testing.T, instances []*pb.MicroServiceInstance, instanceId string) {
found := false
for _, instance := range instances {
- if instance.InstanceId == instanceId2 {
+ if instance.InstanceId == instanceId {
found = true
break
}
diff --git a/datasource/mongo/client/dao/dep.go b/datasource/mongo/client/dao/dep.go
index 34d0855..b0d2df9 100644
--- a/datasource/mongo/client/dao/dep.go
+++ b/datasource/mongo/client/dao/dep.go
@@ -30,14 +30,13 @@ import (
const (
Provider = "p"
- Consumer = "c"
)
func GetProviderDeps(ctx context.Context, provider *discovery.MicroService) (*discovery.MicroServiceDependency, error) {
- return getServiceofDeps(ctx, Provider, provider)
+ return getServiceOfDeps(ctx, Provider, provider)
}
-func getServiceofDeps(ctx context.Context, ruleType string, provider *discovery.MicroService) (*discovery.MicroServiceDependency, error) {
+func getServiceOfDeps(ctx context.Context, ruleType string, provider *discovery.MicroService) (*discovery.MicroServiceDependency, error) {
filter := mutil.NewFilter(
mutil.ServiceType(ruleType),
mutil.ServiceKeyTenant(util.ParseDomainProject(ctx)),
diff --git a/datasource/mongo/dep.go b/datasource/mongo/dep.go
index 7216350..80bb141 100644
--- a/datasource/mongo/dep.go
+++ b/datasource/mongo/dep.go
@@ -61,8 +61,7 @@ func (ds *DepManager) SearchProviderDependency(ctx context.Context, request *dis
}, nil
}
- dr := NewProviderDependencyRelation(ctx, domainProject, provider.Service)
- services, err := dr.GetDependencyConsumers(ToDependencyFilterOptions(request)...)
+ services, err := GetConsumers(ctx, domainProject, provider.Service, ToDependencyFilterOptions(request)...)
if err != nil {
log.Error(fmt.Sprintf("GetProviderDependencies failed, provider is %s/%s/%s/%s",
provider.Service.Environment, provider.Service.AppId, provider.Service.ServiceName, provider.Service.Version), err)
@@ -99,8 +98,7 @@ func (ds *DepManager) SearchConsumerDependency(ctx context.Context, request *dis
}, nil
}
- dr := NewConsumerDependencyRelation(ctx, domainProject, consumer.Service)
- services, err := dr.GetDependencyProviders(ToDependencyFilterOptions(request)...)
+ services, err := GetProviders(ctx, domainProject, consumer.Service, ToDependencyFilterOptions(request)...)
if err != nil {
log.Error(fmt.Sprintf("query consumer failed, consumer is %s/%s/%s/%s",
consumer.Service.Environment, consumer.Service.AppId, consumer.Service.ServiceName, consumer.Service.Version), err)
@@ -115,64 +113,6 @@ func (ds *DepManager) SearchConsumerDependency(ctx context.Context, request *dis
}, nil
}
-func (ds *DepManager) AddOrUpdateDependencies(ctx context.Context, dependencys []*discovery.ConsumerDependency, override bool) (*discovery.Response, error) {
- domainProject := util.ParseDomainProject(ctx)
- for _, dependency := range dependencys {
- consumerFlag := util.StringJoin([]string{
- dependency.Consumer.Environment,
- dependency.Consumer.AppId,
- dependency.Consumer.ServiceName,
- dependency.Consumer.Version}, "/")
- consumerInfo := discovery.DependenciesToKeys([]*discovery.MicroServiceKey{dependency.Consumer}, domainProject)[0]
- providersInfo := discovery.DependenciesToKeys(dependency.Providers, domainProject)
-
- rsp := datasource.ParamsChecker(consumerInfo, providersInfo)
- if rsp != nil {
- log.Error(fmt.Sprintf("put request into dependency queue failed, override: %t consumer is %s %s",
- override, consumerFlag, rsp.Response.GetMessage()), nil)
- return rsp.Response, nil
- }
-
- consumerID, err := GetServiceID(ctx, consumerInfo)
- if err != nil && !errors.Is(err, datasource.ErrNoData) {
- log.Error(fmt.Sprintf("put request into dependency queue failed, override: %t, get consumer %s id failed",
- override, consumerFlag), err)
- return discovery.CreateResponse(discovery.ErrInternal, err.Error()), err
- }
- if len(consumerID) == 0 {
- log.Error(fmt.Sprintf("put request into dependency queue failed, override: %t consumer %s does not exist",
- override, consumerFlag), err)
- return discovery.CreateResponse(discovery.ErrServiceNotExists, fmt.Sprintf("Consumer %s does not exist.", consumerFlag)), nil
- }
-
- dependency.Override = override
- if !override {
- id := util.GenerateUUID()
-
- domain := util.ParseDomain(ctx)
- project := util.ParseProject(ctx)
- data := &model.ConsumerDep{
- Domain: domain,
- Project: project,
- ConsumerID: consumerID,
- UUID: id,
- ConsumerDep: dependency,
- }
- insertRes, err := client.GetMongoClient().Insert(ctx, model.CollectionDep, data)
- if err != nil {
- log.Error("failed to insert dep to mongodb", err)
- return discovery.CreateResponse(discovery.ErrInternal, err.Error()), err
- }
- log.Info(fmt.Sprintf("insert dep to mongodb success %s", insertRes.InsertedID))
- }
- err = syncDependencyRule(ctx, domainProject, dependency)
- if err != nil {
- return nil, err
- }
- }
- return discovery.CreateResponse(discovery.ResponseSuccess, "Create dependency successfully."), nil
-}
-
func (ds *DepManager) DependencyHandle(ctx context.Context) (err error) {
return nil
}
@@ -193,12 +133,7 @@ func syncDependencyRule(ctx context.Context, domainProject string, r *discovery.
if err != nil {
return err
}
-
- if r.Override {
- datasource.ParseOverrideRules(ctx, &dep, oldProviderRules)
- } else {
- datasource.ParseAddOrUpdateRules(ctx, &dep, oldProviderRules)
- }
+ datasource.ParseAddOrUpdateRules(ctx, &dep, oldProviderRules)
return updateDeps(domainProject, &dep)
}
@@ -233,9 +168,6 @@ func updateDeps(domainProject string, dep *datasource.Dependency) error {
if err != nil {
return err
}
- if r.ServiceName == "*" {
- break
- }
}
for _, r := range dep.CreateDependencyRuleList {
filter := GenerateProviderDependencyRuleKey(domainProject, r)
@@ -246,9 +178,6 @@ func updateDeps(domainProject string, dep *datasource.Dependency) error {
if err != nil {
return err
}
- if r.ServiceName == "*" {
- break
- }
}
filter := GenerateConsumerDependencyRuleKey(domainProject, dep.Consumer)
if len(dep.ProvidersRule) == 0 {
@@ -344,11 +273,7 @@ func removeProviderDeps(ctx context.Context, depRule *model.DependencyRule, cach
}
exist, ok := cache[id]
if !ok {
- if depRule.ServiceKey.ServiceName == "*" {
- return nil
- }
-
- _, exist, err = FindServiceIds(ctx, depRule.ServiceKey.Version, depRule.ServiceKey)
+ _, exist, err = FindServiceIds(ctx, depRule.ServiceKey, false)
if err != nil {
return err
}
@@ -371,18 +296,13 @@ func removeProviderDeps(ctx context.Context, depRule *model.DependencyRule, cach
func removeConsumerDeps(ctx context.Context, depRule *model.DependencyRule, cache map[*model.DelDepCacheKey]bool) (err error) {
var left []*discovery.MicroServiceKey
for _, key := range depRule.Dep.Dependency {
- if key.ServiceName == "*" {
- left = append(left, key)
- continue
- }
-
id := &model.DelDepCacheKey{
Key: key,
Type: path.DepsProvider,
}
exist, ok := cache[id]
if !ok {
- _, exist, err = FindServiceIds(ctx, key.Version, key)
+ _, exist, err = FindServiceIds(ctx, key, false)
if err != nil {
return err
}
@@ -434,25 +354,6 @@ func TransferToMicroServiceDependency(ctx context.Context, filter bson.M) (*disc
return microServiceDependency, nil
}
-func GetConsumerDepInfo(ctx context.Context, filter bson.M) ([]*discovery.ConsumerDependency, error) {
- var ConsumerDeps []*discovery.ConsumerDependency
-
- findRes, err := client.GetMongoClient().Find(context.TODO(), model.CollectionDep, filter)
- if err != nil {
- return nil, err
- }
-
- for findRes.Next(ctx) {
- var dep *model.ConsumerDep
- err = findRes.Decode(&dep)
- if err != nil {
- return nil, err
- }
- ConsumerDeps = append(ConsumerDeps, dep.ConsumerDep)
- }
- return ConsumerDeps, nil
-}
-
func GetServiceID(ctx context.Context, key *discovery.MicroServiceKey) (string, error) {
filter := mutil.NewBasicFilter(
ctx,
diff --git a/datasource/mongo/dep_util.go b/datasource/mongo/dep_util.go
index 3d3e1ce..05ecb6a 100644
--- a/datasource/mongo/dep_util.go
+++ b/datasource/mongo/dep_util.go
@@ -53,3 +53,15 @@ func GetConsumerIDs(ctx context.Context, provider *pb.MicroService) ([]string, e
}
return consumerIDs, nil
}
+
+func GetConsumers(ctx context.Context, domainProject string, provider *pb.MicroService,
+ opts ...DependencyRelationFilterOption) ([]*pb.MicroService, error) {
+ dr := NewProviderDependencyRelation(ctx, domainProject, provider)
+ return dr.GetDependencyConsumers(opts...)
+}
+
+func GetProviders(ctx context.Context, domainProject string, consumer *pb.MicroService,
+ opts ...DependencyRelationFilterOption) ([]*pb.MicroService, error) {
+ dr := NewConsumerDependencyRelation(ctx, domainProject, consumer)
+ return dr.GetDependencyProviders(opts...)
+}
diff --git a/datasource/mongo/dependency_query.go b/datasource/mongo/dependency_query.go
index 7c60355..c308793 100644
--- a/datasource/mongo/dependency_query.go
+++ b/datasource/mongo/dependency_query.go
@@ -34,7 +34,6 @@ import (
"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
"github.com/apache/servicecomb-service-center/datasource/mongo/util"
"github.com/apache/servicecomb-service-center/pkg/log"
- "github.com/apache/servicecomb-service-center/pkg/validate"
)
type DependencyRelation struct {
@@ -86,10 +85,6 @@ func (dr *DependencyRelation) GetDependencyProviders(opts ...DependencyRelationF
return nil, err
}
- if key.ServiceName == "*" {
- services = services[:0]
- }
-
for _, providerID := range providerIDs {
filter := util.NewBasicFilter(dr.ctx, util.ServiceServiceID(providerID))
provider, err := dao.GetService(dr.ctx, filter)
@@ -108,9 +103,6 @@ func (dr *DependencyRelation) GetDependencyProviders(opts ...DependencyRelationF
}
services = append(services, provider.Service)
}
- if key.ServiceName == "*" {
- break
- }
}
return services, nil
}
@@ -148,11 +140,6 @@ func (dr *DependencyRelation) GetDependencyConsumersOfProvider() ([]*pb.MicroSer
if dr.provider == nil {
return nil, util.ErrInvalidConsumer
}
- consumerDependAllList, err := dr.getConsumerOfDependAllServices()
- if err != nil {
- log.Error(fmt.Sprintf("get consumers that depend on all services failed, %s", dr.provider.ServiceId), err)
- return nil, err
- }
providerService := pb.MicroServiceToKey(dr.domainProject, dr.provider)
consumerDependList, err := dr.GetConsumerOfSameServiceNameAndAppID(providerService)
if err != nil {
@@ -160,73 +147,22 @@ func (dr *DependencyRelation) GetDependencyConsumersOfProvider() ([]*pb.MicroSer
dr.provider.Environment, dr.provider.AppId, dr.provider.ServiceName, dr.provider.Version)
return nil, err
}
- consumerDependAllList = append(consumerDependAllList, consumerDependList...)
- return consumerDependAllList, nil
+ return consumerDependList, nil
}
func (dr *DependencyRelation) GetConsumerOfSameServiceNameAndAppID(provider *pb.MicroServiceKey) ([]*pb.MicroServiceKey, error) {
- providerVersion := provider.Version
- provider.Version = ""
filter := GenerateRuleKeyWithSameServiceNameAndAppID(path.DepsProvider, dr.domainProject, provider)
- provider.Version = providerVersion
depRules, err := getServiceKeysInDep(dr.ctx, filter)
if err != nil {
return nil, err
}
var allConsumers []*pb.MicroServiceKey
- var latestServiceID []string
-
for _, depRule := range depRules {
- providerVersionRule := depRule.ServiceKey.Version
- if providerVersionRule == "latest" {
- if latestServiceID == nil {
- latestServiceID, _, err = FindServiceIds(dr.ctx, providerVersionRule, provider)
- if err != nil {
- log.Error(fmt.Sprintf("get service[%s/%s/%s/%s]'s serviceID failed",
- provider.Environment, provider.AppId, provider.ServiceName, providerVersionRule), err)
- return nil, err
- }
- }
- if len(latestServiceID) == 0 {
- log.Info(fmt.Sprintf("service[%s/%s/%s/%s] does not exist",
- provider.Environment, provider.AppId, provider.ServiceName, providerVersionRule))
- continue
- }
- if dr.provider.ServiceId != latestServiceID[0] {
- continue
- }
- } else {
- if !VersionMatchRule(providerVersion, providerVersionRule) {
- continue
- }
- }
- if len(depRule.Dep.Dependency) > 0 {
- allConsumers = append(allConsumers, depRule.Dep.Dependency...)
- }
+ allConsumers = append(allConsumers, depRule.Dep.Dependency...)
}
return allConsumers, nil
}
-// not prepare for latest scene, should merge it with find serviceids func.
-func VersionMatchRule(version, versionRule string) bool {
- if len(versionRule) == 0 {
- return false
- }
- rangeIdx := strings.Index(versionRule, "-")
- versionInt, _ := validate.VersionToInt64(version)
- switch {
- case versionRule[len(versionRule)-1:] == "+":
- start, _ := validate.VersionToInt64(versionRule[:len(versionRule)-1])
- return versionInt >= start
- case rangeIdx > 0:
- start, _ := validate.VersionToInt64(versionRule[:rangeIdx])
- end, _ := validate.VersionToInt64(versionRule[rangeIdx+1:])
- return versionInt >= start && versionInt < end
- default:
- return version == versionRule
- }
-}
-
func (dr *DependencyRelation) GetServiceByMicroServiceKey(service *pb.MicroServiceKey) (*pb.MicroService, error) {
filter, err := MicroServiceKeyFilter(service)
if err != nil {
@@ -254,30 +190,6 @@ func (dr *DependencyRelation) GetServiceByMicroServiceKey(service *pb.MicroServi
return nil, nil
}
-func (dr *DependencyRelation) getConsumerOfDependAllServices() ([]*pb.MicroServiceKey, error) {
- providerService := pb.MicroServiceToKey(dr.domainProject, dr.provider)
- providerService.ServiceName = "*"
- filter := GenerateProviderDependencyRuleKey(dr.domainProject, providerService)
- findRes, err := client.GetMongoClient().Find(dr.ctx, model.CollectionDep, filter)
- if err != nil {
- return nil, err
- }
- if findRes.Err() != nil {
- return nil, findRes.Err()
- }
-
- var msKeys []*pb.MicroServiceKey
- for findRes.Next(dr.ctx) {
- var depRule *model.DependencyRule
- err = findRes.Decode(&depRule)
- if err != nil {
- return nil, err
- }
- msKeys = append(msKeys, depRule.ServiceKey)
- }
- return msKeys, nil
-}
-
func getServiceKeysInDep(ctx context.Context, filter interface{}) ([]*model.DependencyRule, error) {
findRes, err := client.GetMongoClient().Find(ctx, model.CollectionDep, filter)
if err != nil {
@@ -311,30 +223,7 @@ func (dr *DependencyRelation) getProviderKeys() ([]*pb.MicroServiceKey, error) {
}
func (dr *DependencyRelation) parseDependencyRule(dependencyRule *pb.MicroServiceKey) (serviceIDs []string, err error) {
- switch {
- case dependencyRule.ServiceName == "*":
- log.Info(fmt.Sprintf("service[%s/%s/%s/%s] rely all service",
- dr.consumer.Environment, dr.consumer.AppId, dr.consumer.ServiceName, dr.consumer.Version))
- filter, err := RelyAllServiceKey(dependencyRule)
- if err != nil {
- log.Error("get serivce failed", err)
- return nil, err
- }
- findRes, err := client.GetMongoClient().Find(dr.ctx, model.CollectionService, filter)
- if err != nil {
- return nil, err
- }
- for findRes.Next(dr.ctx) {
- var service model.Service
- err = findRes.Decode(&service)
- if err != nil {
- return nil, err
- }
- serviceIDs = append(serviceIDs, service.Service.ServiceId)
- }
- default:
- serviceIDs, _, err = FindServiceIds(dr.ctx, dependencyRule.Version, dependencyRule)
- }
+ serviceIDs, _, err = FindServiceIds(dr.ctx, dependencyRule, false)
return
}
@@ -369,26 +258,13 @@ func MicroServiceKeyFilter(key *pb.MicroServiceKey) (bson.M, error) {
filter := util.NewDomainProjectFilter(tenant[0], tenant[1],
util.ServiceEnv(key.Environment),
util.ServiceAppID(key.AppId),
- util.ServiceAlias(key.Alias),
+ util.ServiceServiceName(key.ServiceName),
util.ServiceVersion(key.Version),
)
return filter, nil
}
-func RelyAllServiceKey(key *pb.MicroServiceKey) (bson.M, error) {
- tenant := strings.Split(key.Tenant, "/")
- if len(tenant) != 2 {
- return nil, util.ErrInvalidDomainProject
- }
- filter := util.NewDomainProjectFilter(tenant[0], tenant[1], util.ServiceEnv(key.Environment))
- return filter, nil
-}
-
-func FindServiceIds(ctx context.Context, versionRule string, key *pb.MicroServiceKey) ([]string, bool, error) {
- if len(versionRule) == 0 {
- return nil, false, nil
- }
-
+func FindServiceIds(ctx context.Context, key *pb.MicroServiceKey, matchVersion bool) ([]string, bool, error) {
tenant := strings.Split(key.Tenant, "/")
if len(tenant) != 2 {
return nil, false, util.ErrInvalidDomainProject
@@ -400,7 +276,7 @@ func FindServiceIds(ctx context.Context, versionRule string, key *pb.MicroServic
{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnEnv}), Value: key.Environment},
{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnAppID}), Value: key.AppId}}
- serviceIds, exist, err := findServiceKeysByServiceName(ctx, versionRule, key, baseFilter)
+ serviceIds, exist, err := findServiceKeysByServiceName(ctx, key, baseFilter, matchVersion)
if err != nil {
return nil, false, err
}
@@ -412,7 +288,7 @@ func FindServiceIds(ctx context.Context, versionRule string, key *pb.MicroServic
if len(key.Alias) == 0 {
return nil, false, nil
}
- serviceIds, exist, err = findServiceKeysByAlias(ctx, versionRule, key, baseFilter)
+ serviceIds, exist, err = findServiceKeysByAlias(ctx, key, baseFilter, matchVersion)
if err != nil {
return nil, false, err
}
@@ -421,84 +297,39 @@ func FindServiceIds(ctx context.Context, versionRule string, key *pb.MicroServic
return serviceIds, exist, nil
}
-func serviceVersionFilter(ctx context.Context, versionRule string, filter bson.D) ([]string, bool, error) {
+func serviceVersionFilter(ctx context.Context, version string, filter bson.D, matchVersion bool) ([]string, bool, error) {
baseExist, err := client.GetMongoClient().DocExist(ctx, model.CollectionService, filter)
if err != nil || !baseExist {
return nil, false, err
}
- filterFunc, newFilter := findServiceKeys(ctx, versionRule, filter)
- if filterFunc == nil {
- //精确匹配,无version返回服务不存在而不是verison匹配错误
- ids, err := GetVersionService(ctx, newFilter)
- if err != nil || len(ids) == 0 {
- return nil, false, err
- }
- return ids, true, nil
+ newFilter := filter
+ if matchVersion {
+ newFilter = findServiceKeys(ctx, version, filter)
}
-
- ids, err := filterFunc(ctx, newFilter)
+ ids, err := GetVersionService(ctx, newFilter)
if err != nil {
return nil, false, err
}
return ids, true, nil
}
-func findServiceKeysByServiceName(ctx context.Context, versionRule string, key *pb.MicroServiceKey, baseFilter bson.D) ([]string, bool, error) {
+func findServiceKeysByServiceName(ctx context.Context, key *pb.MicroServiceKey, baseFilter bson.D, matchVersion bool) ([]string, bool, error) {
filter := append(baseFilter,
bson.E{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnServiceName}), Value: key.ServiceName})
- return serviceVersionFilter(ctx, versionRule, filter)
+ return serviceVersionFilter(ctx, key.Version, filter, matchVersion)
}
-func findServiceKeysByAlias(ctx context.Context, versionRule string, key *pb.MicroServiceKey, baseFilter bson.D) ([]string, bool, error) {
+func findServiceKeysByAlias(ctx context.Context, key *pb.MicroServiceKey, baseFilter bson.D, matchVersion bool) ([]string, bool, error) {
filter := append(baseFilter,
bson.E{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnAlias}), Value: key.Alias})
- return serviceVersionFilter(ctx, versionRule, filter)
+ return serviceVersionFilter(ctx, key.Version, filter, matchVersion)
}
type ServiceVersionFilter func(ctx context.Context, filter bson.D) ([]string, error)
-func findServiceKeys(ctx context.Context, versionRule string, filter bson.D) (filterFunc ServiceVersionFilter, newFilter bson.D) {
- rangeIdx := strings.Index(versionRule, "-")
- switch {
- case versionRule == "latest":
- return GetVersionServiceLatest, filter
- case versionRule[len(versionRule)-1:] == "+":
- start := versionRule[:len(versionRule)-1]
- filter = append(filter, bson.E{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion}), Value: bson.M{"$gte": start}})
- return GetVersionService, filter
- case rangeIdx > 0:
- start := versionRule[:rangeIdx]
- end := versionRule[rangeIdx+1:]
- filter = append(filter, bson.E{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion}), Value: bson.M{"$gte": start, "$lt": end}})
- return GetVersionService, filter
- default:
- filter = append(filter, bson.E{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion}), Value: versionRule})
- return nil, filter
- }
-}
-
-func GetVersionServiceLatest(ctx context.Context, m bson.D) (serviceIds []string, err error) {
- findRes, err := client.GetMongoClient().Find(ctx, model.CollectionService, m,
- &options.FindOptions{
- Sort: bson.M{util.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion}): -1}})
- if err != nil {
- return nil, err
- }
- if findRes.Err() != nil {
- return nil, findRes.Err()
- }
- for findRes.Next(ctx) {
- var service *model.Service
- err = findRes.Decode(&service)
- if err != nil {
- return
- }
- serviceIds = append(serviceIds, service.Service.ServiceId)
- if serviceIds != nil {
- return
- }
- }
- return
+func findServiceKeys(ctx context.Context, version string, filter bson.D) (newFilter bson.D) {
+ filter = append(filter, bson.E{Key: util.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion}), Value: version})
+ return filter
}
func GetVersionService(ctx context.Context, m bson.D) (serviceIds []string, err error) {
@@ -521,83 +352,13 @@ func GetVersionService(ctx context.Context, m bson.D) (serviceIds []string, err
return
}
-func ParseVersionRule(ctx context.Context, versionRule string, key *pb.MicroServiceKey) ([]string, error) {
- tenant := strings.Split(key.Tenant, "/")
- if len(tenant) != 2 {
- return nil, util.ErrInvalidDomainProject
- }
- if len(versionRule) == 0 {
- return nil, nil
- }
-
- rangeIdx := strings.Index(versionRule, "-")
- switch {
- case versionRule == "latest":
- filter := util.NewDomainProjectFilter(tenant[0], tenant[1])
- return GetFilterVersionServiceLatest(ctx, filter)
- case versionRule[len(versionRule)-1:] == "+":
- start := versionRule[:len(versionRule)-1]
- filter := util.NewDomainProjectFilter(tenant[0], tenant[1], util.ServiceVersion(bson.M{"$gte": start}))
- return GetFilterVersionService(ctx, filter)
- case rangeIdx > 0:
- start := versionRule[:rangeIdx]
- end := versionRule[rangeIdx+1:]
- filter := util.NewDomainProjectFilter(tenant[0], tenant[1], util.ServiceVersion(bson.M{"$gte": start, "$lte": end}))
- return GetFilterVersionService(ctx, filter)
- default:
- return nil, nil
- }
-}
-
-func GetFilterVersionService(ctx context.Context, m bson.M) (serviceIDs []string, err error) {
- findRes, err := client.GetMongoClient().Find(ctx, model.CollectionService, m)
- if err != nil {
- return nil, err
- }
- if findRes.Err() != nil {
- return nil, findRes.Err()
- }
- for findRes.Next(ctx) {
- var service model.Service
- err = findRes.Decode(&service)
- if err != nil {
- return nil, err
- }
- serviceIDs = append(serviceIDs, service.Service.ServiceId)
- }
- return
-}
-
-func GetFilterVersionServiceLatest(ctx context.Context, m bson.M) (serviceIDs []string, err error) {
- findRes, err := client.GetMongoClient().Find(ctx, model.CollectionService, m,
- &options.FindOptions{
- Sort: bson.M{util.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion}): -1}})
- if err != nil {
- return nil, err
- }
- if findRes.Err() != nil {
- return nil, findRes.Err()
- }
- for findRes.Next(ctx) {
- var service model.Service
- err = findRes.Decode(&service)
- if err != nil {
- return nil, err
- }
- serviceIDs = append(serviceIDs, service.Service.ServiceId)
- if serviceIDs != nil {
- return serviceIDs, nil
- }
- }
- return
-}
-
func WithSameDomainProject() DependencyRelationFilterOption {
return func(opt DependencyRelationFilterOpt) DependencyRelationFilterOpt {
opt.SameDomainProject = true
return opt
}
}
+
func WithoutSelfDependency() DependencyRelationFilterOption {
return func(opt DependencyRelationFilterOpt) DependencyRelationFilterOpt {
opt.NonSelf = true
@@ -646,14 +407,6 @@ func GenerateServiceDependencyRuleKey(serviceType string, domainProject string,
util.ServiceKeyTenant(domainProject),
)
}
- if in.ServiceName == "*" {
- return util.NewFilter(
- util.ServiceType(serviceType),
- util.ServiceKeyTenant(domainProject),
- util.ServiceKeyServiceEnv(in.Environment),
- util.ServiceKeyServiceName(in.ServiceName),
- )
- }
return util.NewFilter(
util.ServiceType(serviceType),
util.ServiceKeyTenant(domainProject),
diff --git a/datasource/mongo/event/instance_event_handler.go b/datasource/mongo/event/instance_event_handler.go
index fa9925c..f77b7b1 100644
--- a/datasource/mongo/event/instance_event_handler.go
+++ b/datasource/mongo/event/instance_event_handler.go
@@ -77,13 +77,13 @@ func (h InstanceEventHandler) OnEvent(evt sd.MongoEvent) {
if !syncernotify.GetSyncerNotifyCenter().Closed() {
NotifySyncerInstanceEvent(evt, microService)
}
- consumerIDS, err := mongo.GetConsumerIDs(ctx, microService)
+ consumerIDs, err := mongo.GetConsumerIDs(ctx, microService)
if err != nil {
log.Error(fmt.Sprintf("get service[%s][%s/%s/%s/%s]'s consumerIDs failed",
providerID, microService.Environment, microService.AppId, microService.ServiceName, microService.Version), err)
return
}
- PublishInstanceEvent(evt, discovery.MicroServiceToKey(domainProject, microService), consumerIDS)
+ PublishInstanceEvent(evt, discovery.MicroServiceToKey(domainProject, microService), consumerIDs)
}
func NewInstanceEventHandler() *InstanceEventHandler {
diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index 30dee92..ca98e7e 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -239,14 +239,14 @@ func (ds *MetadataManager) ExistService(ctx context.Context, request *discovery.
serviceFlag := util.StringJoin([]string{
request.Environment, request.AppId, request.ServiceName, request.Version}, "/")
- ids, exist, err := FindServiceIds(ctx, request.Version, &discovery.MicroServiceKey{
+ ids, exist, err := FindServiceIds(ctx, &discovery.MicroServiceKey{
Environment: request.Environment,
AppId: request.AppId,
ServiceName: request.ServiceName,
Alias: request.ServiceName,
Version: request.Version,
Tenant: domainProject,
- })
+ }, true)
if err != nil {
log.Error(fmt.Sprintf("micro-service[%s] exist failed, find serviceIDs failed", serviceFlag), err)
return &discovery.GetExistenceResponse{
@@ -376,9 +376,12 @@ func (ds *MetadataManager) UpdateService(ctx context.Context, request *discovery
err := dao.UpdateService(ctx, filter, updateFilter)
if err != nil {
log.Error(fmt.Sprintf("update service %s properties failed, update mongo failed", request.ServiceId), err)
- return &discovery.UpdateServicePropsResponse{
- Response: discovery.CreateResponse(discovery.ErrUnavailableBackend, "Update doc in mongo failed."),
- }, nil
+ if err == client.ErrNoDocuments {
+ return &discovery.UpdateServicePropsResponse{
+ Response: discovery.CreateResponse(discovery.ErrServiceNotExists, "Service does not exist."),
+ }, nil
+ }
+ return nil, discovery.NewError(discovery.ErrUnavailableBackend, "Update doc in mongo failed.")
}
return &discovery.UpdateServicePropsResponse{
Response: discovery.CreateResponse(discovery.ResponseSuccess, "Update service successfully."),
@@ -1127,13 +1130,14 @@ func getServiceDetailUtil(ctx context.Context, mgs *model.Service, countOnly boo
serviceDetail.SchemaInfos = schemas
case "dependencies":
service := mgs.Service
- dr := NewDependencyRelation(ctx, domainProject, service, service)
- consumers, err := dr.GetDependencyConsumers(WithoutSelfDependency(), WithSameDomainProject())
+ consumers, err := GetConsumers(ctx, domainProject, service,
+ WithoutSelfDependency(), WithSameDomainProject())
if err != nil {
log.Error(fmt.Sprintf("get service[%s][%s/%s/%s/%s]'s all consumers failed",
service.ServiceId, service.Environment, service.AppId, service.ServiceName, service.Version), err)
}
- providers, err := dr.GetDependencyProviders(WithoutSelfDependency(), WithSameDomainProject())
+ providers, err := GetProviders(ctx, domainProject, service,
+ WithoutSelfDependency(), WithSameDomainProject())
if err != nil {
log.Error(fmt.Sprintf("get service[%s][%s/%s/%s/%s]'s all providers failed",
service.ServiceId, service.Environment, service.AppId, service.ServiceName, service.Version), err)
@@ -1545,7 +1549,6 @@ func (ds *MetadataManager) FindInstances(ctx context.Context, request *discovery
AppId: request.AppId,
ServiceName: request.ServiceName,
Alias: request.Alias,
- Version: request.VersionRule,
}
rev, ok := ctx.Value(util.CtxRequestRevision).(string)
if !ok {
@@ -1842,13 +1845,6 @@ func (ds *MetadataManager) findSharedServiceInstance(ctx context.Context, reques
findFlag := func() string {
return fmt.Sprintf("find shared provider[%s/%s/%s/%s]", provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
}
- basicFilterServices, err := servicesBasicFilter(ctx, provider)
- if err != nil {
- log.Error(fmt.Sprintf("find shared service instance failed %s", findFlag()), err)
- return &discovery.FindInstancesResponse{
- Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
- }, err
- }
services, err := filterServices(ctx, provider)
if err != nil {
log.Error(fmt.Sprintf("find shared service instance failed %s", findFlag()), err)
@@ -1856,7 +1852,7 @@ func (ds *MetadataManager) findSharedServiceInstance(ctx context.Context, reques
Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
}, err
}
- if services == nil && len(basicFilterServices) == 0 {
+ if len(services) == 0 {
mes := fmt.Errorf("%s failed, provider does not exist", findFlag())
log.Error("find shared service instance failed", mes)
return &discovery.FindInstancesResponse{
@@ -1895,15 +1891,15 @@ func (ds *MetadataManager) findInstance(ctx context.Context, request *discovery.
service, err = dao.GetService(ctx, filter)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
- log.Debug(fmt.Sprintf("consumer does not exist, consumer %s find provider %s/%s/%s/%s",
- request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName, request.VersionRule))
+ log.Debug(fmt.Sprintf("consumer does not exist, consumer %s find provider %s/%s/%s",
+ request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName))
return &discovery.FindInstancesResponse{
Response: discovery.CreateResponse(discovery.ErrServiceNotExists,
fmt.Sprintf("Consumer[%s] does not exist.", request.ConsumerServiceId)),
}, nil
}
- log.Error(fmt.Sprintf("get consumer failed, consumer %s find provider %s/%s/%s/%s",
- request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName, request.VersionRule), err)
+ log.Error(fmt.Sprintf("get consumer failed, consumer %s find provider %s/%s/%s",
+ request.ConsumerServiceId, request.Environment, request.AppId, request.ServiceName), err)
return &discovery.FindInstancesResponse{
Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
}, err
@@ -1921,13 +1917,6 @@ func (ds *MetadataManager) findInstance(ctx context.Context, request *discovery.
request.ConsumerServiceId, service.Service.Environment, service.Service.AppId, service.Service.ServiceName, service.Service.Version,
provider.Environment, provider.AppId, provider.ServiceName, provider.Version)
}
- basicFilterServices, err := servicesBasicFilter(ctx, provider)
- if err != nil {
- log.Error(fmt.Sprintf("find instance failed %s", findFlag()), err)
- return &discovery.FindInstancesResponse{
- Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
- }, err
- }
services, err := filterServices(ctx, provider)
if err != nil {
log.Error(fmt.Sprintf("find instance failed %s", findFlag()), err)
@@ -1935,7 +1924,7 @@ func (ds *MetadataManager) findInstance(ctx context.Context, request *discovery.
Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
}, err
}
- if services == nil && len(basicFilterServices) == 0 {
+ if len(services) == 0 {
mes := fmt.Errorf("%s failed, provider does not exist", findFlag())
log.Error("find instance failed", mes)
return &discovery.FindInstancesResponse{
@@ -2099,7 +2088,6 @@ func (ds *MetadataManager) batchFindServices(ctx context.Context, request *disco
ConsumerServiceId: request.ConsumerServiceId,
AppId: key.Service.AppId,
ServiceName: key.Service.ServiceName,
- VersionRule: key.Service.Version,
Environment: key.Service.Environment,
})
if err != nil {
@@ -2175,42 +2163,11 @@ func AppendFindResponse(ctx context.Context, index int64, resp *discovery.Respon
})
}
-// servicesBasicFilter query services with domain, project, env, appID, serviceName, alias
-func servicesBasicFilter(ctx context.Context, key *discovery.MicroServiceKey) ([]*model.Service, error) {
- tenant := strings.Split(key.Tenant, "/")
- if len(tenant) != 2 {
- return nil, errors.New("invalid 'domain' or 'project'")
- }
- serviceNameOption := mutil.ServiceServiceName(key.ServiceName)
- if len(key.Alias) > 0 {
- serviceNameOption = mutil.Or(serviceNameOption, mutil.ServiceAlias(key.Alias))
- }
- filter := mutil.NewDomainProjectFilter(tenant[0], tenant[1],
- mutil.ServiceEnv(key.Environment),
- mutil.ServiceAppID(key.AppId),
- serviceNameOption,
- )
- rangeIdx := strings.Index(key.Version, "-")
- // if the version number is clear, need to add the version number to query
- switch {
- case key.Version == "latest":
- return dao.GetServices(ctx, filter)
- case len(key.Version) > 0 && key.Version[len(key.Version)-1:] == "+":
- return dao.GetServices(ctx, filter)
- case rangeIdx > 0:
- return dao.GetServices(ctx, filter)
- default:
- filter[mutil.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion})] = key.Version
- return dao.GetServices(ctx, filter)
- }
-}
-
func filterServices(ctx context.Context, key *discovery.MicroServiceKey) ([]*model.Service, error) {
tenant := strings.Split(key.Tenant, "/")
if len(tenant) != 2 {
return nil, errors.New("invalid 'domain' or 'project'")
}
- rangeIdx := strings.Index(key.Version, "-")
serviceNameOption := mutil.ServiceServiceName(key.ServiceName)
if len(key.Alias) > 0 {
serviceNameOption = mutil.Or(serviceNameOption, mutil.ServiceAlias(key.Alias))
@@ -2220,23 +2177,7 @@ func filterServices(ctx context.Context, key *discovery.MicroServiceKey) ([]*mod
mutil.ServiceAppID(key.AppId),
serviceNameOption,
)
- switch {
- case key.Version == "latest":
- findOption := &options.FindOptions{Sort: bson.M{mutil.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion}): -1}}
- return dao.GetServices(ctx, filter, findOption)
- case len(key.Version) > 0 && key.Version[len(key.Version)-1:] == "+":
- start := key.Version[:len(key.Version)-1]
- filter[mutil.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion})] = bson.M{"$gte": start}
- return dao.GetServices(ctx, filter)
- case rangeIdx > 0:
- start := key.Version[:rangeIdx]
- end := key.Version[rangeIdx+1:]
- filter[mutil.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion})] = bson.M{"$gte": start, "$lte": end}
- return dao.GetServices(ctx, filter)
- default:
- filter[mutil.ConnectWithDot([]string{model.ColumnService, model.ColumnVersion})] = key.Version
- return dao.GetServices(ctx, filter)
- }
+ return dao.GetServices(ctx, filter)
}
func filterServiceIDs(ctx context.Context, consumerID string, tags []string, services []*model.Service) []string {
diff --git a/datasource/service_test.go b/datasource/service_test.go
index 6d061a1..011b005 100644
--- a/datasource/service_test.go
+++ b/datasource/service_test.go
@@ -369,14 +369,6 @@ func TestService_Exist(t *testing.T) {
Version: "2.0.0",
})
assert.NoError(t, err)
- assert.Equal(t, pb.ErrServiceNotExists, resp.Response.GetCode())
- resp, err = datasource.GetMetadataManager().ExistService(getContext(), &pb.GetExistenceRequest{
- Type: datasource.ExistTypeMicroservice,
- AppId: "exist_appId_service_ms",
- ServiceName: "exist_service_service_ms",
- Version: "0.0.0-1.0.0",
- })
- assert.NoError(t, err)
assert.Equal(t, pb.ErrServiceVersionNotExists, resp.Response.GetCode())
})
@@ -422,36 +414,6 @@ func TestService_Exist(t *testing.T) {
})
assert.NoError(t, err)
assert.Equal(t, serviceId2, resp.ServiceId)
-
- log.Info("check with latest versionRule")
- resp, err = datasource.GetMetadataManager().ExistService(getContext(), &pb.GetExistenceRequest{
- Type: datasource.ExistTypeMicroservice,
- AppId: "exist_appId_service_ms",
- ServiceName: "es_service_ms",
- Version: "latest",
- })
- assert.NoError(t, err)
- assert.Equal(t, serviceId1, resp.ServiceId)
-
- log.Info("check with 1.0.0+ versionRule")
- resp, err = datasource.GetMetadataManager().ExistService(getContext(), &pb.GetExistenceRequest{
- Type: datasource.ExistTypeMicroservice,
- AppId: "exist_appId_service_ms",
- ServiceName: "es_service_ms",
- Version: "1.0.0+",
- })
- assert.NoError(t, err)
- assert.Equal(t, serviceId1, resp.ServiceId)
-
- log.Info("check with range versionRule")
- resp, err = datasource.GetMetadataManager().ExistService(getContext(), &pb.GetExistenceRequest{
- Type: datasource.ExistTypeMicroservice,
- AppId: "exist_appId_service_ms",
- ServiceName: "es_service_ms",
- Version: "0.9.1-1.0.1",
- })
- assert.NoError(t, err)
- assert.Equal(t, serviceId1, resp.ServiceId)
})
}
diff --git a/datasource/tag_test.go b/datasource/tag_test.go
index 44ff4df..a2b42c6 100644
--- a/datasource/tag_test.go
+++ b/datasource/tag_test.go
@@ -267,7 +267,6 @@ func TestTag_Update(t *testing.T) {
ConsumerServiceId: consumerId,
AppId: "find_inst_tag_group_ms",
ServiceName: "find_inst_tag_provider_ms",
- VersionRule: "1.0.0+",
Tags: []string{"not-exist-tag"},
})
assert.NoError(t, err)
@@ -278,7 +277,6 @@ func TestTag_Update(t *testing.T) {
ConsumerServiceId: consumerId,
AppId: "find_inst_tag_group_ms",
ServiceName: "find_inst_tag_provider_ms",
- VersionRule: "1.0.0+",
Tags: []string{"filter_tag"},
})
assert.NoError(t, err)
@@ -299,7 +297,6 @@ func TestTag_Update(t *testing.T) {
ConsumerServiceId: consumerId,
AppId: "find_inst_tag_group_ms",
ServiceName: "find_inst_tag_provider_ms",
- VersionRule: "1.0.0+",
Tags: []string{"filter_tag"},
})
assert.NoError(t, err)
diff --git a/docs/openapi/v4.yaml b/docs/openapi/v4.yaml
index beb610a..cf7a930 100644
--- a/docs/openapi/v4.yaml
+++ b/docs/openapi/v4.yaml
@@ -1160,7 +1160,7 @@ paths:
/v4/{project}/registry/instances:
get:
description: |
- 实例注册后可以根据微服务版本规则或字段条件 发现该微服务的实例。同时会将此微服务版本规则记录到依赖关系中,当发现相同微服务的不同版本规则时,会覆盖已有的依赖关系。
+ 实例注册后可以根据微服务字段条件 发现该微服务的实例。同时会将此微服务记录到依赖关系中。
operationId: find
parameters:
- name: x-domain-name
@@ -1189,11 +1189,6 @@ paths:
description: 微服务名称。
required: true
type: string
- - name: version
- in: query
- description: 版本规则:1.精确版本匹配 2.后续版本匹配 3.最新版本 4.版本范围
- type: string
- required: true
- name: tags
in: query
description: Tag标签过滤,多个时逗号分隔。
@@ -2245,7 +2240,6 @@ definitions:
required:
- appId
- serviceName
- - version
properties:
environment:
type: string
@@ -2255,11 +2249,7 @@ definitions:
description: 应用app唯一标识。
serviceName:
type: string
- description: 微服务名称,作为provider支持为*,表示依赖同一租户下的所有服务,当服务名称为*的时候,appId和version可以省略,consumer不支持*。
- version:
- type: string
- description: 微服务版本,作为provider支持+,如1.0.1+[表示1.0.1以上的版本(包括1.0.1)]、固定版本和latest(当前最新版本),作为consumer只能为固定版本。
-
+ description: 微服务名称
GetProDependenciesResponse:
type: object
properties:
diff --git a/integration/apis.go b/integration/apis.go
index f8aa164..6debf13 100644
--- a/integration/apis.go
+++ b/integration/apis.go
@@ -32,7 +32,6 @@ var UPDATESCHEMA = "/v4/default/registry/microservices/:serviceId/schemas/:schem
var GETSCHEMAS = "/v4/default/registry/microservices/:serviceId/schemas"
var UPDATESCHEMAS = "/v4/default/registry/microservices/:serviceId/schemas"
var DELETESCHEMA = "/v4/default/registry/microservices/:serviceId/schemas/:schemaId"
-var CREATEDEPENDENCIES = "/v4/default/registry/dependencies"
var GETCONPRODEPENDENCY = "/v4/default/registry/microservices/:consumerId/providers"
var GETPROCONDEPENDENCY = "/v4/default/registry/microservices/:providerId/consumers"
@@ -54,12 +53,6 @@ var GETRELATIONGRAPH = "/v4/default/govern/relations"
var GETALLSERVICEGOVERNANCEINFO = "/v4/default/govern/microservices"
var GETALLAPPS = "/v4/default/govern/apps"
-//Rules API's
-var ADDRULE = "/v4/default/registry/microservices/:serviceId/rules"
-var GETRULES = "/v4/default/registry/microservices/:serviceId/rules"
-var UPDATERULES = "/v4/default/registry/microservices/:serviceId/rules/:rule_id"
-var DELETERULES = "/v4/default/registry/microservices/:serviceId/rules/:rule_id"
-
//Tag API's
var ADDTAGE = "/v4/default/registry/microservices/:serviceId/tags"
var UPDATETAG = "/v4/default/registry/microservices/:serviceId/tags/:key"
diff --git a/integration/instances_test.go b/integration/instances_test.go
index 5467247..3b7a641 100644
--- a/integration/instances_test.go
+++ b/integration/instances_test.go
@@ -43,7 +43,8 @@ import (
var _ = Describe("MicroService Api Test", func() {
var serviceName = ""
- var serviceId = ""
+ var providerID = ""
+ var consumerID = ""
var serviceAppId = "integrationtestAppIdInstance"
var serviceVersion = "0.0.2"
var serviceInstanceID = ""
@@ -79,8 +80,29 @@ var _ = Describe("MicroService Api Test", func() {
// Validate the service creation
Expect(resp.StatusCode).To(Equal(http.StatusOK))
respbody, _ := ioutil.ReadAll(resp.Body)
- serviceId = gojson.Json(string(respbody)).Get("serviceId").Tostring()
- Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
+ providerID = gojson.Json(string(respbody)).Get("serviceId").Tostring()
+ Expect(len(providerID)).Should(BeNumerically("==", LengthUUID))
+
+ servicemap = map[string]interface{}{
+ "serviceName": "C_" + serviceName,
+ "appId": serviceAppId,
+ "version": serviceVersion,
+ }
+ bodyParams = map[string]interface{}{
+ "service": servicemap,
+ }
+ body, _ = json.Marshal(bodyParams)
+ bodyBuf = bytes.NewReader(body)
+ req, _ = http.NewRequest(POST, SCURL+REGISTERMICROSERVICE, bodyBuf)
+ req.Header.Set("X-Domain-Name", "default")
+ resp, err = scclient.Do(req)
+ Expect(err).To(BeNil())
+ defer resp.Body.Close()
+
+ // Validate the service creation
+ Expect(resp.StatusCode).To(Equal(http.StatusOK))
+ respbody, _ = ioutil.ReadAll(resp.Body)
+ consumerID = gojson.Json(string(respbody)).Get("serviceId").Tostring()
//Register MicroService Instance
endpoints := []string{"cse://127.0.0.1:9984"}
@@ -106,7 +128,7 @@ var _ = Describe("MicroService Api Test", func() {
bodyParams = map[string]interface{}{
"instance": instance,
}
- url := strings.Replace(REGISTERINSTANCE, ":serviceId", serviceId, 1)
+ url := strings.Replace(REGISTERINSTANCE, ":serviceId", providerID, 1)
body, _ = json.Marshal(bodyParams)
bodyBuf = bytes.NewReader(body)
req, _ = http.NewRequest(POST, SCURL+url, bodyBuf)
@@ -119,13 +141,13 @@ var _ = Describe("MicroService Api Test", func() {
Expect(resp.StatusCode).To(Equal(http.StatusOK))
respbody, _ = ioutil.ReadAll(resp.Body)
serviceInstanceID = gojson.Json(string(respbody)).Get("instanceId").Tostring()
- Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
+ Expect(len(providerID)).Should(BeNumerically("==", LengthUUID))
})
AfterEach(func() {
if serviceInstanceID != "" {
- url := strings.Replace(UNREGISTERINSTANCE, ":serviceId", serviceId, 1)
+ url := strings.Replace(UNREGISTERINSTANCE, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", serviceInstanceID, 1)
req, _ := http.NewRequest(DELETE, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
@@ -133,8 +155,8 @@ var _ = Describe("MicroService Api Test", func() {
Expect(resp.StatusCode).To(Equal(http.StatusOK))
}
- if serviceId != "" {
- url := strings.Replace(UNREGISTERMICROSERVICE, ":serviceId", serviceId, 1)
+ if providerID != "" {
+ url := strings.Replace(UNREGISTERMICROSERVICE, ":serviceId", providerID, 1)
req, _ := http.NewRequest(DELETE, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
resp, _ := scclient.Do(req)
@@ -154,7 +176,7 @@ var _ = Describe("MicroService Api Test", func() {
bodyParams := map[string]interface{}{
"instancse": instance,
}
- url := strings.Replace(REGISTERINSTANCE, ":serviceId", serviceId, 1)
+ url := strings.Replace(REGISTERINSTANCE, ":serviceId", providerID, 1)
body, _ := json.Marshal(bodyParams)
bodyBuf := bytes.NewReader(body)
req, _ := http.NewRequest(POST, SCURL+url, bodyBuf)
@@ -191,7 +213,7 @@ var _ = Describe("MicroService Api Test", func() {
bodyParams := map[string]interface{}{
"instance": instance,
}
- url := strings.Replace(REGISTERINSTANCE, ":serviceId", serviceId, 1)
+ url := strings.Replace(REGISTERINSTANCE, ":serviceId", providerID, 1)
body, _ := json.Marshal(bodyParams)
bodyBuf := bytes.NewReader(body)
req, _ := http.NewRequest(POST, SCURL+url, bodyBuf)
@@ -232,7 +254,7 @@ var _ = Describe("MicroService Api Test", func() {
bodyParams := map[string]interface{}{
"instance": instance,
}
- url := strings.Replace(REGISTERINSTANCE, ":serviceId", serviceId, 1)
+ url := strings.Replace(REGISTERINSTANCE, ":serviceId", providerID, 1)
body, _ := json.Marshal(bodyParams)
bodyBuf := bytes.NewReader(body)
req, _ := http.NewRequest(POST, SCURL+url, bodyBuf)
@@ -249,7 +271,7 @@ var _ = Describe("MicroService Api Test", func() {
//Verify the instanceID is different for two instance
Expect(serviceInst).NotTo(Equal(serviceInstanceID))
//Delete Instance
- url = strings.Replace(UNREGISTERINSTANCE, ":serviceId", serviceId, 1)
+ url = strings.Replace(UNREGISTERINSTANCE, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", serviceInst, 1)
req, _ = http.NewRequest(DELETE, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
@@ -262,7 +284,7 @@ var _ = Describe("MicroService Api Test", func() {
It("Find Micro-service Info by AppID", func() {
req, _ := http.NewRequest(GET, SCURL+FINDINSTANCE+"?appId="+serviceAppId+"&serviceName="+serviceName+"&version="+serviceVersion, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -276,12 +298,44 @@ var _ = Describe("MicroService Api Test", func() {
}
}
Expect(foundMicroServiceInstance).To(Equal(true))
+
+ // wait dep handle
+ time.Sleep(3 * time.Second)
+
+ //Get Provider by ConsumerID
+ url := strings.Replace(GETCONPRODEPENDENCY, ":consumerId", consumerID, 1)
+ req, _ = http.NewRequest(GET, SCURL+url, nil)
+ req.Header.Set("X-Domain-Name", "default")
+ resp, _ = scclient.Do(req)
+ respbody, _ = ioutil.ReadAll(resp.Body)
+ Expect(resp.StatusCode).To(Equal(http.StatusOK))
+ respStruct := map[string][]map[string]interface{}{}
+ json.Unmarshal(respbody, &respStruct)
+ Expect(providerID).To(Equal(respStruct["providers"][0]["serviceId"]))
+
+ //Get Consumer by ProviderID
+ url = strings.Replace(GETPROCONDEPENDENCY, ":providerId", providerID, 1)
+ req, _ = http.NewRequest(GET, SCURL+url, nil)
+ req.Header.Set("X-Domain-Name", "default")
+ resp, _ = scclient.Do(req)
+ respbody, _ = ioutil.ReadAll(resp.Body)
+ Expect(resp.StatusCode).To(Equal(http.StatusOK))
+ respStruct = map[string][]map[string]interface{}{}
+ json.Unmarshal(respbody, &respStruct)
+ found := false
+ for _, c := range respStruct["consumers"] {
+ if c["serviceId"] == consumerID {
+ found = true
+ break
+ }
+ }
+ Expect(true).To(Equal(found))
})
It("Find Micro-service Info by invalid AppID", func() {
req, _ := http.NewRequest(GET, SCURL+FINDINSTANCE+"?appId=XXXX&serviceName="+serviceName+"&version="+serviceVersion, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))
})
@@ -289,7 +343,7 @@ var _ = Describe("MicroService Api Test", func() {
It("Find Micro-service Info by alias", func() {
req, _ := http.NewRequest(GET, SCURL+FINDINSTANCE+"?appId="+serviceAppId+"&serviceName="+alias+"&version="+serviceVersion, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -306,10 +360,10 @@ var _ = Describe("MicroService Api Test", func() {
})
It("Find Micro-Service Instance by ServiceID", func() {
- url := strings.Replace(GETINSTANCE, ":serviceId", serviceId, 1)
+ url := strings.Replace(GETINSTANCE, ":serviceId", providerID, 1)
req, _ := http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -329,17 +383,17 @@ var _ = Describe("MicroService Api Test", func() {
url := strings.Replace(GETINSTANCE, ":serviceId", "XX", 1)
req, _ := http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))
})
It("Find MicroServiceInstance with Service and IstanceID", func() {
- url := strings.Replace(GETINSTANCEBYINSTANCEID, ":serviceId", serviceId, 1)
+ url := strings.Replace(GETINSTANCEBYINSTANCEID, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", serviceInstanceID, 1)
req, _ := http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -350,11 +404,11 @@ var _ = Describe("MicroService Api Test", func() {
})
It("Find Micro-Service Instance by Invalid InstanceID", func() {
- url := strings.Replace(GETINSTANCEBYINSTANCEID, ":serviceId", serviceId, 1)
+ url := strings.Replace(GETINSTANCEBYINSTANCEID, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", "XX", 1)
req, _ := http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))
})
@@ -362,7 +416,7 @@ var _ = Describe("MicroService Api Test", func() {
It("Find Micro-Service Instance with rev", func() {
req, _ := http.NewRequest(GET, SCURL+FINDINSTANCE+"?appId="+serviceAppId+"&serviceName="+serviceName+"&version="+serviceVersion, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -371,7 +425,7 @@ var _ = Describe("MicroService Api Test", func() {
req, _ = http.NewRequest(GET, SCURL+FINDINSTANCE+"?appId="+serviceAppId+"&serviceName="+serviceName+"&version="+serviceVersion+"&rev="+rev, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ = scclient.Do(req)
ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusNotModified))
@@ -396,13 +450,13 @@ var _ = Describe("MicroService Api Test", func() {
}
notExistsInstance := map[string]interface{}{
"instance": map[string]interface{}{
- "serviceId": serviceId,
+ "serviceId": providerID,
"instanceId": "notexisted",
},
}
providerInstance := map[string]interface{}{
"instance": map[string]interface{}{
- "serviceId": serviceId,
+ "serviceId": providerID,
"instanceId": serviceInstanceID,
},
}
@@ -420,7 +474,7 @@ var _ = Describe("MicroService Api Test", func() {
req, _ := http.NewRequest(POST, SCURL+INSTANCEACTION, bytes.NewReader(body))
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ := scclient.Do(req)
ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))
@@ -428,7 +482,7 @@ var _ = Describe("MicroService Api Test", func() {
bodyBuf := bytes.NewReader(body)
req, _ = http.NewRequest(POST, SCURL+INSTANCEACTION+"?type=query", bodyBuf)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ = scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -475,7 +529,7 @@ var _ = Describe("MicroService Api Test", func() {
bodyParams := map[string]interface{}{
"properties": propertiesInstance,
}
- url := strings.Replace(UPDATEINSTANCEMETADATA, ":serviceId", serviceId, 1)
+ url := strings.Replace(UPDATEINSTANCEMETADATA, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", serviceInstanceID, 1)
body, _ := json.Marshal(bodyParams)
bodyBuf := bytes.NewReader(body)
@@ -489,10 +543,10 @@ var _ = Describe("MicroService Api Test", func() {
Expect(resp.StatusCode).To(Equal(http.StatusOK))
//Verify the updated properties
- url = strings.Replace(GETINSTANCE, ":serviceId", serviceId, 1)
+ url = strings.Replace(GETINSTANCE, ":serviceId", providerID, 1)
req, _ = http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ = scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -514,7 +568,7 @@ var _ = Describe("MicroService Api Test", func() {
bodyParams := map[string]interface{}{
"properties": propertiesInstance,
}
- url := strings.Replace(UPDATEINSTANCEMETADATA, ":serviceId", serviceId, 1)
+ url := strings.Replace(UPDATEINSTANCEMETADATA, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", "WRONGINSTANCEID", 1)
body, _ := json.Marshal(bodyParams)
bodyBuf := bytes.NewReader(body)
@@ -528,7 +582,7 @@ var _ = Describe("MicroService Api Test", func() {
})
It("Update Micro-Service Instance Status", func() {
- url := strings.Replace(UPDATEINSTANCESTATUS, ":serviceId", serviceId, 1)
+ url := strings.Replace(UPDATEINSTANCESTATUS, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", serviceInstanceID, 1)
req, _ := http.NewRequest(UPDATE, SCURL+url+"?value=DOWN", nil)
req.Header.Set("X-Domain-Name", "default")
@@ -540,10 +594,10 @@ var _ = Describe("MicroService Api Test", func() {
time.Sleep(time.Second)
//Verify the Instance Status
- url = strings.Replace(GETINSTANCE, ":serviceId", serviceId, 1)
+ url = strings.Replace(GETINSTANCE, ":serviceId", providerID, 1)
req, _ = http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ = scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -560,7 +614,7 @@ var _ = Describe("MicroService Api Test", func() {
})
It("Update Micro-Service Instance Status with invalid Status", func() {
- url := strings.Replace(UPDATEINSTANCESTATUS, ":serviceId", serviceId, 1)
+ url := strings.Replace(UPDATEINSTANCESTATUS, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", serviceInstanceID, 1)
req, _ := http.NewRequest(UPDATE, SCURL+url+"?value=INVALID", nil)
req.Header.Set("X-Domain-Name", "default")
@@ -571,10 +625,10 @@ var _ = Describe("MicroService Api Test", func() {
Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))
//Verify the Instance Status does not change the value
- url = strings.Replace(GETINSTANCE, ":serviceId", serviceId, 1)
+ url = strings.Replace(GETINSTANCE, ":serviceId", providerID, 1)
req, _ = http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
- req.Header.Set("X-ConsumerId", serviceId)
+ req.Header.Set("X-ConsumerId", consumerID)
resp, _ = scclient.Do(req)
respbody, _ := ioutil.ReadAll(resp.Body)
Expect(resp.StatusCode).To(Equal(http.StatusOK))
@@ -592,7 +646,7 @@ var _ = Describe("MicroService Api Test", func() {
By("Micro-Service Instance heartbeat API", func() {
It("Send HeartBeat for micro-service instance", func() {
- url := strings.Replace(INSTANCEHEARTBEAT, ":serviceId", serviceId, 1)
+ url := strings.Replace(INSTANCEHEARTBEAT, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", serviceInstanceID, 1)
req, _ := http.NewRequest(UPDATE, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
@@ -604,7 +658,7 @@ var _ = Describe("MicroService Api Test", func() {
})
It("Send HeartBeat for wrong micro-service instance", func() {
- url := strings.Replace(INSTANCEHEARTBEAT, ":serviceId", serviceId, 1)
+ url := strings.Replace(INSTANCEHEARTBEAT, ":serviceId", providerID, 1)
url = strings.Replace(url, ":instanceId", "XXX", 1)
req, _ := http.NewRequest(UPDATE, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
@@ -620,7 +674,7 @@ var _ = Describe("MicroService Api Test", func() {
It("Call the watcher API ", func() {
//This api gives 400 bad request for the integration test
// as integration test is not able to make ws connection
- url := strings.Replace(INSTANCEWATCHER, ":serviceId", serviceId, 1)
+ url := strings.Replace(INSTANCEWATCHER, ":serviceId", providerID, 1)
req, _ := http.NewRequest(GET, SCURL+url, nil)
req.Header.Set("X-Domain-Name", "default")
resp, err := scclient.Do(req)
@@ -631,7 +685,6 @@ var _ = Describe("MicroService Api Test", func() {
})
})
})
-
})
func BenchmarkRegisterMicroServiceInstance(b *testing.B) {
diff --git a/integration/microservices_test.go b/integration/microservices_test.go
index 3450824..9d32504 100644
--- a/integration/microservices_test.go
+++ b/integration/microservices_test.go
@@ -22,16 +22,14 @@ import (
"bytes"
"encoding/json"
+ . "github.com/apache/servicecomb-service-center/integration"
+ "github.com/widuu/gojson"
"io/ioutil"
"math/rand"
"net/http"
"strconv"
"strings"
"testing"
- "time"
-
- . "github.com/apache/servicecomb-service-center/integration"
- "github.com/widuu/gojson"
)
var serviceName = ""
@@ -261,267 +259,6 @@ var _ = Describe("MicroService Api Test", func() {
})
By("Test Dependency API for Provider and Consumer", func() {
- It("test Valid dependency creation", func() {
- //Register second microservice
- getServiceName(serviceId)
- schema := []string{"testSchema"}
- properties := map[string]string{"attr1": "aa"}
- consumerApp := strconv.Itoa(rand.Intn(15))
- servicemap := map[string]interface{}{
- "serviceName": consumerApp,
- "appId": "consumerAppId",
- "version": "2.0.0",
- "description": "examples",
- "level": "FRONT",
- "schemas": schema,
- "status": "UP",
- "properties": properties,
- }
- bodyParams := map[string]interface{}{
- "service": servicemap,
- }
- body, _ := json.Marshal(bodyParams)
- bodyBuf := bytes.NewReader(body)
- req, _ := http.NewRequest(POST, SCURL+REGISTERMICROSERVICE, bodyBuf)
- req.Header.Set("X-Domain-Name", "default")
- resp, err := scclient.Do(req)
- Expect(err).To(BeNil())
- defer resp.Body.Close()
-
- // Validate the service creation
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- respbody, _ := ioutil.ReadAll(resp.Body)
- consumerServiceID := gojson.Json(string(respbody)).Get("serviceId").Tostring()
-
- //Create Dependency
- consumer := map[string]string{
- "appId": "consumerAppId",
- "serviceName": consumerApp,
- "version": "2.0.0",
- }
- provider := map[string]string{
- "appId": serviceAppId,
- "serviceName": serviceName,
- "version": serviceVersion,
- }
- providersArray := []interface{}{provider}
- dependency := map[string]interface{}{
- "consumer": consumer,
- "providers": providersArray,
- }
- dependencyArray := []interface{}{dependency}
- bodyParams = map[string]interface{}{
- "dependencies": dependencyArray,
- }
- body, _ = json.Marshal(bodyParams)
- bodyBuf = bytes.NewReader(body)
- req, _ = http.NewRequest(UPDATE, SCURL+CREATEDEPENDENCIES, bodyBuf)
- req.Header.Set("X-Domain-Name", "default")
- resp, err = scclient.Do(req)
- Expect(err).To(BeNil())
- defer resp.Body.Close()
-
- // Validate the dependency creation
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
-
- /*
- //Now try to delete the provider //this will fail as consumer needs to be deleted first
- url := strings.Replace(UNREGISTERMICROSERVICE, ":serviceId", serviceId, 1)
- req, _ = http.NewRequest(DELETE, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))*/
-
- //Now delete consumer and then provider
-
- url := strings.Replace(UNREGISTERMICROSERVICE, ":serviceId", consumerServiceID, 1)
- req, _ = http.NewRequest(DELETE, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
-
- url = strings.Replace(UNREGISTERMICROSERVICE, ":serviceId", serviceId, 1)
- req, _ = http.NewRequest(DELETE, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- serviceId = ""
-
- })
-
- It("Get Dependencies for providers and consumers", func() {
- getServiceName(serviceId)
- schema := []string{"testSchema"}
- properties := map[string]string{"attr1": "aa"}
- consumerAppName := strconv.Itoa(rand.Intn(15))
- servicemap := map[string]interface{}{
- "serviceName": consumerAppName,
- "appId": "consumerAppId",
- "version": "2.0.0",
- "description": "examples",
- "level": "FRONT",
- "schemas": schema,
- "status": "UP",
- "properties": properties,
- }
- bodyParams := map[string]interface{}{
- "service": servicemap,
- }
- body, _ := json.Marshal(bodyParams)
- bodyBuf := bytes.NewReader(body)
- req, _ := http.NewRequest(POST, SCURL+REGISTERMICROSERVICE, bodyBuf)
- req.Header.Set("X-Domain-Name", "default")
- resp, err := scclient.Do(req)
- Expect(err).To(BeNil())
- defer resp.Body.Close()
-
- // Validate the service creation
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- respbody, _ := ioutil.ReadAll(resp.Body)
- consumerServiceID := gojson.Json(string(respbody)).Get("serviceId").Tostring()
-
- //Create Dependency
- consumer := map[string]string{
- "appId": "consumerAppId",
- "serviceName": consumerAppName,
- "version": "2.0.0",
- }
- provider := map[string]string{
- "appId": serviceAppId,
- "serviceName": serviceName,
- "version": serviceVersion,
- }
- providersArray := []interface{}{provider}
- dependency := map[string]interface{}{
- "consumer": consumer,
- "providers": providersArray,
- }
- dependencyArray := []interface{}{dependency}
- bodyParams = map[string]interface{}{
- "dependencies": dependencyArray,
- }
- body, _ = json.Marshal(bodyParams)
- bodyBuf = bytes.NewReader(body)
- req, _ = http.NewRequest(UPDATE, SCURL+CREATEDEPENDENCIES, bodyBuf)
- req.Header.Set("X-Domain-Name", "default")
- resp, err = scclient.Do(req)
- Expect(err).To(BeNil())
- defer resp.Body.Close()
-
- // Validate the dependency creation
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
-
- // add new dependency
- dependency["providers"] = []interface{}{consumer}
- body, _ = json.Marshal(bodyParams)
- bodyBuf = bytes.NewReader(body)
- req, _ = http.NewRequest(POST, SCURL+CREATEDEPENDENCIES, bodyBuf)
- req.Header.Set("X-Domain-Name", "default")
- resp, err = scclient.Do(req)
- Expect(err).To(BeNil())
- defer resp.Body.Close()
-
- // Validate the dependency creation
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
-
- //Get Provider by ConsumerID
- <-time.After(time.Second)
- url := strings.Replace(GETCONPRODEPENDENCY, ":consumerId", consumerServiceID, 1)
- req, _ = http.NewRequest(GET, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- respbody, _ = ioutil.ReadAll(resp.Body)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- servicesStruct := map[string][]map[string]interface{}{}
-
- json.Unmarshal(respbody, &servicesStruct)
- foundMicroService := false
- for _, services := range servicesStruct["providers"] {
- if services["serviceName"] == serviceName {
- foundMicroService = true
- break
- }
- }
- Expect(foundMicroService).To(Equal(true))
-
- //Get Consumer by ProviderID
- url = strings.Replace(GETPROCONDEPENDENCY, ":providerId", serviceId, 1)
- req, _ = http.NewRequest(GET, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- respbody, _ = ioutil.ReadAll(resp.Body)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- servicesStruct = map[string][]map[string]interface{}{}
-
- json.Unmarshal(respbody, &servicesStruct)
- foundMicroService = false
- for _, services := range servicesStruct["consumers"] {
- if services["serviceName"] == consumerAppName {
- foundMicroService = true
- break
- }
- }
- Expect(foundMicroService).To(Equal(true))
-
- //Get new dependency by ConsumerID
- url = strings.Replace(GETCONPRODEPENDENCY, ":consumerId", consumerServiceID, 1)
- req, _ = http.NewRequest(GET, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- respbody, _ = ioutil.ReadAll(resp.Body)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- servicesStruct = map[string][]map[string]interface{}{}
-
- json.Unmarshal(respbody, &servicesStruct)
- foundMicroService = false
- for _, services := range servicesStruct["providers"] {
- if services["serviceName"] == consumerAppName {
- foundMicroService = true
- break
- }
- }
- Expect(foundMicroService).To(Equal(true))
-
- // override the dependency
- dependency["providers"] = []interface{}{}
- body, _ = json.Marshal(bodyParams)
- bodyBuf = bytes.NewReader(body)
- req, _ = http.NewRequest(UPDATE, SCURL+CREATEDEPENDENCIES, bodyBuf)
- req.Header.Set("X-Domain-Name", "default")
- resp, err = scclient.Do(req)
- Expect(err).To(BeNil())
- defer resp.Body.Close()
-
- // Validate the dependency creation
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
-
- //Get Provider by ConsumerID again
- <-time.After(time.Second)
- url = strings.Replace(GETCONPRODEPENDENCY, ":consumerId", consumerServiceID, 1)
- req, _ = http.NewRequest(GET, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- respbody, _ = ioutil.ReadAll(resp.Body)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- servicesStruct = map[string][]map[string]interface{}{}
- json.Unmarshal(respbody, &servicesStruct)
- Expect(len(servicesStruct["providers"])).To(Equal(0))
-
- //Delete Consumer and Provider
- url = strings.Replace(UNREGISTERMICROSERVICE, ":serviceId", consumerServiceID, 1)
- req, _ = http.NewRequest(DELETE, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
-
- url = strings.Replace(UNREGISTERMICROSERVICE, ":serviceId", serviceId, 1)
- req, _ = http.NewRequest(DELETE, SCURL+url, nil)
- req.Header.Set("X-Domain-Name", "default")
- resp, _ = scclient.Do(req)
- Expect(resp.StatusCode).To(Equal(http.StatusOK))
- serviceId = ""
- })
-
It("Invalid scenario for GET Providers and Consumers", func() {
//Get Provider by ConsumerID
url := strings.Replace(GETCONPRODEPENDENCY, ":consumerId", "wrongID", 1)
diff --git a/pkg/proto/service.go b/pkg/proto/service.go
index 1cf5faf..5767d98 100644
--- a/pkg/proto/service.go
+++ b/pkg/proto/service.go
@@ -42,8 +42,6 @@ type ServiceCtrlServer interface {
DeleteSchema(context.Context, *discovery.DeleteSchemaRequest) (*discovery.DeleteSchemaResponse, error)
ModifySchema(context.Context, *discovery.ModifySchemaRequest) (*discovery.ModifySchemaResponse, error)
ModifySchemas(context.Context, *discovery.ModifySchemasRequest) (*discovery.ModifySchemasResponse, error)
- AddDependenciesForMicroServices(context.Context, *discovery.AddDependenciesRequest) (*discovery.AddDependenciesResponse, error)
- CreateDependenciesForMicroServices(context.Context, *discovery.CreateDependenciesRequest) (*discovery.CreateDependenciesResponse, error)
GetProviderDependencies(context.Context, *discovery.GetDependenciesRequest) (*discovery.GetProDependenciesResponse, error)
GetConsumerDependencies(context.Context, *discovery.GetDependenciesRequest) (*discovery.GetConDependenciesResponse, error)
DeleteServices(context.Context, *discovery.DelServicesRequest) (*discovery.DelServicesResponse, error)
diff --git a/pkg/validate/validator.go b/pkg/validate/validator.go
index 60b02af..3babae7 100644
--- a/pkg/validate/validator.go
+++ b/pkg/validate/validator.go
@@ -53,6 +53,13 @@ func (v *Validator) AddRule(name string, rule *Rule) {
v.rules[name] = rule
}
+func (v *Validator) RemoveRule(name string) {
+ if v.rules == nil {
+ return
+ }
+ delete(v.rules, name)
+}
+
func (v *Validator) GetRules() map[string](*Rule) {
return v.rules
}
diff --git a/server/rest/controller/v3/dependency_controller.go b/server/rest/controller/v3/dependency_controller.go
index 5700198..5c94b0b 100644
--- a/server/rest/controller/v3/dependency_controller.go
+++ b/server/rest/controller/v3/dependency_controller.go
@@ -29,8 +29,6 @@ type DependencyService struct {
func (this *DependencyService) URLPatterns() []rest.Route {
return []rest.Route{
- {http.MethodPost, "/registry/v3/dependencies", this.AddDependenciesForMicroServices},
- {http.MethodPut, "/registry/v3/dependencies", this.CreateDependenciesForMicroServices},
{http.MethodGet, "/registry/v3/microservices/:consumerId/providers", this.GetConProDependencies},
{http.MethodGet, "/registry/v3/microservices/:providerId/consumers", this.GetProConDependencies},
}
diff --git a/server/rest/controller/v4/dependency_controller.go b/server/rest/controller/v4/dependency_controller.go
index 482e1ce..d2607c4 100644
--- a/server/rest/controller/v4/dependency_controller.go
+++ b/server/rest/controller/v4/dependency_controller.go
@@ -18,13 +18,9 @@
package v4
import (
- "encoding/json"
- "io/ioutil"
"net/http"
- "github.com/apache/servicecomb-service-center/pkg/log"
"github.com/apache/servicecomb-service-center/pkg/rest"
- "github.com/apache/servicecomb-service-center/pkg/util"
"github.com/apache/servicecomb-service-center/server/core"
pb "github.com/go-chassis/cari/discovery"
)
@@ -34,61 +30,11 @@ type DependencyService struct {
func (s *DependencyService) URLPatterns() []rest.Route {
return []rest.Route{
- {Method: http.MethodPost, Path: "/v4/:project/registry/dependencies", Func: s.AddDependenciesForMicroServices},
- {Method: http.MethodPut, Path: "/v4/:project/registry/dependencies", Func: s.CreateDependenciesForMicroServices},
{Method: http.MethodGet, Path: "/v4/:project/registry/microservices/:consumerId/providers", Func: s.GetConProDependencies},
{Method: http.MethodGet, Path: "/v4/:project/registry/microservices/:providerId/consumers", Func: s.GetProConDependencies},
}
}
-//Deprecated
-func (s *DependencyService) AddDependenciesForMicroServices(w http.ResponseWriter, r *http.Request) {
- requestBody, err := ioutil.ReadAll(r.Body)
- if err != nil {
- log.Error("read body failed", err)
- rest.WriteError(w, pb.ErrInvalidParams, err.Error())
- return
- }
- request := &pb.AddDependenciesRequest{}
- err = json.Unmarshal(requestBody, request)
- if err != nil {
- log.Errorf(err, "invalid json: %s", util.BytesToStringWithNoCopy(requestBody))
- rest.WriteError(w, pb.ErrInvalidParams, err.Error())
- return
- }
-
- resp, err := core.ServiceAPI.AddDependenciesForMicroServices(r.Context(), request)
- if err != nil {
- rest.WriteError(w, pb.ErrInternal, err.Error())
- }
- w.Header().Add("Deprecation", "version=\"v4\"")
- rest.WriteResponse(w, r, resp.Response, nil)
-}
-
-//Deprecated
-func (s *DependencyService) CreateDependenciesForMicroServices(w http.ResponseWriter, r *http.Request) {
- requestBody, err := ioutil.ReadAll(r.Body)
- if err != nil {
- log.Error("read body failed", err)
- rest.WriteError(w, pb.ErrInvalidParams, err.Error())
- return
- }
- request := &pb.CreateDependenciesRequest{}
- err = json.Unmarshal(requestBody, request)
- if err != nil {
- log.Errorf(err, "invalid json: %s", util.BytesToStringWithNoCopy(requestBody))
- rest.WriteError(w, pb.ErrInvalidParams, err.Error())
- return
- }
-
- resp, err := core.ServiceAPI.CreateDependenciesForMicroServices(r.Context(), request)
- if err != nil {
- rest.WriteError(w, pb.ErrInternal, err.Error())
- }
- w.Header().Add("Deprecation", "version=\"v4\"")
- rest.WriteResponse(w, r, resp.Response, nil)
-}
-
func (s *DependencyService) GetConProDependencies(w http.ResponseWriter, r *http.Request) {
query := r.URL.Query()
request := &pb.GetDependenciesRequest{
diff --git a/server/rest/controller/v4/instance_controller.go b/server/rest/controller/v4/instance_controller.go
index 999cb5e..878c9f4 100644
--- a/server/rest/controller/v4/instance_controller.go
+++ b/server/rest/controller/v4/instance_controller.go
@@ -131,7 +131,6 @@ func (s *MicroServiceInstanceService) FindInstances(w http.ResponseWriter, r *ht
AppId: query.Get("appId"),
ServiceName: serviceName,
Alias: serviceName,
- VersionRule: query.Get("version"),
Environment: query.Get("env"),
Tags: ids,
}
diff --git a/server/service/disco/dependency.go b/server/service/disco/dependency.go
index c9886d6..97e2dae 100644
--- a/server/service/disco/dependency.go
+++ b/server/service/disco/dependency.go
@@ -26,30 +26,6 @@ import (
pb "github.com/go-chassis/cari/discovery"
)
-func (s *MicroServiceService) AddDependenciesForMicroServices(ctx context.Context,
- in *pb.AddDependenciesRequest) (*pb.AddDependenciesResponse, error) {
- if err := validator.Validate(in); err != nil {
- return &pb.AddDependenciesResponse{
- Response: datasource.BadParamsResponse(err.Error()).Response,
- }, nil
- }
-
- resp, err := datasource.GetDependencyManager().AddOrUpdateDependencies(ctx, in.Dependencies, false)
- return &pb.AddDependenciesResponse{Response: resp}, err
-}
-
-func (s *MicroServiceService) CreateDependenciesForMicroServices(ctx context.Context,
- in *pb.CreateDependenciesRequest) (*pb.CreateDependenciesResponse, error) {
- if err := validator.Validate(in); err != nil {
- return &pb.CreateDependenciesResponse{
- Response: datasource.BadParamsResponse(err.Error()).Response,
- }, nil
- }
-
- resp, err := datasource.GetDependencyManager().AddOrUpdateDependencies(ctx, in.Dependencies, true)
- return &pb.CreateDependenciesResponse{Response: resp}, err
-}
-
func (s *MicroServiceService) GetProviderDependencies(ctx context.Context,
in *pb.GetDependenciesRequest) (*pb.GetProDependenciesResponse, error) {
err := validator.Validate(in)
diff --git a/server/service/disco/dependency_test.go b/server/service/disco/dependency_test.go
index 5597711..3525a21 100644
--- a/server/service/disco/dependency_test.go
+++ b/server/service/disco/dependency_test.go
@@ -17,8 +17,6 @@
package disco_test
import (
- "strconv"
-
"github.com/apache/servicecomb-service-center/server/service/disco"
pb "github.com/go-chassis/cari/discovery"
@@ -35,586 +33,7 @@ import (
var deh event.DependencyEventHandler
var _ = Describe("'Dependency' service", func() {
- Describe("execute 'create' operation", func() {
- var (
- consumerId1 string
- consumerId2 string
- consumerId3 string
- )
-
- It("should be passed", func() {
- respCreateService, err := serviceResource.Create(getContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- consumerId1 = respCreateService.ServiceId
-
- respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer_all",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- consumerId3 = respCreateService.ServiceId
-
- respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- Environment: pb.ENV_PROD,
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- consumerId2 = respCreateService.ServiceId
-
- respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.1",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- respCreateService, err = serviceResource.Create(getContext(), &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- Environment: pb.ENV_PROD,
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- })
-
- Context("when request is invalid", func() {
- It("should be failed", func() {
- By("dependency is nil")
- respCreateDependency, err := serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{})
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).ToNot(Equal(pb.ResponseSuccess))
-
- consumer := &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "1.0.0",
- }
- providers := []*pb.MicroServiceKey{
- {
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.0",
- },
- }
-
- By("consumer does not exist")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "noexistapp",
- ServiceName: "noexistservice",
- Version: "1.0.0",
- },
- Providers: providers,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).ToNot(Equal(pb.ResponseSuccess))
-
- By("provider version is invalid")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.32768",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
-
- By("consumer version is invalid")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "1.0.0+",
- },
- Providers: providers,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "1.0.0-1.0.1",
- },
- Providers: providers,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "latest",
- },
- Providers: providers,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "",
- },
- Providers: providers,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer",
- Version: "1.0.32768",
- },
- Providers: providers,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
-
- By("consumer serviceName is invalid")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "*",
- Version: "1.0.0",
- },
- Providers: providers,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).ToNot(Equal(pb.ResponseSuccess))
-
- By("provider app is invalid")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "*",
- ServiceName: "service_name_provider",
- Version: "2.0.0",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).ToNot(Equal(pb.ResponseSuccess))
-
- By("provider serviceName is invalid")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "service_group_provider",
- ServiceName: "-",
- Version: "2.0.0",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).ToNot(Equal(pb.ResponseSuccess))
-
- By("provider version is invalid")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "service_group_provider",
- ServiceName: "service_name_provider",
- Version: "",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).ToNot(Equal(pb.ResponseSuccess))
-
- By("provider in diff env")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- Environment: pb.ENV_PROD,
- AppId: "service_group_provider",
- ServiceName: "service_name_provider",
- Version: "latest",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- By("consumer in diff env")
- consumer.Environment = pb.ENV_PROD
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "service_group_provider",
- ServiceName: "service_name_provider",
- Version: "latest",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
-
- respCon, err := serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- Expect(err).To(BeNil())
- Expect(respCon.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respCon.Providers)).To(Equal(0))
-
- respCon, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId2,
- })
- Expect(err).To(BeNil())
- Expect(respCon.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respCon.Providers)).To(Equal(0))
-
- By("dependencies is invalid")
- var deps []*pb.ConsumerDependency
- for i := 0; i < 101; i++ {
- deps = append(deps, &pb.ConsumerDependency{
- Consumer: &pb.MicroServiceKey{
- AppId: "create_dep_group",
- ServiceName: "create_dep_consumer" + strconv.Itoa(i),
- Version: "1.0.0",
- },
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "service_group_provider",
- ServiceName: "service_name_provider",
- Version: "latest",
- },
- },
- })
- }
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: deps,
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- })
- })
-
- Context("when request is valid", func() {
- It("should be passed", func() {
- consumer := &pb.MicroServiceKey{
- ServiceName: "create_dep_consumer",
- AppId: "create_dep_group",
- Version: "1.0.0",
- }
-
- By("add latest")
- respCreateDependency, err := serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "latest",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
-
- respPro, err := serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- Expect(err).To(BeNil())
- Expect(respPro.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respPro.Providers)).To(Equal(1))
- Expect(respPro.Providers[0].Version).To(Equal("1.0.1"))
-
- By("add 1.0.0+")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.0+",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
-
- respPro, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- Expect(err).To(BeNil())
- Expect(respPro.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respPro.Providers)).To(Equal(2))
-
- By("add *")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- ServiceName: "create_dep_consumer_all",
- AppId: "create_dep_group",
- Version: "1.0.0",
- },
- Providers: []*pb.MicroServiceKey{
- {
- ServiceName: "*",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
-
- respPro, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId3,
- })
- Expect(err).To(BeNil())
- Expect(respPro.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respPro.Providers)).ToNot(Equal(0))
-
- By("clean all")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: &pb.MicroServiceKey{
- ServiceName: "create_dep_consumer_all",
- AppId: "create_dep_group",
- Version: "1.0.0",
- },
- Providers: nil,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- By("add multiple providers")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.0",
- },
- {
- ServiceName: "*",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- By("add 1.0.0-2.0.0 to override *")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.0-1.0.1",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
-
- respPro, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- Expect(err).To(BeNil())
- Expect(respPro.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respPro.Providers)).To(Equal(1))
- Expect(respPro.Providers[0].Version).To(Equal("1.0.0"))
-
- By("add not override")
- respAddDependency, err := serviceResource.AddDependenciesForMicroServices(getContext(), &pb.AddDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{
- {
- AppId: "create_dep_group",
- ServiceName: "create_dep_provider",
- Version: "1.0.0-3.0.0",
- },
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respAddDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
-
- respPro, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- Expect(err).To(BeNil())
- Expect(respPro.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respPro.Providers)).To(Equal(2))
-
- By("add provider is empty")
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- Providers: []*pb.MicroServiceKey{},
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- respCreateDependency, err = serviceResource.CreateDependenciesForMicroServices(getContext(), &pb.CreateDependenciesRequest{
- Dependencies: []*pb.ConsumerDependency{
- {
- Consumer: consumer,
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respCreateDependency.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
-
- respPro, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: consumerId1,
- })
- Expect(err).To(BeNil())
- Expect(respPro.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respPro.Providers)).To(Equal(0))
- })
- })
- })
-
- Describe("execute 'get' operartion", func() {
+ Describe("execute 'get' operation", func() {
var (
consumerId1 string
providerId1 string
@@ -719,7 +138,6 @@ var _ = Describe("'Dependency' service", func() {
ConsumerServiceId: consumerId1,
AppId: "get_dep_group",
ServiceName: "get_dep_provider",
- VersionRule: "1.0.0+",
})
Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -743,61 +161,38 @@ var _ = Describe("'Dependency' service", func() {
Expect(respGetC.Response.GetCode()).To(Equal(pb.ResponseSuccess))
Expect(len(respGetC.Providers)).To(Equal(2))
- //重复find
+ By("get self deps")
resp, err = disco.FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: consumerId1,
AppId: "get_dep_group",
- ServiceName: "get_dep_provider",
- VersionRule: "2.0.0+",
+ ServiceName: "get_dep_consumer",
})
Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
DependencyHandle()
- By("get consumer again")
- respGetP, err = serviceResource.GetProviderDependencies(getContext(), &pb.GetDependenciesRequest{
- ServiceId: providerId1,
- })
- Expect(err).To(BeNil())
- Expect(respGetP.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respGetP.Consumers)).To(Equal(0))
-
- By("get provider again")
respGetC, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: consumerId1,
+ NoSelf: true,
})
Expect(err).To(BeNil())
Expect(respGetC.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respGetC.Providers)).To(Equal(1))
- Expect(respGetC.Providers[0].ServiceId).To(Equal(providerId2))
-
- By("get self deps")
- resp, err = disco.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: consumerId1,
- AppId: "get_dep_group",
- ServiceName: "get_dep_consumer",
- VersionRule: "1.0.0+",
- })
- Expect(err).To(BeNil())
- Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
- DependencyHandle()
+ Expect(len(respGetC.Providers)).To(Equal(2))
respGetC, err = serviceResource.GetConsumerDependencies(getContext(), &pb.GetDependenciesRequest{
ServiceId: consumerId1,
- NoSelf: true,
+ NoSelf: false,
})
Expect(err).To(BeNil())
Expect(respGetC.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respGetC.Providers)).To(Equal(1))
+ Expect(len(respGetC.Providers)).To(Equal(3))
By("find before provider register")
resp, err = disco.FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: providerId2,
AppId: "get_dep_group",
ServiceName: "get_dep_finder",
- VersionRule: "1.0.0+",
})
Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ErrServiceNotExists))
@@ -819,7 +214,6 @@ var _ = Describe("'Dependency' service", func() {
ConsumerServiceId: providerId2,
AppId: "get_dep_group",
ServiceName: "get_dep_finder",
- VersionRule: "1.0.0+",
})
Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -867,7 +261,6 @@ var _ = Describe("'Dependency' service", func() {
ConsumerServiceId: providerId2,
AppId: "get_dep_group",
ServiceName: "get_dep_finder",
- VersionRule: "1.0.0+",
})
Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
diff --git a/server/service/disco/instance_test.go b/server/service/disco/instance_test.go
index bb19355..9ee916e 100644
--- a/server/service/disco/instance_test.go
+++ b/server/service/disco/instance_test.go
@@ -990,6 +990,7 @@ var _ = Describe("'Instance' service", func() {
Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ResponseSuccess))
instanceId1 = resp.InstanceId
+ Expect(instanceId1).To(Equal(instanceId1))
resp, err = discosvc.RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
@@ -1083,7 +1084,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId1,
AppId: TOO_LONG_APPID,
ServiceName: "query_instance_service",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
@@ -1091,7 +1091,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId1,
AppId: "",
ServiceName: "query_instance_service",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
@@ -1099,7 +1098,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId1,
AppId: " ",
ServiceName: "query_instance_service",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
@@ -1109,7 +1107,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId1,
AppId: "query_instance",
ServiceName: TOO_LONG_EXISTENCE,
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
@@ -1117,7 +1114,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId1,
AppId: "query_instance",
ServiceName: "",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
@@ -1125,93 +1121,15 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId1,
AppId: "query_instance",
ServiceName: " ",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- By("invalid version")
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "1.32768.0",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "1.0.0-1.32768.0",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: " ",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
-
- By("consumerId is empty")
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: "",
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "1.0.0+",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
-
By("provider does not exist")
respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId1,
AppId: "query_instance",
ServiceName: "noneservice",
- VersionRule: "latest",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrServiceNotExists))
-
- By("provider does not contain 3.0.0+ versions")
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "3.0.0+",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respFind.Instances)).To(Equal(0))
-
- By("provider does not contain 2.0.0-2.0.1 versions")
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "2.0.0-2.0.1",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respFind.Instances)).To(Equal(0))
-
- By("provider does not contain 2.0.0 version")
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "2.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrServiceNotExists))
@@ -1221,7 +1139,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: "notExistServiceId",
AppId: "query_instance",
ServiceName: "query_instance_service",
- VersionRule: "2.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ErrServiceNotExists))
@@ -1266,7 +1183,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: TOO_LONG_APPID,
ServiceName: "query_instance_service",
- Version: "1.0.0",
},
},
},
@@ -1280,7 +1196,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "",
ServiceName: "query_instance_service",
- Version: "1.0.0",
},
},
},
@@ -1294,7 +1209,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: " ",
ServiceName: "query_instance_service",
- Version: "1.0.0",
},
},
},
@@ -1310,7 +1224,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: TOO_LONG_EXISTENCE,
- Version: "1.0.0",
},
},
},
@@ -1324,7 +1237,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "",
- Version: "1.0.0",
},
},
},
@@ -1338,65 +1250,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: " ",
- Version: "1.0.0",
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
-
- By("invalid version")
- respFind, err = discosvc.BatchFindInstances(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId1,
- Services: []*pb.FindService{
- {
- Service: &pb.MicroServiceKey{
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- Version: "1.32768.0",
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respFind, err = discosvc.BatchFindInstances(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId1,
- Services: []*pb.FindService{
- {
- Service: &pb.MicroServiceKey{
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- Version: "1.0.0-1.32768.0",
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respFind, err = discosvc.BatchFindInstances(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId1,
- Services: []*pb.FindService{
- {
- Service: &pb.MicroServiceKey{
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- Version: " ",
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
- respFind, err = discosvc.BatchFindInstances(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId1,
- Services: []*pb.FindService{
- {
- Service: &pb.MicroServiceKey{
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- Version: "",
},
},
},
@@ -1432,13 +1285,11 @@ var _ = Describe("'Instance' service", func() {
By("consumerId is empty")
respFind, err = discosvc.BatchFindInstances(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId1,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_service",
- Version: "1.0.0+",
},
},
},
@@ -1454,7 +1305,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "noneservice",
- Version: "latest",
},
},
},
@@ -1479,25 +1329,6 @@ var _ = Describe("'Instance' service", func() {
Expect(respFind.Instances.Failed[0].Error.Code).To(Equal(pb.ErrInstanceNotExists))
Expect(respFind.Instances.Failed[0].Indexes[0]).To(Equal(int64(0)))
- By("provider does not contain 3.0.0+ versions")
- respFind, err = discosvc.BatchFindInstances(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId1,
- Services: []*pb.FindService{
- {
- Service: &pb.MicroServiceKey{
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- Version: "3.0.0+",
- },
- },
- },
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(len(respFind.Services.Updated[0].Instances)).To(Equal(0))
- Expect(respFind.Services.Updated[0].Index).To(Equal(int64(0)))
- Expect(respFind.Services.Updated[0].Rev).ToNot(Equal(""))
-
By("consumer does not exist")
respFind, err = discosvc.BatchFindInstances(getContext(), &pb.BatchFindInstancesRequest{
ConsumerServiceId: "notExistServiceId",
@@ -1506,7 +1337,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_service",
- Version: "2.0.0",
},
},
},
@@ -1519,64 +1349,33 @@ var _ = Describe("'Instance' service", func() {
})
Context("when query instances", func() {
- It("should be passed", func() {
- By("find with version rule")
+ It("without consumerID should be passed", func() {
+ By("consumerId is empty")
respFind, err := discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
+ ConsumerServiceId: "",
AppId: "query_instance",
ServiceName: "query_instance_service",
- VersionRule: "latest",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId2))
+ })
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
+ It("with consumerID should be passed", func() {
+ By("find with version rule")
+ respFind, err := discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId1,
AppId: "query_instance",
ServiceName: "query_instance_service",
- VersionRule: "1.0.0+",
- Tags: []string{},
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId2))
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "1.0.0-1.0.1",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId1))
-
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "1.0.0",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId1))
-
- respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
- AppId: "query_instance",
- ServiceName: "query_instance_service",
- VersionRule: "0.0.0",
- })
- Expect(err).To(BeNil())
- Expect(respFind.Response.GetCode()).To(Equal(pb.ErrServiceNotExists))
-
By("find with env")
respFind, err = discosvc.FindInstances(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId4,
AppId: "query_instance",
ServiceName: "query_instance_diff_env_service",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1587,7 +1386,6 @@ var _ = Describe("'Instance' service", func() {
Environment: pb.ENV_PROD,
AppId: "query_instance",
ServiceName: "query_instance_diff_env_service",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1600,7 +1398,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId8,
AppId: "query_instance",
ServiceName: "query_instance_with_rev",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1613,7 +1410,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId8,
AppId: "query_instance",
ServiceName: "query_instance_with_rev",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1625,7 +1421,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId8,
AppId: "query_instance",
ServiceName: "query_instance_with_rev",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1637,7 +1432,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId3,
AppId: "query_instance",
ServiceName: "query_instance_service",
- VersionRule: "1.0.5",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1648,7 +1442,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId1,
AppId: "query_instance",
ServiceName: "query_instance_service",
- VersionRule: "latest",
Tags: []string{"notexisttag"},
})
Expect(err).To(BeNil())
@@ -1668,7 +1461,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId6,
AppId: "default",
ServiceName: "query_instance_shared_provider",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1679,7 +1471,6 @@ var _ = Describe("'Instance' service", func() {
ConsumerServiceId: serviceId7,
AppId: "default",
ServiceName: "query_instance_shared_provider",
- VersionRule: "1.0.0",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1705,7 +1496,6 @@ var _ = Describe("'Instance' service", func() {
AppId: "query_instance_alias",
ServiceName: "query_instance_alias:query_instance_alias",
Alias: "query_instance_alias:query_instance_alias",
- VersionRule: "0.0.0.0+",
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
@@ -1724,21 +1514,24 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_service",
- Version: "latest",
},
},
{
Service: &pb.MicroServiceKey{
AppId: "query_instance",
- ServiceName: "query_instance_service",
- Version: "1.0.0+",
+ ServiceName: "query_instance_diff_env_service",
},
},
{
Service: &pb.MicroServiceKey{
- AppId: "query_instance",
+ AppId: "query_instance_diff_app",
ServiceName: "query_instance_service",
- Version: "0.0.0",
+ },
+ },
+ {
+ Service: &pb.MicroServiceKey{
+ AppId: "not-exists",
+ ServiceName: "not-exists",
},
},
},
@@ -1746,10 +1539,11 @@ var _ = Describe("'Instance' service", func() {
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
Expect(respFind.Services.Updated[0].Index).To(Equal(int64(0)))
- Expect(respFind.Services.Updated[0].Instances[0].InstanceId).To(Equal(instanceId2))
- Expect(respFind.Services.Updated[1].Index).To(Equal(int64(1)))
- Expect(respFind.Services.Updated[1].Instances[0].InstanceId).To(Equal(instanceId2))
- Expect(respFind.Services.Failed[0].Indexes[0]).To(Equal(int64(2)))
+ assertInstanceContain(respFind.Services.Updated[0].Instances, instanceId1)
+ assertInstanceContain(respFind.Services.Updated[0].Instances, instanceId2)
+ Expect(respFind.Services.Updated[1].Index).To(Equal(int64(2)))
+ Expect(respFind.Services.Updated[1].Instances).To(BeEmpty())
+ Expect(len(respFind.Services.Failed[0].Indexes)).To(Equal(2))
Expect(respFind.Services.Failed[0].Error.Code).To(Equal(pb.ErrServiceNotExists))
By("find with env")
@@ -1760,7 +1554,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_diff_env_service",
- Version: "1.0.0",
},
},
},
@@ -1777,7 +1570,6 @@ var _ = Describe("'Instance' service", func() {
Environment: pb.ENV_PROD,
AppId: "query_instance",
ServiceName: "query_instance_diff_env_service",
- Version: "1.0.0",
},
},
},
@@ -1796,14 +1588,12 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_with_rev",
- Version: "1.0.0",
},
},
{
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "batch_query_instance_with_rev",
- Version: "1.0.0",
},
},
},
@@ -1844,7 +1634,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_with_rev",
- Version: "1.0.0",
},
Rev: "x",
},
@@ -1873,7 +1662,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_with_rev",
- Version: "1.0.0",
},
Rev: rev,
},
@@ -1901,7 +1689,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "query_instance",
ServiceName: "query_instance_service",
- Version: "1.0.5",
},
},
},
@@ -1926,7 +1713,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "default",
ServiceName: "query_instance_shared_provider",
- Version: "1.0.0",
},
},
},
@@ -1943,7 +1729,6 @@ var _ = Describe("'Instance' service", func() {
Service: &pb.MicroServiceKey{
AppId: "default",
ServiceName: "query_instance_shared_provider",
- Version: "1.0.0",
},
},
},
@@ -2306,3 +2091,14 @@ var _ = Describe("'Instance' service", func() {
})
})
})
+
+func assertInstanceContain(instances []*pb.MicroServiceInstance, instanceID string) {
+ found := false
+ for _, instance := range instances {
+ if instance.InstanceId == instanceID {
+ found = true
+ break
+ }
+ }
+ Expect(found).To(BeTrue())
+}
diff --git a/server/service/disco/microservice_test.go b/server/service/disco/microservice_test.go
index 8badaad..9230ffc 100644
--- a/server/service/disco/microservice_test.go
+++ b/server/service/disco/microservice_test.go
@@ -868,6 +868,30 @@ var _ = Describe("'Micro-service' service", func() {
})
Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
+ resp, err = serviceResource.Exist(getContext(), &pb.GetExistenceRequest{
+ Type: "microservice",
+ AppId: "exist_appId",
+ ServiceName: "exist_service",
+ Version: "0.0.0-1.0.0",
+ })
+ Expect(err).To(BeNil())
+ Expect(resp.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
+ resp, err = serviceResource.Exist(getContext(), &pb.GetExistenceRequest{
+ Type: "microservice",
+ AppId: "exist_appId",
+ ServiceName: "exist_service",
+ Version: "0.0.0+",
+ })
+ Expect(err).To(BeNil())
+ Expect(resp.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
+ resp, err = serviceResource.Exist(getContext(), &pb.GetExistenceRequest{
+ Type: "microservice",
+ AppId: "exist_appId",
+ ServiceName: "exist_service",
+ Version: "latest",
+ })
+ Expect(err).To(BeNil())
+ Expect(resp.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
})
})
@@ -913,14 +937,6 @@ var _ = Describe("'Micro-service' service", func() {
Version: "2.0.0",
})
Expect(err).To(BeNil())
- Expect(resp.Response.GetCode()).To(Equal(pb.ErrServiceNotExists))
- resp, err = serviceResource.Exist(getContext(), &pb.GetExistenceRequest{
- Type: "microservice",
- AppId: "exist_appId",
- ServiceName: "exist_service",
- Version: "0.0.0-1.0.0",
- })
- Expect(err).To(BeNil())
Expect(resp.Response.GetCode()).To(Equal(pb.ErrServiceVersionNotExists))
})
})
@@ -968,36 +984,6 @@ var _ = Describe("'Micro-service' service", func() {
})
Expect(err).To(BeNil())
Expect(resp.ServiceId).To(Equal(serviceId2))
-
- By("search with latest versionRule")
- resp, err = serviceResource.Exist(getContext(), &pb.GetExistenceRequest{
- Type: "microservice",
- AppId: "exist_appId",
- ServiceName: "exist_service",
- Version: "latest",
- })
- Expect(err).To(BeNil())
- Expect(resp.ServiceId).To(Equal(serviceId1))
-
- By("search with 1.0.0+ versionRule")
- resp, err = serviceResource.Exist(getContext(), &pb.GetExistenceRequest{
- Type: "microservice",
- AppId: "exist_appId",
- ServiceName: "exist_service",
- Version: "1.0.0+",
- })
- Expect(err).To(BeNil())
- Expect(resp.ServiceId).To(Equal(serviceId1))
-
- By("search with range versionRule")
- resp, err = serviceResource.Exist(getContext(), &pb.GetExistenceRequest{
- Type: "microservice",
- AppId: "exist_appId",
- ServiceName: "exist_service",
- Version: "0.9.1-1.0.1",
- })
- Expect(err).To(BeNil())
- Expect(resp.ServiceId).To(Equal(serviceId1))
})
})
})
@@ -1192,7 +1178,6 @@ var _ = Describe("'Micro-service' service", func() {
ConsumerServiceId: serviceConsumerId,
AppId: provider.AppId,
ServiceName: provider.ServiceName,
- VersionRule: provider.Version,
})
Expect(err).To(BeNil())
Expect(respFind.Response.GetCode()).To(Equal(pb.ResponseSuccess))
diff --git a/server/service/disco/tag_test.go b/server/service/disco/tag_test.go
index 7483d50..9b2193c 100644
--- a/server/service/disco/tag_test.go
+++ b/server/service/disco/tag_test.go
@@ -368,7 +368,6 @@ var _ = Describe("'Tag' service", func() {
ConsumerServiceId: consumerId,
AppId: "find_inst_tag_group",
ServiceName: "find_inst_tag_provider",
- VersionRule: "1.0.0+",
Tags: []string{"not-exist-tag"},
})
Expect(err).To(BeNil())
@@ -379,7 +378,6 @@ var _ = Describe("'Tag' service", func() {
ConsumerServiceId: consumerId,
AppId: "find_inst_tag_group",
ServiceName: "find_inst_tag_provider",
- VersionRule: "1.0.0+",
Tags: []string{"filter_tag"},
})
Expect(err).To(BeNil())
diff --git a/server/service/validator/dependency_validator.go b/server/service/validator/dependency_validator.go
deleted file mode 100644
index 024c860..0000000
--- a/server/service/validator/dependency_validator.go
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package validator
-
-import (
- "regexp"
-
- "github.com/apache/servicecomb-service-center/pkg/validate"
-)
-
-var (
- addDependenciesReqValidator validate.Validator
- overwriteDependenciesReqValidator validate.Validator
-)
-
-var (
- nameFuzzyRegex, _ = regexp.Compile(`^[a-zA-Z0-9]*$|^[a-zA-Z0-9][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$|^\*$`)
- versionAllowEmptyRegex, _ = regexp.Compile(`^(^\d+(\.\d+){0,2}\+?$|^\d+(\.\d+){0,2}-\d+(\.\d+){0,2}$|^latest$)?$`)
-)
-
-func defaultDependencyValidator() *validate.Validator {
- appIDRule := *(MicroServiceKeyValidator().GetRule("AppId"))
- appIDRule.Min = 0
- serviceNameRule := *(MicroServiceKeyValidator().GetRule("ServiceName"))
- serviceNameRule.Regexp = nameFuzzyRegex
- versionRule := &validate.Rule{Max: 128, Regexp: &validate.VersionRegexp{Fuzzy: true, Regex: versionAllowEmptyRegex}}
-
- var (
- consumerMsValidator validate.Validator
- providerMsValidator validate.Validator
- )
- consumerMsValidator.AddRules(MicroServiceKeyValidator().GetRules())
-
- providerMsValidator.AddRules(MicroServiceKeyValidator().GetRules())
- providerMsValidator.AddRule("AppId", &appIDRule)
- providerMsValidator.AddRule("ServiceName", &serviceNameRule)
- providerMsValidator.AddRule("Version", versionRule)
-
- var dependenciesValidator validate.Validator
- dependenciesValidator.AddRule("Consumer", &validate.Rule{Min: 1})
- dependenciesValidator.AddSub("Consumer", &consumerMsValidator)
- dependenciesValidator.AddSub("Providers", &providerMsValidator)
-
- return &dependenciesValidator
-}
-
-func AddDependenciesReqValidator() *validate.Validator {
- return addDependenciesReqValidator.Init(func(v *validate.Validator) {
- dep := defaultDependencyValidator()
- dep.AddRule("Providers", &validate.Rule{Min: 1})
- v.AddRule("Dependencies", &validate.Rule{Min: 1, Max: 100})
- v.AddSub("Dependencies", dep)
- })
-}
-
-func CreateDependenciesReqValidator() *validate.Validator {
- return overwriteDependenciesReqValidator.Init(func(v *validate.Validator) {
- v.AddRule("Dependencies", &validate.Rule{Min: 1, Max: 100})
- v.AddSub("Dependencies", defaultDependencyValidator())
- })
-}
diff --git a/server/service/validator/instance_validator.go b/server/service/validator/instance_validator.go
index 78fcb02..09a9a20 100644
--- a/server/service/validator/instance_validator.go
+++ b/server/service/validator/instance_validator.go
@@ -52,10 +52,8 @@ var (
func FindInstanceReqValidator() *validate.Validator {
return findInstanceReqValidator.Init(func(v *validate.Validator) {
v.AddRule("ConsumerServiceId", GetInstanceReqValidator().GetRule("ConsumerServiceId"))
- v.AddRules(ExistenceReqValidator().GetRules())
- v.AddRule("VersionRule", ExistenceReqValidator().GetRule("Version"))
+ v.AddRules(MicroServiceSearchKeyValidator().GetRules())
v.AddRule("Tags", UpdateTagReqValidator().GetRule("Key"))
- v.AddRule("Environment", MicroServiceKeyValidator().GetRule("Environment"))
})
}
@@ -63,7 +61,7 @@ func BatchFindInstanceReqValidator() *validate.Validator {
return batchFindInstanceReqValidator.Init(func(v *validate.Validator) {
var findServiceValidator validate.Validator
findServiceValidator.AddRule("Service", &validate.Rule{Min: 1})
- findServiceValidator.AddSub("Service", ExistenceReqValidator())
+ findServiceValidator.AddSub("Service", MicroServiceSearchKeyValidator())
var findInstanceValidator validate.Validator
findInstanceValidator.AddRule("Instance", &validate.Rule{Min: 1})
findInstanceValidator.AddSub("Instance", HeartbeatReqValidator())
diff --git a/server/service/validator/microservice_validator.go b/server/service/validator/microservice_validator.go
index d02f170..486721f 100644
--- a/server/service/validator/microservice_validator.go
+++ b/server/service/validator/microservice_validator.go
@@ -28,6 +28,7 @@ import (
var (
microServiceKeyValidator validate.Validator
+ microServiceKeySearchValidator validate.Validator
existenceReqValidator validate.Validator
getServiceReqValidator validate.Validator
createServiceReqValidator validate.Validator
@@ -40,9 +41,7 @@ var (
// find 支持alias,多个:
serviceNameForFindRegex, _ = regexp.Compile(`^[a-zA-Z0-9]*$|^[a-zA-Z0-9][a-zA-Z0-9_\-.:]*[a-zA-Z0-9]$`)
// version規則: x[.y[.z]]
- versionRegex = validate.NewVersionRegexp(false)
- // version模糊规则: 1.0, 1.0+, 1.0-2.0, latest
- versionFuzzyRegex = validate.NewVersionRegexp(true)
+ versionRegex = validate.NewVersionRegexp(false)
pathRegex, _ = regexp.Compile(`^[A-Za-z0-9.,?'\\/+&%$#=~_\-@{}]*$`)
levelRegex, _ = regexp.Compile(`^(FRONT|MIDDLE|BACK)$`)
statusRegex, _ = regexp.Compile("^(" + discovery.MS_UP + "|" + discovery.MS_DOWN + ")?$")
@@ -65,11 +64,19 @@ func MicroServiceKeyValidator() *validate.Validator {
})
}
+func MicroServiceSearchKeyValidator() *validate.Validator {
+ return microServiceKeySearchValidator.Init(func(v *validate.Validator) {
+ v.AddRule("Environment", &validate.Rule{Regexp: envRegex})
+ v.AddRule("AppId", &validate.Rule{Min: 1, Max: 160, Regexp: nameRegex})
+ // support name or alias
+ v.AddRule("ServiceName", &validate.Rule{Min: 1, Max: 160 + 1 + 128, Regexp: serviceNameForFindRegex})
+ })
+}
+
func ExistenceReqValidator() *validate.Validator {
return existenceReqValidator.Init(func(v *validate.Validator) {
- v.AddRules(MicroServiceKeyValidator().GetRules())
- v.AddRule("ServiceName", &validate.Rule{Min: 1, Max: 160 + 1 + 128, Regexp: serviceNameForFindRegex})
- v.AddRule("Version", &validate.Rule{Min: 1, Max: 129, Regexp: versionFuzzyRegex})
+ v.AddRules(MicroServiceSearchKeyValidator().GetRules())
+ v.AddRule("Version", &validate.Rule{Min: 1, Max: 64, Regexp: versionRegex})
})
}
diff --git a/server/service/validator/validator.go b/server/service/validator/validator.go
index 02cf2c3..7e0f10f 100644
--- a/server/service/validator/validator.go
+++ b/server/service/validator/validator.go
@@ -51,6 +51,7 @@ func init() {
accountLoginValidator.AddRule("TokenExpirationTime", &validate.Rule{Regexp: &validate.TokenExpirationTimeChecker{}})
}
+// deprecated use the ValidateXXX func instead, e.g. rbac_validator.go
func Validate(v interface{}) error {
err := baseCheck(v)
if err != nil {
@@ -65,10 +66,6 @@ func Validate(v interface{}) error {
return GetServiceReqValidator().Validate(v)
case *pb.UpdateServicePropsRequest:
return UpdateServicePropsReqValidator().Validate(v)
- case *pb.CreateDependenciesRequest:
- return CreateDependenciesReqValidator().Validate(v)
- case *pb.AddDependenciesRequest:
- return AddDependenciesReqValidator().Validate(v)
case *pb.GetServiceTagsRequest:
return GetTagsReqValidator().Validate(v)
case *pb.AddServiceTagsRequest: