Merge pull request #1144 from robotLJW/master
fix: cunstom websocket close message, when the instance does not exist
diff --git a/datasource/cache/ms_cache.go b/datasource/cache/ms_cache.go
index 9c7cd8a..41a2bce 100644
--- a/datasource/cache/ms_cache.go
+++ b/datasource/cache/ms_cache.go
@@ -21,19 +21,15 @@
"context"
"strings"
- "github.com/go-chassis/cari/discovery"
-
+ "github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
"github.com/apache/servicecomb-service-center/datasource/mongo/sd"
"github.com/apache/servicecomb-service-center/pkg/util"
-)
-
-const (
- Provider = "p"
+ "github.com/go-chassis/cari/discovery"
)
func GetProviderServiceOfDeps(provider *discovery.MicroService) (*discovery.MicroServiceDependency, bool) {
- res := sd.Store().Dep().Cache().GetValue(genDepServiceKey(Provider, provider))
+ res := sd.Store().Dep().Cache().GetValue(genDepServiceKey(datasource.Provider, provider))
deps, ok := transCacheToDep(res)
if !ok {
return nil, false
@@ -60,36 +56,25 @@
return strings.Join([]string{ruleType, service.AppId, service.ServiceName, service.Version}, "/")
}
-func GetMicroServiceInstancesByID(serviceID string) ([]*discovery.MicroServiceInstance, bool) {
- cacheInstances := sd.Store().Instance().Cache().GetValue(serviceID)
- insts, ok := transCacheToInsts(cacheInstances)
+func GetMicroServiceInstancesByID(ctx context.Context, serviceID string) ([]*discovery.MicroServiceInstance, bool) {
+ index := genServiceIDIndex(ctx, serviceID)
+ cacheInstances := sd.Store().Instance().Cache().GetValue(index)
+ insts, ok := transCacheToMicroInsts(cacheInstances)
if !ok {
return nil, false
}
return insts, true
}
-func transCacheToInsts(cache []interface{}) ([]*discovery.MicroServiceInstance, bool) {
- res := make([]*discovery.MicroServiceInstance, 0, len(cache))
- for _, iter := range cache {
- inst, ok := iter.(model.Instance)
- if !ok {
- return nil, false
- }
- res = append(res, inst.Instance)
- }
- if len(res) == 0 {
- return nil, false
- }
- return res, true
-}
-
func GetServiceByID(ctx context.Context, serviceID string) (*model.Service, bool) {
if util.NoCache(ctx) {
return nil, false
}
- cacheIndex := strings.Join([]string{util.ParseDomain(ctx), util.ParseProject(ctx), serviceID}, "/")
- cacheRes := sd.Store().Service().Cache().GetValue(cacheIndex)
+ index := genServiceIDIndex(ctx, serviceID)
+ cacheRes := sd.Store().Service().Cache().GetValue(index)
+ if len(cacheRes) == 0 {
+ return nil, false
+ }
res, ok := transCacheToService(cacheRes)
if !ok {
return nil, false
@@ -97,11 +82,24 @@
return res[0], true
}
+func GetServiceByName(ctx context.Context, key *discovery.MicroServiceKey) ([]*model.Service, bool) {
+ if util.NoCache(ctx) {
+ return nil, false
+ }
+ cacheIndex := genServiceNameIndex(ctx, key)
+ res := sd.Store().Service().Cache().GetValue(cacheIndex)
+ cacheService, ok := transCacheToService(res)
+ if !ok {
+ return nil, false
+ }
+ return cacheService, true
+}
+
func GetServiceID(ctx context.Context, key *discovery.MicroServiceKey) (serviceID string, exist bool) {
if util.NoCache(ctx) {
return
}
- cacheIndex := strings.Join([]string{util.ParseDomain(ctx), util.ParseProject(ctx), key.AppId, key.ServiceName, key.Version}, "/")
+ cacheIndex := genServiceKeyIndex(ctx, key)
res := sd.Store().Service().Cache().GetValue(cacheIndex)
cacheService, ok := transCacheToService(res)
if !ok {
@@ -110,6 +108,43 @@
return cacheService[0].Service.ServiceId, true
}
+func GetServiceByIDAcrossDomain(ctx context.Context, serviceID string) (*model.Service, bool) {
+ index := genServiceIDIndexAcrossDomain(ctx, serviceID)
+ cacheRes := sd.Store().Service().Cache().GetValue(index)
+
+ if len(cacheRes) == 0 {
+ return nil, false
+ }
+
+ res, ok := transCacheToService(cacheRes)
+ if !ok {
+ return nil, false
+ }
+
+ return res[0], true
+}
+
+func GetServicesByDomainProject(domainProject string) (service []*model.Service, exist bool) {
+ services := make([]*model.Service, 0)
+ sd.Store().Service().Cache().GetValue(domainProject)
+ if len(services) == 0 {
+ return services, false
+ }
+ return services, true
+}
+
+func GetMicroServicesByDomainProject(domainProject string) (service []*discovery.MicroService, exist bool) {
+ services, exist := GetServicesByDomainProject(domainProject)
+ if !exist || len(services) == 0 {
+ return nil, false
+ }
+ ms := make([]*discovery.MicroService, len(services))
+ for i, s := range services {
+ ms[i] = s.Service
+ }
+ return ms, true
+}
+
func transCacheToService(services []interface{}) ([]*model.Service, bool) {
res := make([]*model.Service, 0, len(services))
for _, v := range services {
@@ -129,3 +164,86 @@
}
return res, true
}
+
+func genServiceIDIndexAcrossDomain(ctx context.Context, serviceID string) string {
+ return strings.Join([]string{util.ParseTargetDomainProject(ctx), serviceID}, datasource.SPLIT)
+}
+
+func genServiceIDIndex(ctx context.Context, serviceID string) string {
+ return strings.Join([]string{util.ParseDomainProject(ctx), serviceID}, datasource.SPLIT)
+}
+
+func genServiceKeyIndex(ctx context.Context, key *discovery.MicroServiceKey) string {
+ return strings.Join([]string{util.ParseDomain(ctx), util.ParseProject(ctx), key.AppId, key.ServiceName, key.Version}, datasource.SPLIT)
+}
+
+func genServiceNameIndex(ctx context.Context, key *discovery.MicroServiceKey) string {
+ return strings.Join([]string{util.ParseDomain(ctx), util.ParseProject(ctx), key.AppId, key.ServiceName}, datasource.SPLIT)
+}
+
+func CountInstances(ctx context.Context, serviceID string) (int, bool) {
+ index := genServiceIDIndex(ctx, serviceID)
+ cacheInstances := sd.Store().Instance().Cache().GetValue(index)
+ if len(cacheInstances) == 0 {
+ return 0, false
+ }
+ return len(cacheInstances), true
+}
+
+func GetInstance(ctx context.Context, serviceID string, instanceID string) (*model.Instance, bool) {
+ index := generateInstanceIDIndex(util.ParseDomainProject(ctx), serviceID, instanceID)
+ cacheInstance := sd.Store().Instance().Cache().GetValue(index)
+ insts, ok := transCacheToInsts(cacheInstance)
+ if !ok {
+ return nil, false
+ }
+ return insts[0], true
+}
+
+func GetInstances(ctx context.Context) ([]*model.Instance, bool) {
+ index := util.ParseDomainProject(ctx)
+ cacheInstance := sd.Store().Instance().Cache().GetValue(index)
+ insts, ok := transCacheToInsts(cacheInstance)
+ if !ok {
+ return nil, false
+ }
+ return insts, true
+}
+
+func transCacheToMicroInsts(cache []interface{}) ([]*discovery.MicroServiceInstance, bool) {
+ res := make([]*discovery.MicroServiceInstance, 0, len(cache))
+ for _, iter := range cache {
+ inst, ok := iter.(model.Instance)
+ if !ok {
+ return nil, false
+ }
+ res = append(res, inst.Instance)
+ }
+ if len(res) == 0 {
+ return nil, false
+ }
+ return res, true
+}
+
+func transCacheToInsts(cache []interface{}) ([]*model.Instance, bool) {
+ res := make([]*model.Instance, 0, len(cache))
+ for _, iter := range cache {
+ inst, ok := iter.(model.Instance)
+ if !ok {
+ return nil, false
+ }
+ res = append(res, &inst)
+ }
+ if len(res) == 0 {
+ return nil, false
+ }
+ return res, true
+}
+
+func generateInstanceIDIndex(domainProject string, serviceID string, instanceID string) string {
+ return util.StringJoin([]string{
+ domainProject,
+ serviceID,
+ instanceID,
+ }, datasource.SPLIT)
+}
diff --git a/datasource/common.go b/datasource/common.go
index c896076..22b8b54 100644
--- a/datasource/common.go
+++ b/datasource/common.go
@@ -30,6 +30,7 @@
RegistryProject = "default"
RegistryDomainProject = "default/default"
RegistryAppID = "default"
+ Provider = "p"
)
// WrapErrResponse is temp func here to wait finish to refact the discosvc pkg
diff --git a/datasource/instance_test.go b/datasource/instance_test.go
index 291e908..29ce7af 100644
--- a/datasource/instance_test.go
+++ b/datasource/instance_test.go
@@ -33,7 +33,7 @@
)
func TestInstance_Create(t *testing.T) {
- var serviceId string
+ var serviceID string
t.Run("create service", func(t *testing.T) {
respCreateService, err := datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
@@ -48,13 +48,13 @@
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId = respCreateService.ServiceId
+ serviceID = respCreateService.ServiceId
})
t.Run("register instance", func(t *testing.T) {
respCreateInst, err := datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId,
+ ServiceId: serviceID,
Endpoints: []string{
"createInstance_ms:127.0.0.1:8080",
},
@@ -69,7 +69,7 @@
respCreateInst, err = datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
InstanceId: "customId_ms",
- ServiceId: serviceId,
+ ServiceId: serviceID,
Endpoints: []string{
"createInstance_ms:127.0.0.1:8080",
},
@@ -84,7 +84,7 @@
t.Run("update the same instance", func(t *testing.T) {
instance := &pb.MicroServiceInstance{
- ServiceId: serviceId,
+ ServiceId: serviceID,
Endpoints: []string{
"sameInstance:127.0.0.1:8080",
},
@@ -108,9 +108,9 @@
func TestInstance_HeartBeat(t *testing.T) {
var (
- serviceId string
- instanceId1 string
- instanceId2 string
+ serviceID string
+ instanceID1 string
+ instanceID2 string
)
t.Run("register service and instance, should pass", func(t *testing.T) {
@@ -126,11 +126,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId = respCreateService.ServiceId
+ serviceID = respCreateService.ServiceId
respCreateInstance, err := datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId,
+ ServiceId: serviceID,
HostName: "UT-HOST-MS",
Endpoints: []string{
"heartbeat:127.0.0.1:8080",
@@ -140,11 +140,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId1 = respCreateInstance.InstanceId
+ instanceID1 = respCreateInstance.InstanceId
respCreateInstance, err = datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId,
+ ServiceId: serviceID,
HostName: "UT-HOST-MS",
Endpoints: []string{
"heartbeat:127.0.0.2:8080",
@@ -154,14 +154,14 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId2 = respCreateInstance.InstanceId
+ instanceID2 = respCreateInstance.InstanceId
})
t.Run("update a lease", func(t *testing.T) {
log.Info("valid instance")
resp, err := datasource.GetMetadataManager().Heartbeat(getContext(), &pb.HeartbeatRequest{
- ServiceId: serviceId,
- InstanceId: instanceId1,
+ ServiceId: serviceID,
+ InstanceId: instanceID1,
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
@@ -169,14 +169,14 @@
log.Info("serviceId does not exist")
resp, err = datasource.GetMetadataManager().Heartbeat(getContext(), &pb.HeartbeatRequest{
ServiceId: "100000000000",
- InstanceId: instanceId1,
+ InstanceId: instanceID1,
})
assert.NoError(t, err)
assert.NotEqual(t, pb.ResponseSuccess, resp.Response.GetCode())
log.Info("instance does not exist")
resp, err = datasource.GetMetadataManager().Heartbeat(getContext(), &pb.HeartbeatRequest{
- ServiceId: serviceId,
+ ServiceId: serviceID,
InstanceId: "not-exist-ins",
})
assert.NoError(t, err)
@@ -188,12 +188,12 @@
resp, err := datasource.GetMetadataManager().HeartbeatSet(getContext(), &pb.HeartbeatSetRequest{
Instances: []*pb.HeartbeatSetElement{
{
- ServiceId: serviceId,
- InstanceId: instanceId1,
+ ServiceId: serviceID,
+ InstanceId: instanceID1,
},
{
- ServiceId: serviceId,
- InstanceId: instanceId2,
+ ServiceId: serviceID,
+ InstanceId: instanceID2,
},
},
})
@@ -204,8 +204,8 @@
func TestInstance_Update(t *testing.T) {
var (
- serviceId string
- instanceId string
+ serviceID string
+ instanceID string
)
t.Run("register service and instance, should pass", func(t *testing.T) {
@@ -221,12 +221,12 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId = respCreateService.ServiceId
+ serviceID = respCreateService.ServiceId
log.Info("create instance")
respCreateInstance, err := datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId,
+ ServiceId: serviceID,
Endpoints: []string{
"updateInstance:127.0.0.1:8080",
},
@@ -237,14 +237,14 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId = respCreateInstance.InstanceId
+ instanceID = respCreateInstance.InstanceId
})
t.Run("update instance status", func(t *testing.T) {
log.Info("update instance status to DOWN")
respUpdateStatus, err := datasource.GetMetadataManager().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
Status: pb.MSI_DOWN,
})
assert.NoError(t, err)
@@ -252,8 +252,8 @@
log.Info("update instance status to OUTOFSERVICE")
respUpdateStatus, err = datasource.GetMetadataManager().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
Status: pb.MSI_OUTOFSERVICE,
})
assert.NoError(t, err)
@@ -261,8 +261,8 @@
log.Info("update instance status to STARTING")
respUpdateStatus, err = datasource.GetMetadataManager().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
Status: pb.MSI_STARTING,
})
assert.NoError(t, err)
@@ -270,8 +270,8 @@
log.Info("update instance status to TESTING")
respUpdateStatus, err = datasource.GetMetadataManager().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
Status: pb.MSI_TESTING,
})
assert.NoError(t, err)
@@ -279,8 +279,8 @@
log.Info("update instance status to UP")
respUpdateStatus, err = datasource.GetMetadataManager().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
Status: pb.MSI_UP,
})
assert.NoError(t, err)
@@ -288,7 +288,7 @@
log.Info("update instance status with a not exist instance")
respUpdateStatus, err = datasource.GetMetadataManager().UpdateInstanceStatus(getContext(), &pb.UpdateInstanceStatusRequest{
- ServiceId: serviceId,
+ ServiceId: serviceID,
InstanceId: "notexistins",
Status: pb.MSI_STARTING,
})
@@ -300,8 +300,8 @@
log.Info("update one properties")
respUpdateProperties, err := datasource.GetMetadataManager().UpdateInstanceProperties(getContext(),
&pb.UpdateInstancePropsRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
Properties: map[string]string{
"test": "test",
},
@@ -318,8 +318,8 @@
}
respUpdateProperties, err = datasource.GetMetadataManager().UpdateInstanceProperties(getContext(),
&pb.UpdateInstancePropsRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
Properties: properties,
})
assert.NoError(t, err)
@@ -328,7 +328,7 @@
log.Info("update instance that does not exist")
respUpdateProperties, err = datasource.GetMetadataManager().UpdateInstanceProperties(getContext(),
&pb.UpdateInstancePropsRequest{
- ServiceId: serviceId,
+ ServiceId: serviceID,
InstanceId: "not_exist_ins",
Properties: map[string]string{
"test": "test",
@@ -340,8 +340,8 @@
log.Info("remove properties")
respUpdateProperties, err = datasource.GetMetadataManager().UpdateInstanceProperties(getContext(),
&pb.UpdateInstancePropsRequest{
- ServiceId: serviceId,
- InstanceId: instanceId,
+ ServiceId: serviceID,
+ InstanceId: instanceID,
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respUpdateProperties.Response.GetCode())
@@ -350,7 +350,7 @@
respUpdateProperties, err = datasource.GetMetadataManager().UpdateInstanceProperties(getContext(),
&pb.UpdateInstancePropsRequest{
ServiceId: "not_exist_service",
- InstanceId: instanceId,
+ InstanceId: instanceID,
Properties: map[string]string{
"test": "test",
},
@@ -362,21 +362,21 @@
func TestInstance_Query(t *testing.T) {
var (
- serviceId1 string
- serviceId2 string
- serviceId3 string
- serviceId4 string
- serviceId5 string
- serviceId6 string
- serviceId7 string
- serviceId8 string
- serviceId9 string
- instanceId1 string
- instanceId2 string
- instanceId4 string
- instanceId5 string
- instanceId8 string
- instanceId9 string
+ serviceID1 string
+ serviceID2 string
+ serviceID3 string
+ serviceID4 string
+ serviceID5 string
+ serviceID6 string
+ serviceID7 string
+ serviceID8 string
+ serviceID9 string
+ instanceID1 string
+ instanceID2 string
+ instanceID4 string
+ instanceID5 string
+ instanceID8 string
+ instanceID9 string
)
t.Run("register services and instances for testInstance_query", func(t *testing.T) {
@@ -391,7 +391,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId1 = respCreateService.ServiceId
+ serviceID1 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
@@ -404,7 +404,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId2 = respCreateService.ServiceId
+ serviceID2 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
@@ -417,7 +417,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId3 = respCreateService.ServiceId
+ serviceID3 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
@@ -431,7 +431,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId4 = respCreateService.ServiceId
+ serviceID4 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
@@ -448,7 +448,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId5 = respCreateService.ServiceId
+ serviceID5 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
@@ -463,7 +463,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId6 = respCreateService.ServiceId
+ serviceID6 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
@@ -476,7 +476,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId7 = respCreateService.ServiceId
+ serviceID7 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
@@ -489,7 +489,7 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId8 = respCreateService.ServiceId
+ serviceID8 = respCreateService.ServiceId
respCreateService, err = datasource.GetMetadataManager().RegisterService(getContext(), &pb.CreateServiceRequest{
Service: &pb.MicroService{
@@ -502,11 +502,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateService.Response.GetCode())
- serviceId9 = respCreateService.ServiceId
+ serviceID9 = respCreateService.ServiceId
respCreateInstance, err := datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId1,
+ ServiceId: serviceID1,
HostName: "UT-HOST-MS",
Endpoints: []string{
"find:127.0.0.1:8080",
@@ -516,11 +516,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId1 = respCreateInstance.InstanceId
+ instanceID1 = respCreateInstance.InstanceId
respCreateInstance, err = datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId2,
+ ServiceId: serviceID2,
HostName: "UT-HOST-MS",
Endpoints: []string{
"find:127.0.0.2:8080",
@@ -530,11 +530,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId2 = respCreateInstance.InstanceId
+ instanceID2 = respCreateInstance.InstanceId
respCreateInstance, err = datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId4,
+ ServiceId: serviceID4,
HostName: "UT-HOST-MS",
Endpoints: []string{
"find:127.0.0.4:8080",
@@ -544,11 +544,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId4 = respCreateInstance.InstanceId
+ instanceID4 = respCreateInstance.InstanceId
respCreateInstance, err = datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId5,
+ ServiceId: serviceID5,
HostName: "UT-HOST-MS",
Endpoints: []string{
"find:127.0.0.5:8080",
@@ -558,11 +558,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId5 = respCreateInstance.InstanceId
+ instanceID5 = respCreateInstance.InstanceId
respCreateInstance, err = datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId8,
+ ServiceId: serviceID8,
HostName: "UT-HOST-MS",
Endpoints: []string{
"find:127.0.0.8:8080",
@@ -572,11 +572,11 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId8 = respCreateInstance.InstanceId
+ instanceID8 = respCreateInstance.InstanceId
respCreateInstance, err = datasource.GetMetadataManager().RegisterInstance(getContext(), &pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
- ServiceId: serviceId9,
+ ServiceId: serviceID9,
HostName: "UT-HOST-MS",
Endpoints: []string{
"find:127.0.0.9:8080",
@@ -586,24 +586,24 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateInstance.Response.GetCode())
- instanceId9 = respCreateInstance.InstanceId
+ instanceID9 = respCreateInstance.InstanceId
})
t.Run("query instance, should ok", func(t *testing.T) {
respFind, err := datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
+ ConsumerServiceId: serviceID1,
AppId: "query_instance_ms",
ServiceName: "query_instance_service_ms",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
- assertInstancesContain(t, respFind.Instances, instanceId1)
- assertInstancesContain(t, respFind.Instances, instanceId2)
+ assertInstancesContain(t, respFind.Instances, instanceID1)
+ assertInstancesContain(t, respFind.Instances, instanceID2)
})
t.Run("query not exist service instance, should failed", func(t *testing.T) {
respFind, err := datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId1,
+ ConsumerServiceId: serviceID1,
AppId: "query_instance_ms",
ServiceName: "not-exist",
})
@@ -613,14 +613,14 @@
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,
+ ConsumerServiceId: serviceID4,
AppId: "query_instance_ms",
ServiceName: "query_instance_diff_env_service_ms",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Instances))
- assertInstancesContain(t, respFind.Instances, instanceId4)
+ assertInstancesContain(t, respFind.Instances, instanceID4)
respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
Environment: pb.ENV_PROD,
@@ -630,13 +630,13 @@
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Instances))
- assertInstancesContain(t, respFind.Instances, instanceId4)
+ assertInstancesContain(t, respFind.Instances, instanceID4)
})
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{
- ConsumerServiceId: serviceId8,
+ ConsumerServiceId: serviceID8,
AppId: "query_instance_ms",
ServiceName: "query_instance_with_rev_ms",
})
@@ -644,23 +644,23 @@
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
rev, _ := ctx.Value(util.CtxResponseRevision).(string)
assert.NotEqual(t, 0, len(rev))
- assertInstancesContain(t, respFind.Instances, instanceId8)
+ assertInstancesContain(t, respFind.Instances, instanceID8)
util.WithRequestRev(ctx, "x")
respFind, err = datasource.GetMetadataManager().FindInstances(ctx, &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId8,
+ ConsumerServiceId: serviceID8,
AppId: "query_instance_ms",
ServiceName: "query_instance_with_rev_ms",
})
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)
+ assertInstancesContain(t, respFind.Instances, instanceID8)
})
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,
+ ConsumerServiceId: serviceID3,
AppId: "query_instance_ms",
ServiceName: "query_instance_service_ms",
})
@@ -671,7 +671,7 @@
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,
+ ConsumerServiceId: serviceID1,
AppId: "query_instance_ms",
ServiceName: "query_instance_service_ms",
Tags: []string{"not_exist_tag"},
@@ -690,24 +690,24 @@
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
"default", "default"),
&pb.FindInstancesRequest{
- ConsumerServiceId: serviceId6,
+ ConsumerServiceId: serviceID6,
AppId: "default",
ServiceName: "query_instance_shared_provider_ms",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Instances))
- assertInstancesContain(t, respFind.Instances, instanceId5)
+ assertInstancesContain(t, respFind.Instances, instanceID5)
respFind, err = datasource.GetMetadataManager().FindInstances(getContext(), &pb.FindInstancesRequest{
- ConsumerServiceId: serviceId7,
+ ConsumerServiceId: serviceID7,
AppId: "default",
ServiceName: "query_instance_shared_provider_ms",
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Instances))
- assertInstancesContain(t, respFind.Instances, instanceId5)
+ assertInstancesContain(t, respFind.Instances, instanceID5)
log.Info("query same domain deps")
// todo finish ut after implementing GetConsumerDependencies interface
@@ -717,7 +717,7 @@
t.Run("batch query instances, should ok", func(t *testing.T) {
respFind, err := datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId1,
+ ConsumerServiceId: serviceID1,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -747,8 +747,8 @@
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)
+ assertInstancesContain(t, respFind.Services.Updated[0].Instances, instanceID1)
+ assertInstancesContain(t, respFind.Services.Updated[0].Instances, instanceID2)
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))
@@ -757,7 +757,7 @@
t.Run("batch query instances without specify env, should ok", func(t *testing.T) {
respFind, err := datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId4,
+ ConsumerServiceId: serviceID4,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -770,13 +770,13 @@
assert.NoError(t, err)
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)
+ assert.Equal(t, instanceID4, respFind.Services.Updated[0].Instances[0].InstanceId)
})
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{
- ConsumerServiceId: serviceId8,
+ ConsumerServiceId: serviceID8,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -794,14 +794,14 @@
Instances: []*pb.FindInstance{
{
Instance: &pb.HeartbeatSetElement{
- ServiceId: serviceId9,
- InstanceId: instanceId9,
+ ServiceId: serviceID9,
+ InstanceId: instanceID9,
},
},
{
Instance: &pb.HeartbeatSetElement{
- ServiceId: serviceId8,
- InstanceId: instanceId8,
+ ServiceId: serviceID8,
+ InstanceId: instanceID8,
},
},
},
@@ -811,18 +811,18 @@
rev := respFind.Services.Updated[0].Rev
assert.Equal(t, int64(0), respFind.Services.Updated[0].Index)
assert.Equal(t, int64(1), respFind.Services.Updated[1].Index)
- assert.Equal(t, instanceId8, respFind.Services.Updated[0].Instances[0].InstanceId)
- assert.Equal(t, instanceId9, respFind.Services.Updated[1].Instances[0].InstanceId)
+ assert.Equal(t, instanceID8, respFind.Services.Updated[0].Instances[0].InstanceId)
+ assert.Equal(t, instanceID9, respFind.Services.Updated[1].Instances[0].InstanceId)
assert.NotEqual(t, 0, len(rev))
instanceRev := respFind.Instances.Updated[0].Rev
assert.Equal(t, int64(0), respFind.Instances.Updated[0].Index)
assert.Equal(t, int64(1), respFind.Instances.Updated[1].Index)
- assert.Equal(t, instanceId9, respFind.Instances.Updated[0].Instances[0].InstanceId)
- assert.Equal(t, instanceId8, respFind.Instances.Updated[1].Instances[0].InstanceId)
+ assert.Equal(t, instanceID9, respFind.Instances.Updated[0].Instances[0].InstanceId)
+ assert.Equal(t, instanceID8, respFind.Instances.Updated[1].Instances[0].InstanceId)
assert.NotEqual(t, 0, len(instanceRev))
respFind, err = datasource.GetMetadataManager().BatchFind(ctx, &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId8,
+ ConsumerServiceId: serviceID8,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -835,8 +835,8 @@
Instances: []*pb.FindInstance{
{
Instance: &pb.HeartbeatSetElement{
- ServiceId: serviceId9,
- InstanceId: instanceId9,
+ ServiceId: serviceID9,
+ InstanceId: instanceID9,
},
Rev: "x",
},
@@ -844,13 +844,13 @@
})
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
- assert.Equal(t, instanceId8, respFind.Services.Updated[0].Instances[0].InstanceId)
+ assert.Equal(t, instanceID8, respFind.Services.Updated[0].Instances[0].InstanceId)
assert.Equal(t, respFind.Services.Updated[0].Rev, rev)
- assert.Equal(t, instanceId9, respFind.Instances.Updated[0].Instances[0].InstanceId)
+ assert.Equal(t, instanceID9, respFind.Instances.Updated[0].Instances[0].InstanceId)
assert.Equal(t, instanceRev, respFind.Instances.Updated[0].Rev)
respFind, err = datasource.GetMetadataManager().BatchFind(ctx, &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId8,
+ ConsumerServiceId: serviceID8,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -863,8 +863,8 @@
Instances: []*pb.FindInstance{
{
Instance: &pb.HeartbeatSetElement{
- ServiceId: serviceId9,
- InstanceId: instanceId9,
+ ServiceId: serviceID9,
+ InstanceId: instanceID9,
},
Rev: instanceRev,
},
@@ -878,7 +878,7 @@
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,
+ ConsumerServiceId: serviceID3,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -903,7 +903,7 @@
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
"default", "default"),
&pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId6,
+ ConsumerServiceId: serviceID6,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -916,10 +916,10 @@
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Services.Updated[0].Instances))
- assert.Equal(t, instanceId5, respFind.Services.Updated[0].Instances[0].InstanceId)
+ assert.Equal(t, instanceID5, respFind.Services.Updated[0].Instances[0].InstanceId)
respFind, err = datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId7,
+ ConsumerServiceId: serviceID7,
Services: []*pb.FindService{
{
Service: &pb.MicroServiceKey{
@@ -932,18 +932,18 @@
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Services.Updated[0].Instances))
- assert.Equal(t, instanceId5, respFind.Services.Updated[0].Instances[0].InstanceId)
+ assert.Equal(t, instanceID5, respFind.Services.Updated[0].Instances[0].InstanceId)
respFind, err = datasource.GetMetadataManager().BatchFind(util.SetTargetDomainProject(
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
"default", "default"),
&pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId6,
+ ConsumerServiceId: serviceID6,
Instances: []*pb.FindInstance{
{
Instance: &pb.HeartbeatSetElement{
- ServiceId: serviceId5,
- InstanceId: instanceId5,
+ ServiceId: serviceID5,
+ InstanceId: instanceID5,
},
},
},
@@ -953,12 +953,12 @@
assert.Equal(t, pb.ErrServiceNotExists, respFind.Instances.Failed[0].Error.Code)
respFind, err = datasource.GetMetadataManager().BatchFind(getContext(), &pb.BatchFindInstancesRequest{
- ConsumerServiceId: serviceId7,
+ ConsumerServiceId: serviceID7,
Instances: []*pb.FindInstance{
{
Instance: &pb.HeartbeatSetElement{
- ServiceId: serviceId5,
- InstanceId: instanceId5,
+ ServiceId: serviceID5,
+ InstanceId: instanceID5,
},
},
},
@@ -966,7 +966,7 @@
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respFind.Response.GetCode())
assert.Equal(t, 1, len(respFind.Instances.Updated[0].Instances))
- assert.Equal(t, instanceId5, respFind.Instances.Updated[0].Instances[0].InstanceId)
+ assert.Equal(t, instanceID5, respFind.Instances.Updated[0].Instances[0].InstanceId)
core.Service.Environment = pb.ENV_DEV
})
@@ -976,20 +976,20 @@
UTFunc := func(consumerId string, code int32) {
respFind, err := datasource.GetMetadataManager().GetInstances(getContext(), &pb.GetInstancesRequest{
ConsumerServiceId: consumerId,
- ProviderServiceId: serviceId2,
+ ProviderServiceId: serviceID2,
})
assert.NoError(t, err)
assert.Equal(t, code, respFind.Response.GetCode())
}
- UTFunc(serviceId3, pb.ErrServiceNotExists)
+ UTFunc(serviceID3, pb.ErrServiceNotExists)
- UTFunc(serviceId1, pb.ResponseSuccess)
+ UTFunc(serviceID1, pb.ResponseSuccess)
log.Info("diff env")
respFind, err := datasource.GetMetadataManager().GetInstances(getContext(), &pb.GetInstancesRequest{
- ConsumerServiceId: serviceId4,
- ProviderServiceId: serviceId2,
+ ConsumerServiceId: serviceID4,
+ ProviderServiceId: serviceID2,
})
assert.NoError(t, err)
assert.NotEqual(t, pb.ResponseSuccess, respFind.Response.GetCode())
diff --git a/datasource/mongo/client/dao/dep.go b/datasource/mongo/client/dao/dep.go
index b0d2df9..2e319f0 100644
--- a/datasource/mongo/client/dao/dep.go
+++ b/datasource/mongo/client/dao/dep.go
@@ -20,20 +20,17 @@
import (
"context"
+ mutil "github.com/apache/servicecomb-service-center/datasource/mongo/util"
+
"github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/mongo/client"
"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
- mutil "github.com/apache/servicecomb-service-center/datasource/mongo/util"
"github.com/apache/servicecomb-service-center/pkg/util"
"github.com/go-chassis/cari/discovery"
)
-const (
- Provider = "p"
-)
-
func GetProviderDeps(ctx context.Context, provider *discovery.MicroService) (*discovery.MicroServiceDependency, error) {
- return getServiceOfDeps(ctx, Provider, provider)
+ return getServiceOfDeps(ctx, datasource.Provider, provider)
}
func getServiceOfDeps(ctx context.Context, ruleType string, provider *discovery.MicroService) (*discovery.MicroServiceDependency, error) {
diff --git a/datasource/mongo/dep.go b/datasource/mongo/dep.go
index 80bb141..d83da13 100644
--- a/datasource/mongo/dep.go
+++ b/datasource/mongo/dep.go
@@ -22,18 +22,17 @@
"errors"
"fmt"
- "github.com/go-chassis/cari/discovery"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/mongo/options"
+ mutil "github.com/apache/servicecomb-service-center/datasource/mongo/util"
"github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/etcd/path"
"github.com/apache/servicecomb-service-center/datasource/mongo/client"
- "github.com/apache/servicecomb-service-center/datasource/mongo/client/dao"
"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
- mutil "github.com/apache/servicecomb-service-center/datasource/mongo/util"
"github.com/apache/servicecomb-service-center/pkg/log"
"github.com/apache/servicecomb-service-center/pkg/util"
+ "github.com/go-chassis/cari/discovery"
+ "go.mongodb.org/mongo-driver/bson"
+ "go.mongodb.org/mongo-driver/mongo/options"
)
type DepManager struct {
@@ -42,8 +41,7 @@
func (ds *DepManager) SearchProviderDependency(ctx context.Context, request *discovery.GetDependenciesRequest) (*discovery.GetProDependenciesResponse, error) {
domainProject := util.ParseDomainProject(ctx)
providerServiceID := request.ServiceId
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(providerServiceID))
- provider, err := dao.GetService(ctx, filter)
+ provider, err := GetServiceByID(ctx, providerServiceID)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("query provider service failed, there is no provider %s in db", providerServiceID))
@@ -79,8 +77,7 @@
func (ds *DepManager) SearchConsumerDependency(ctx context.Context, request *discovery.GetDependenciesRequest) (*discovery.GetConDependenciesResponse, error) {
domainProject := util.ParseDomainProject(ctx)
consumerID := request.ServiceId
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(consumerID))
- consumer, err := dao.GetService(ctx, filter)
+ consumer, err := GetServiceByID(ctx, consumerID)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("query consumer service failed, there is no consumer %s in db", consumerID))
@@ -353,40 +350,3 @@
}
return microServiceDependency, nil
}
-
-func GetServiceID(ctx context.Context, key *discovery.MicroServiceKey) (string, error) {
- filter := mutil.NewBasicFilter(
- ctx,
- mutil.ServiceEnv(key.Environment),
- mutil.ServiceAppID(key.AppId),
- mutil.ServiceServiceName(key.ServiceName),
- mutil.ServiceVersion(key.Version),
- )
- id, err := getServiceID(ctx, filter)
- if err != nil && !errors.Is(err, datasource.ErrNoData) {
- return "", err
- }
- if len(id) == 0 && len(key.Alias) != 0 {
- filter = mutil.NewBasicFilter(
- ctx,
- mutil.ServiceEnv(key.Environment),
- mutil.ServiceAppID(key.AppId),
- mutil.ServiceAlias(key.Alias),
- mutil.ServiceVersion(key.Version),
- )
- return getServiceID(ctx, filter)
- }
- return id, nil
-}
-
-func getServiceID(ctx context.Context, filter bson.M) (serviceID string, err error) {
- svc, err := dao.GetService(ctx, filter)
- if err != nil {
- return
- }
- if svc != nil {
- serviceID = svc.Service.ServiceId
- return
- }
- return
-}
diff --git a/datasource/mongo/dep_util.go b/datasource/mongo/dep_util.go
index 05ecb6a..b17fc26 100644
--- a/datasource/mongo/dep_util.go
+++ b/datasource/mongo/dep_util.go
@@ -21,10 +21,9 @@
"context"
"fmt"
- pb "github.com/go-chassis/cari/discovery"
-
"github.com/apache/servicecomb-service-center/datasource/cache"
"github.com/apache/servicecomb-service-center/datasource/mongo/client/dao"
+ pb "github.com/go-chassis/cari/discovery"
)
func GetConsumerIDs(ctx context.Context, provider *pb.MicroService) ([]string, error) {
@@ -42,12 +41,9 @@
}
consumerIDs := make([]string, 0, len(serviceDeps.Dependency))
for _, serviceKeys := range serviceDeps.Dependency {
- id, ok := cache.GetServiceID(ctx, serviceKeys)
- if !ok {
- id, err = dao.GetServiceID(ctx, serviceKeys)
- if err != nil {
- return nil, err
- }
+ id, err := GetServiceID(ctx, serviceKeys)
+ if err != nil {
+ return nil, err
}
consumerIDs = append(consumerIDs, id)
}
diff --git a/datasource/mongo/dependency_query.go b/datasource/mongo/dependency_query.go
index c927dce..4716b16 100644
--- a/datasource/mongo/dependency_query.go
+++ b/datasource/mongo/dependency_query.go
@@ -23,17 +23,15 @@
"fmt"
"strings"
- pb "github.com/go-chassis/cari/discovery"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/mongo/options"
-
"github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/etcd/path"
"github.com/apache/servicecomb-service-center/datasource/mongo/client"
- "github.com/apache/servicecomb-service-center/datasource/mongo/client/dao"
"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"
+ pb "github.com/go-chassis/cari/discovery"
+ "go.mongodb.org/mongo-driver/bson"
+ "go.mongodb.org/mongo-driver/mongo/options"
)
type DependencyRelation struct {
@@ -86,8 +84,7 @@
}
for _, providerID := range providerIDs {
- filter := util.NewBasicFilter(dr.ctx, util.ServiceServiceID(providerID))
- provider, err := dao.GetService(dr.ctx, filter)
+ provider, err := GetServiceByID(dr.ctx, providerID)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Warn(fmt.Sprintf("provider[%s/%s/%s/%s] does not exist",
diff --git a/datasource/mongo/event/instance_event_handler.go b/datasource/mongo/event/instance_event_handler.go
index cb4b486..0cac34e 100644
--- a/datasource/mongo/event/instance_event_handler.go
+++ b/datasource/mongo/event/instance_event_handler.go
@@ -22,20 +22,18 @@
"fmt"
"time"
- "github.com/go-chassis/cari/discovery"
+ simple "github.com/apache/servicecomb-service-center/pkg/time"
"github.com/apache/servicecomb-service-center/datasource"
- "github.com/apache/servicecomb-service-center/datasource/cache"
"github.com/apache/servicecomb-service-center/datasource/mongo"
- "github.com/apache/servicecomb-service-center/datasource/mongo/client/dao"
"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
"github.com/apache/servicecomb-service-center/datasource/mongo/sd"
"github.com/apache/servicecomb-service-center/pkg/dump"
"github.com/apache/servicecomb-service-center/pkg/log"
- simple "github.com/apache/servicecomb-service-center/pkg/time"
"github.com/apache/servicecomb-service-center/pkg/util"
"github.com/apache/servicecomb-service-center/server/event"
"github.com/apache/servicecomb-service-center/server/syncernotify"
+ "github.com/go-chassis/cari/discovery"
)
// InstanceEventHandler is the handler to handle events
@@ -58,14 +56,11 @@
providerInstanceID := instance.Instance.InstanceId
domainProject := instance.Domain + "/" + instance.Project
ctx := util.SetDomainProject(context.Background(), instance.Domain, instance.Project)
- res, ok := cache.GetServiceByID(ctx, providerID)
- var err error
- if !ok {
- res, err = dao.GetServiceByID(ctx, providerID)
- if err != nil {
- log.Error(fmt.Sprintf("caught [%s] instance[%s/%s] event, endpoints %v, get provider's file failed from db\n",
- action, providerID, providerInstanceID, instance.Instance.Endpoints), err)
- }
+
+ res, err := mongo.GetServiceByID(ctx, providerID)
+ if err != nil {
+ log.Error(fmt.Sprintf("caught [%s] instance[%s/%s] event, endpoints %v, get provider's file failed from db\n",
+ action, providerID, providerInstanceID, instance.Instance.Endpoints), err)
}
if res == nil {
return
diff --git a/datasource/mongo/instance_util.go b/datasource/mongo/instance_util.go
new file mode 100644
index 0000000..90b51a3
--- /dev/null
+++ b/datasource/mongo/instance_util.go
@@ -0,0 +1,75 @@
+/*
+ * 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 mongo
+
+import (
+ "context"
+
+ "github.com/apache/servicecomb-service-center/datasource/cache"
+ "github.com/apache/servicecomb-service-center/datasource/mongo/client/dao"
+ "github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
+ mutil "github.com/apache/servicecomb-service-center/datasource/mongo/util"
+ "github.com/apache/servicecomb-service-center/pkg/util"
+ "github.com/go-chassis/cari/discovery"
+)
+
+func ExistInstance(ctx context.Context, serviceID string, instanceID string) (bool, error) {
+ inst, ok := cache.GetInstance(ctx, serviceID, instanceID)
+ if ok && inst != nil {
+ return true, nil
+ }
+
+ return dao.ExistInstance(ctx, serviceID, instanceID)
+}
+
+func GetInstance(ctx context.Context, serviceID string, instanceID string) (*model.Instance, error) {
+ inst, ok := cache.GetInstance(ctx, serviceID, instanceID)
+ if ok && inst != nil {
+ return inst, nil
+ }
+ filter := mutil.NewBasicFilter(ctx, mutil.InstanceServiceID(serviceID), mutil.InstanceInstanceID(instanceID))
+ return dao.GetInstance(ctx, filter)
+}
+
+func GetInstances(ctx context.Context) ([]*model.Instance, error) {
+ insts, ok := cache.GetInstances(ctx)
+ if ok {
+ return insts, nil
+ }
+ filter := mutil.NewBasicFilter(ctx)
+ return dao.GetInstances(ctx, filter)
+
+}
+
+func CountInstance(ctx context.Context, serviceID string) (int64, error) {
+ count, ok := cache.CountInstances(ctx, serviceID)
+ if ok {
+ return int64(count), nil
+ }
+ filter := mutil.NewDomainProjectFilter(util.ParseDomain(ctx), util.ParseProject(ctx), mutil.InstanceServiceID(serviceID))
+ return dao.CountInstance(ctx, filter)
+}
+
+func GetAllInstancesOfOneService(ctx context.Context, serviceID string) ([]*discovery.MicroServiceInstance, error) {
+ inst, ok := cache.GetMicroServiceInstancesByID(ctx, serviceID)
+ if ok && inst != nil {
+ return inst, nil
+ }
+
+ return dao.GetMicroServiceInstancesByID(ctx, serviceID)
+}
diff --git a/datasource/mongo/microservice_util.go b/datasource/mongo/microservice_util.go
new file mode 100644
index 0000000..91623aa
--- /dev/null
+++ b/datasource/mongo/microservice_util.go
@@ -0,0 +1,91 @@
+/*
+ * 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 mongo
+
+import (
+ "context"
+
+ "github.com/apache/servicecomb-service-center/datasource/cache"
+ "github.com/apache/servicecomb-service-center/datasource/mongo/client"
+ "github.com/apache/servicecomb-service-center/datasource/mongo/client/dao"
+ "github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
+ mutil "github.com/apache/servicecomb-service-center/datasource/mongo/util"
+ "github.com/apache/servicecomb-service-center/pkg/util"
+ "github.com/go-chassis/cari/discovery"
+ "go.mongodb.org/mongo-driver/bson"
+)
+
+func GetServiceByID(ctx context.Context, serviceID string) (*model.Service, error) {
+ svc, exist := cache.GetServiceByID(ctx, serviceID)
+ if exist && svc != nil {
+ return svc, nil
+ }
+
+ return dao.GetServiceByID(ctx, serviceID)
+}
+
+func GetServiceByIDAcrossDomain(ctx context.Context, serviceID string) (*model.Service, error) {
+ svc, exist := cache.GetServiceByIDAcrossDomain(ctx, serviceID)
+ if exist && svc != nil {
+ return svc, nil
+ }
+ providerDomain, providerProject := util.ParseTargetDomain(ctx), util.ParseTargetProject(ctx)
+ filter := mutil.NewDomainProjectFilter(providerDomain, providerProject, mutil.ServiceServiceID(serviceID))
+ return dao.GetService(ctx, filter)
+}
+
+func ServiceExistID(ctx context.Context, serviceID string) (bool, error) {
+ svc, exist := cache.GetServiceByID(ctx, serviceID)
+ if exist && svc != nil {
+ return true, nil
+ }
+ filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(serviceID))
+ return client.GetMongoClient().DocExist(ctx, model.CollectionService, filter)
+}
+
+func GetAllServicesByDomainProject(ctx context.Context) ([]*model.Service, error) {
+ services, exist := cache.GetServicesByDomainProject(util.ParseDomainProject(ctx))
+ if exist {
+ return services, nil
+ }
+
+ domain := util.ParseDomain(ctx)
+ project := util.ParseProject(ctx)
+ filter := bson.M{model.ColumnDomain: domain, model.ColumnProject: project}
+ return dao.GetServices(ctx, filter)
+}
+
+func GetAllMicroServicesByDomainProject(ctx context.Context) ([]*discovery.MicroService, error) {
+ services, exist := cache.GetMicroServicesByDomainProject(util.ParseDomainProject(ctx))
+ if exist {
+ return services, nil
+ }
+
+ domain := util.ParseDomain(ctx)
+ project := util.ParseProject(ctx)
+ filter := bson.M{model.ColumnDomain: domain, model.ColumnProject: project}
+ return dao.GetMicroServices(ctx, filter)
+}
+
+func GetServiceID(ctx context.Context, key *discovery.MicroServiceKey) (string, error) {
+ serviceID, exist := cache.GetServiceID(ctx, key)
+ if exist && len(serviceID) != 0 {
+ return serviceID, nil
+ }
+ return dao.GetServiceID(ctx, key)
+}
diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index 037d20a..2763de8 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -28,13 +28,6 @@
"strings"
"time"
- "github.com/go-chassis/cari/discovery"
- "github.com/go-chassis/cari/pkg/errsvc"
- "github.com/jinzhu/copier"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
-
"github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/cache"
"github.com/apache/servicecomb-service-center/datasource/mongo/client"
@@ -47,7 +40,13 @@
apt "github.com/apache/servicecomb-service-center/server/core"
"github.com/apache/servicecomb-service-center/server/plugin/quota"
"github.com/apache/servicecomb-service-center/server/plugin/uuid"
+ "github.com/go-chassis/cari/discovery"
+ "github.com/go-chassis/cari/pkg/errsvc"
"github.com/go-chassis/foundation/gopool"
+ "github.com/jinzhu/copier"
+ "go.mongodb.org/mongo-driver/bson"
+ "go.mongodb.org/mongo-driver/mongo"
+ "go.mongodb.org/mongo-driver/mongo/options"
)
const baseTen = 10
@@ -150,12 +149,7 @@
}
func (ds *MetadataManager) GetServices(ctx context.Context, request *discovery.GetServicesRequest) (*discovery.GetServicesResponse, error) {
- domain := util.ParseDomain(ctx)
- project := util.ParseProject(ctx)
-
- filter := bson.M{model.ColumnDomain: domain, model.ColumnProject: project}
-
- services, err := dao.GetMicroServices(ctx, filter)
+ services, err := GetAllMicroServicesByDomainProject(ctx)
if err != nil {
return &discovery.GetServicesResponse{
Response: discovery.CreateResponse(discovery.ErrInternal, "get services data failed."),
@@ -203,18 +197,15 @@
}
func (ds *MetadataManager) GetService(ctx context.Context, request *discovery.GetServiceRequest) (*discovery.MicroService, error) {
- svc, ok := cache.GetServiceByID(ctx, request.ServiceId)
- if !ok {
- var err error
- svc, err = dao.GetServiceByID(ctx, request.ServiceId)
- if err != nil {
- if errors.Is(err, datasource.ErrNoData) {
- log.Debug(fmt.Sprintf("service %s not exist in db", request.ServiceId))
- return nil, discovery.NewError(discovery.ErrServiceNotExists, "Service not exist.")
- }
- log.Error(fmt.Sprintf("failed to get single service %s from mongo", request.ServiceId), err)
- return nil, discovery.NewError(discovery.ErrInternal, "get service data from mongodb failed.")
+ svc, err := GetServiceByID(ctx, request.ServiceId)
+
+ if err != nil {
+ if errors.Is(err, datasource.ErrNoData) {
+ log.Debug(fmt.Sprintf("service %s not exist in db", request.ServiceId))
+ return nil, discovery.NewError(discovery.ErrServiceNotExists, "Service not exist.")
}
+ log.Error(fmt.Sprintf("failed to get single service %s from mongo", request.ServiceId), err)
+ return nil, discovery.NewError(discovery.ErrInternal, "get service data from mongodb failed.")
}
return svc.Service, nil
}
@@ -294,8 +285,7 @@
log.Error(fmt.Sprintf("%s micro-service %s failed, operator: %s", title, serviceID, remoteIP), mutil.ErrNotAllowDeleteSC)
return discovery.CreateResponse(discovery.ErrInvalidParams, mutil.ErrNotAllowDeleteSC.Error()), nil
}
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(serviceID))
- microservice, err := dao.GetService(ctx, filter)
+ microservice, err := GetServiceByID(ctx, serviceID)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("%s micro-service %s failed, service does not exist, operator: %s",
@@ -407,8 +397,7 @@
func (ds *MetadataManager) GetServiceDetail(ctx context.Context, request *discovery.GetServiceRequest) (
*discovery.ServiceDetail, error) {
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(request.ServiceId))
- mgSvc, err := dao.GetService(ctx, filter)
+ mgSvc, err := GetServiceByID(ctx, request.ServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
return nil, discovery.NewError(discovery.ErrServiceNotExists, "Service does not exist.")
@@ -421,7 +410,7 @@
AppId: svc.AppId,
ServiceName: svc.ServiceName,
}
- filter = mutil.NewBasicFilter(ctx,
+ filter := mutil.NewBasicFilter(ctx,
mutil.ServiceEnv(key.Environment),
mutil.ServiceAppID(key.AppId),
mutil.ServiceServiceName(key.ServiceName),
@@ -559,8 +548,7 @@
}
func (ds *MetadataManager) GetTags(ctx context.Context, request *discovery.GetServiceTagsRequest) (*discovery.GetServiceTagsResponse, error) {
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(request.ServiceId))
- svc, err := dao.GetService(ctx, filter)
+ svc, err := GetServiceByID(ctx, request.ServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("service %s not exist in db", request.ServiceId))
@@ -580,8 +568,7 @@
}
func (ds *MetadataManager) UpdateTag(ctx context.Context, request *discovery.UpdateServiceTagRequest) (*discovery.UpdateServiceTagResponse, error) {
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(request.ServiceId))
- svc, err := dao.GetService(ctx, filter)
+ svc, err := GetServiceByID(ctx, request.ServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("service %s not exist in db", request.ServiceId))
@@ -613,6 +600,7 @@
updateFilter := mutil.NewFilter(
mutil.Set(setFilter),
)
+ filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(request.ServiceId))
err = dao.UpdateService(ctx, filter, updateFilter)
if err != nil {
log.Error(fmt.Sprintf("update service %s tags failed", request.ServiceId), err)
@@ -626,8 +614,7 @@
}
func (ds *MetadataManager) DeleteTags(ctx context.Context, request *discovery.DeleteServiceTagsRequest) (*discovery.DeleteServiceTagsResponse, error) {
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(request.ServiceId))
- svc, err := dao.GetService(ctx, filter)
+ svc, err := GetServiceByID(ctx, request.ServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("service %s not exist in db", request.ServiceId))
@@ -661,6 +648,7 @@
updateFilter := mutil.NewFilter(
mutil.Set(setFilter),
)
+ filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(request.ServiceId))
err = dao.UpdateService(ctx, filter, updateFilter)
if err != nil {
log.Error(fmt.Sprintf("delete service %s tags failed", request.ServiceId), err)
@@ -1002,9 +990,8 @@
func (ds *MetadataManager) modifySchema(ctx context.Context, serviceID string, schema *discovery.Schema) *errsvc.Error {
domain := util.ParseDomain(ctx)
project := util.ParseProject(ctx)
- filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceServiceID(serviceID))
remoteIP := util.GetIPFromContext(ctx)
- svc, err := dao.GetService(ctx, filter)
+ svc, err := GetServiceByID(ctx, serviceID)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
return discovery.NewError(discovery.ErrServiceNotExists, "Service does not exist.")
@@ -1024,7 +1011,7 @@
if len(microservice.Schemas) != 0 && !isExist {
return ErrUndefinedSchemaID
}
- filter = mutil.NewDomainProjectFilter(domain, project, mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
+ filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
respSchema, err := dao.GetSchema(ctx, filter)
if err != nil {
return discovery.NewError(discovery.ErrUnavailableBackend, err.Error())
@@ -1052,7 +1039,7 @@
}
}
if len(newSchemas) != 0 {
- filter = mutil.NewDomainProjectFilter(domain, project, mutil.ServiceServiceID(serviceID))
+ filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceServiceID(serviceID))
setFilter := mutil.NewFilter(
mutil.ServiceSchemas(newSchemas),
)
@@ -1064,7 +1051,7 @@
return discovery.NewError(discovery.ErrInternal, err.Error())
}
}
- filter = mutil.NewDomainProjectFilter(domain, project, mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
+ filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceID(serviceID), mutil.SchemaID(schema.SchemaId))
setFilter := mutil.NewFilter(
mutil.Schema(schema.Schema),
mutil.SchemaSummary(schema.Summary),
@@ -1081,11 +1068,6 @@
return !ds.SchemaNotEditable
}
-func ServiceExistID(ctx context.Context, serviceID string) (bool, error) {
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(serviceID))
- return client.GetMongoClient().DocExist(ctx, model.CollectionService, filter)
-}
-
func getServiceDetailUtil(ctx context.Context, mgs *model.Service, countOnly bool, options []string) (*discovery.ServiceDetail, error) {
serviceDetail := new(discovery.ServiceDetail)
serviceID := mgs.Service.ServiceId
@@ -1102,8 +1084,7 @@
serviceDetail.Tags = mgs.Tags
case "instances":
if countOnly {
- filter := mutil.NewDomainProjectFilter(domain, project, mutil.InstanceServiceID(serviceID))
- instanceCount, err := dao.CountInstance(ctx, filter)
+ instanceCount, err := CountInstance(ctx, serviceID)
if err != nil {
log.Error(fmt.Sprintf("get number of service [%s]'s instances failed", serviceID), err)
return nil, err
@@ -1273,7 +1254,7 @@
}
func (ds *MetadataManager) ExistInstanceByID(ctx context.Context, request *discovery.MicroServiceInstanceKey) (*discovery.GetExistenceByIDResponse, error) {
- exist, _ := dao.ExistInstance(ctx, request.ServiceId, request.InstanceId)
+ exist, _ := ExistInstance(ctx, request.ServiceId, request.InstanceId)
if !exist {
return &discovery.GetExistenceByIDResponse{
Response: discovery.CreateResponse(discovery.ErrInstanceNotExists, "Check instance exist failed."),
@@ -1289,14 +1270,12 @@
// GetInstance returns instance under the current domain
func (ds *MetadataManager) GetInstance(ctx context.Context, request *discovery.GetOneInstanceRequest) (*discovery.GetOneInstanceResponse, error) {
- var service *model.Service
+ service := &model.Service{}
+ service.Service = &discovery.MicroService{}
var err error
var serviceIDs []string
- domain := util.ParseDomain(ctx)
- project := util.ParseProject(ctx)
if len(request.ConsumerServiceId) > 0 {
- filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceServiceID(request.ConsumerServiceId))
- service, err = dao.GetService(ctx, filter)
+ service, err = GetServiceByID(ctx, request.ConsumerServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("consumer does not exist, consumer %s find provider instance %s %s",
@@ -1313,8 +1292,7 @@
}, err
}
}
- filter := mutil.NewDomainProjectFilter(domain, project, mutil.ServiceServiceID(request.ProviderServiceId))
- provider, err := dao.GetService(ctx, filter)
+ provider, err := GetServiceByID(ctx, request.ProviderServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("provider does not exist, consumer %s find provider instance %s %s",
@@ -1354,15 +1332,22 @@
Response: discovery.CreateResponse(discovery.ErrInstanceNotExists, mes.Error()),
}, nil
}
- instances, ok := cache.GetMicroServiceInstancesByID(request.ProviderServiceId)
- if !ok {
- instances, err = dao.GetMicroServiceInstancesByID(ctx, request.ProviderServiceId)
- if err != nil {
- log.Error(fmt.Sprintf("get instance failed %s", findFlag()), err)
- return &discovery.GetOneInstanceResponse{
- Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
- }, err
- }
+
+ instances, err := GetAllInstancesOfOneService(ctx, request.ProviderServiceId)
+
+ if err != nil {
+ log.Error(fmt.Sprintf("get instance failed %s", findFlag()), err)
+ return &discovery.GetOneInstanceResponse{
+ Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
+ }, err
+ }
+
+ if len(instances) == 0 {
+ mes := fmt.Errorf("%s failed, provider instance does not exist", findFlag())
+ log.Error("find Instances by ProviderID failed", mes)
+ return &discovery.GetOneInstanceResponse{
+ Response: discovery.CreateResponse(discovery.ErrInstanceNotExists, mes.Error()),
+ }, nil
}
instance := instances[0]
@@ -1403,41 +1388,17 @@
var err error
if len(request.ConsumerServiceId) > 0 {
- var exist bool
- service, exist = cache.GetServiceByID(ctx, request.ConsumerServiceId)
- if !exist {
- service, err = dao.GetServiceByID(ctx, request.ConsumerServiceId)
- if err != nil {
- if errors.Is(err, datasource.ErrNoData) {
- log.Debug(fmt.Sprintf("consumer does not exist, consumer %s find provider %s instances",
- request.ConsumerServiceId, request.ProviderServiceId))
- return &discovery.GetInstancesResponse{
- 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 instances",
- request.ConsumerServiceId, request.ProviderServiceId), err)
- return &discovery.GetInstancesResponse{
- Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
- }, err
- }
- }
- }
-
- provider, ok := cache.GetServiceByID(ctx, request.ProviderServiceId)
- if !ok {
- provider, err = dao.GetServiceByID(ctx, request.ProviderServiceId)
+ service, err = GetServiceByID(ctx, request.ConsumerServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
- log.Debug(fmt.Sprintf("provider does not exist, consumer %s find provider %s instances",
+ log.Debug(fmt.Sprintf("consumer does not exist, consumer %s find provider %s instances",
request.ConsumerServiceId, request.ProviderServiceId))
return &discovery.GetInstancesResponse{
Response: discovery.CreateResponse(discovery.ErrServiceNotExists,
- fmt.Sprintf("provider[%s] does not exist.", request.ProviderServiceId)),
+ fmt.Sprintf("Consumer[%s] does not exist.", request.ConsumerServiceId)),
}, nil
}
- log.Error(fmt.Sprintf("get provider failed, consumer %s find provider instances %s",
+ log.Error(fmt.Sprintf("get consumer failed, consumer %s find provider %s instances",
request.ConsumerServiceId, request.ProviderServiceId), err)
return &discovery.GetInstancesResponse{
Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
@@ -1445,6 +1406,23 @@
}
}
+ provider, err := GetServiceByID(ctx, request.ProviderServiceId)
+ if err != nil {
+ if errors.Is(err, datasource.ErrNoData) {
+ log.Debug(fmt.Sprintf("provider does not exist, consumer %s find provider %s instances",
+ request.ConsumerServiceId, request.ProviderServiceId))
+ return &discovery.GetInstancesResponse{
+ Response: discovery.CreateResponse(discovery.ErrServiceNotExists,
+ fmt.Sprintf("provider[%s] does not exist.", request.ProviderServiceId)),
+ }, nil
+ }
+ log.Error(fmt.Sprintf("get provider failed, consumer %s find provider instances %s",
+ request.ConsumerServiceId, request.ProviderServiceId), err)
+ return &discovery.GetInstancesResponse{
+ Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
+ }, err
+ }
+
findFlag := func() string {
return fmt.Sprintf("consumer[%s][%s/%s/%s/%s] find provider[%s][%s/%s/%s/%s] instances",
request.ConsumerServiceId, service.Service.Environment, service.Service.AppId, service.Service.ServiceName, service.Service.Version,
@@ -1460,15 +1438,13 @@
Response: discovery.CreateResponse(discovery.ErrServiceNotExists, mes.Error()),
}, nil
}
- instances, ok := cache.GetMicroServiceInstancesByID(request.ProviderServiceId)
- if !ok {
- instances, err = dao.GetMicroServiceInstancesByID(ctx, request.ProviderServiceId)
- if err != nil {
- log.Error(fmt.Sprintf("get instances failed %s", findFlag()), err)
- return &discovery.GetInstancesResponse{
- Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
- }, err
- }
+
+ instances, err := GetAllInstancesOfOneService(ctx, request.ProviderServiceId)
+ if err != nil {
+ log.Error(fmt.Sprintf("get instances failed %s", findFlag()), err)
+ return &discovery.GetInstancesResponse{
+ Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
+ }, err
}
newRev, _ := formatRevision(request.ConsumerServiceId, instances)
if rev == newRev {
@@ -1492,8 +1468,7 @@
}
func (ds *MetadataManager) GetAllInstances(ctx context.Context, request *discovery.GetAllInstancesRequest) (*discovery.GetAllInstancesResponse, error) {
- filter := mutil.NewBasicFilter(ctx)
- findRes, err := client.GetMongoClient().Find(ctx, model.CollectionInstance, filter)
+ findRes, err := GetInstances(ctx)
if err != nil {
return nil, err
}
@@ -1501,15 +1476,8 @@
Response: discovery.CreateResponse(discovery.ResponseSuccess, "Get all instances successfully"),
}
- for findRes.Next(ctx) {
- var instance model.Instance
- err := findRes.Decode(&instance)
- if err != nil {
- return &discovery.GetAllInstancesResponse{
- Response: discovery.CreateResponse(discovery.ErrInternal, err.Error()),
- }, err
- }
- resp.Instances = append(resp.Instances, instance.Instance)
+ for _, inst := range findRes {
+ resp.Instances = append(resp.Instances, inst.Instance)
}
return resp, nil
@@ -1571,7 +1539,7 @@
// todo finish get instance
filter := mutil.NewBasicFilter(ctx, mutil.InstanceServiceID(request.ServiceId), mutil.InstanceInstanceID(request.InstanceId))
- instance, err := dao.GetInstance(ctx, filter)
+ instance, err := GetInstance(ctx, request.ServiceId, request.InstanceId)
if err != nil {
log.Error(fmt.Sprintf("update instance %s status failed", updateStatusFlag), err)
return &discovery.UpdateInstanceStatusResponse{
@@ -1613,8 +1581,7 @@
instanceFlag := util.StringJoin([]string{request.ServiceId, request.InstanceId}, "/")
domain := util.ParseDomain(ctx)
project := util.ParseProject(ctx)
- filter := mutil.NewDomainProjectFilter(domain, project, mutil.InstanceServiceID(request.ServiceId), mutil.InstanceInstanceID(request.InstanceId))
- instance, err := dao.GetInstance(ctx, filter)
+ instance, err := GetInstance(ctx, request.ServiceId, request.InstanceId)
if err != nil {
log.Error(fmt.Sprintf("update instance %s properties failed", instanceFlag), err)
return &discovery.UpdateInstancePropsResponse{
@@ -1632,7 +1599,7 @@
copyInstanceRef.Instance.Properties = request.Properties
// todo finish update instance
- filter = mutil.NewDomainProjectFilter(domain, project, mutil.InstanceServiceID(request.ServiceId), mutil.InstanceInstanceID(request.InstanceId))
+ filter := mutil.NewDomainProjectFilter(domain, project, mutil.InstanceServiceID(request.ServiceId), mutil.InstanceInstanceID(request.InstanceId))
setFilter := mutil.NewFilter(
mutil.InstanceModTime(strconv.FormatInt(time.Now().Unix(), baseTen)),
mutil.InstanceProperties(copyInstanceRef.Instance.Properties),
@@ -1887,8 +1854,7 @@
domainProject := util.ParseDomainProject(ctx)
service := &model.Service{Service: &discovery.MicroService{Environment: request.Environment}}
if len(request.ConsumerServiceId) > 0 {
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(request.ConsumerServiceId))
- service, err = dao.GetService(ctx, filter)
+ service, err = GetServiceByID(ctx, 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",
@@ -1979,8 +1945,7 @@
func (ds *MetadataManager) reshapeProviderKey(ctx context.Context, provider *discovery.MicroServiceKey, providerID string) (*discovery.MicroServiceKey, error) {
//维护version的规则,service name 可能是别名,所以重新获取
- filter := mutil.NewBasicFilter(ctx, mutil.ServiceServiceID(providerID))
- providerService, err := dao.GetService(ctx, filter)
+ providerService, err := GetServiceByID(ctx, providerID)
if err != nil {
return nil, err
}
@@ -2168,6 +2133,10 @@
if len(tenant) != 2 {
return nil, errors.New("invalid 'domain' or 'project'")
}
+ services, ok := cache.GetServiceByName(ctx, key)
+ if ok {
+ return services, nil
+ }
serviceNameOption := mutil.ServiceServiceName(key.ServiceName)
if len(key.Alias) > 0 {
serviceNameOption = mutil.Or(serviceNameOption, mutil.ServiceAlias(key.Alias))
@@ -2232,11 +2201,7 @@
return nil
}
- consumerDomain, consumerProject := util.ParseDomain(ctx), util.ParseProject(ctx)
- providerDomain, providerProject := util.ParseTargetDomain(ctx), util.ParseTargetProject(ctx)
-
- filter := mutil.NewDomainProjectFilter(consumerDomain, consumerProject, mutil.ServiceServiceID(consumerID))
- consumerService, err := dao.GetService(ctx, filter)
+ consumerService, err := GetServiceByID(ctx, consumerID)
if err != nil {
return discovery.NewError(discovery.ErrInternal, fmt.Sprintf("an error occurred in query consumer(%s)", err.Error()))
}
@@ -2244,9 +2209,8 @@
return discovery.NewError(discovery.ErrServiceNotExists, "consumer serviceID is invalid")
}
- filter = mutil.NewDomainProjectFilter(providerDomain, providerProject, mutil.ServiceServiceID(providerID))
// 跨应用权限
- providerService, err := dao.GetService(ctx, filter)
+ providerService, err := GetServiceByIDAcrossDomain(ctx, providerID)
if err != nil {
return discovery.NewError(discovery.ErrInternal, fmt.Sprintf("an error occurred in query provider(%s)", err.Error()))
}
diff --git a/datasource/mongo/sd/instance_cache.go b/datasource/mongo/sd/instance_cache.go
index 8ff80bb..a5db156 100644
--- a/datasource/mongo/sd/instance_cache.go
+++ b/datasource/mongo/sd/instance_cache.go
@@ -19,11 +19,12 @@
import (
"reflect"
+ "strings"
- cmap "github.com/orcaman/concurrent-map"
-
+ "github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
"github.com/apache/servicecomb-service-center/datasource/sdcommon"
+ cmap "github.com/orcaman/concurrent-map"
"go.mongodb.org/mongo-driver/bson"
)
@@ -38,7 +39,7 @@
func init() {
RegisterCacher(instance, newInstanceStore)
InstIndexCols = NewIndexCols()
- InstIndexCols.AddIndexFunc(InstSericeIDIndex)
+ InstIndexCols.AddIndexFunc(InstServiceIDIndex)
}
func newInstanceStore() *MongoCacher {
@@ -158,7 +159,7 @@
return reflect.DeepEqual(newInst, oldInst)
}
-func InstSericeIDIndex(data interface{}) string {
+func InstServiceIDIndex(data interface{}) string {
inst := data.(model.Instance)
- return inst.Instance.ServiceId
+ return strings.Join([]string{inst.Domain, inst.Project, inst.Instance.ServiceId}, datasource.SPLIT)
}
diff --git a/datasource/mongo/sd/instancec_test.go b/datasource/mongo/sd/instancec_test.go
index 29aaf40..0f38586 100644
--- a/datasource/mongo/sd/instancec_test.go
+++ b/datasource/mongo/sd/instancec_test.go
@@ -66,22 +66,45 @@
DocumentID: "id2",
Value: inst2,
}
- t.Run("update&&delete instCache, should pass", func(t *testing.T) {
+ t.Run("add instCache, should pass", func(t *testing.T) {
instanceCache.cache.ProcessUpdate(event1)
assert.Equal(t, instanceCache.cache.Size(), 1)
assert.Nil(t, instanceCache.cache.Get("id_not_exist"))
assert.Equal(t, inst1.Instance.InstanceId, instanceCache.cache.Get("id1").(model.Instance).Instance.InstanceId)
- assert.Len(t, instanceCache.cache.GetValue("svcid"), 1)
+ assert.Len(t, instanceCache.cache.GetValue("default/default/svcid"), 1)
instanceCache.cache.ProcessUpdate(event2)
assert.Equal(t, instanceCache.cache.Size(), 2)
- assert.Len(t, instanceCache.cache.GetValue("svcid"), 2)
+ assert.Len(t, instanceCache.cache.GetValue("default/default/svcid"), 2)
+
+ })
+
+ t.Run("update instCache, should pass", func(t *testing.T) {
+ assert.Equal(t, inst1, instanceCache.cache.Get("id1").(model.Instance))
+ instUpdate := model.Instance{
+ Domain: "default",
+ Project: "default",
+ Instance: &discovery.MicroServiceInstance{
+ InstanceId: "123456789",
+ ServiceId: "svcid",
+ HostName: "hostUpdate",
+ },
+ }
+ eventUpdate := MongoEvent{
+ DocumentID: "id1",
+ Value: instUpdate,
+ }
+ instanceCache.cache.ProcessUpdate(eventUpdate)
+ assert.Equal(t, instUpdate, instanceCache.cache.Get("id1").(model.Instance))
+ })
+
+ t.Run("delete instCache, should pass", func(t *testing.T) {
instanceCache.cache.ProcessDelete(event1)
assert.Nil(t, instanceCache.cache.Get("id1"))
- assert.Len(t, instanceCache.cache.GetValue("svcid"), 1)
+ assert.Len(t, instanceCache.cache.GetValue("default/default/svcid"), 1)
instanceCache.cache.ProcessDelete(event2)
- assert.Len(t, instanceCache.cache.GetValue("svcid"), 0)
+ assert.Len(t, instanceCache.cache.GetValue("default/default/svcid"), 0)
assert.Nil(t, instanceCache.cache.Get("id2"))
- assert.Len(t, instanceCache.cache.GetValue("svcid"), 0)
+ assert.Len(t, instanceCache.cache.GetValue("default/default/svcid"), 0)
})
}
diff --git a/datasource/mongo/sd/service_cache.go b/datasource/mongo/sd/service_cache.go
index 218a56d..09e3b6a 100644
--- a/datasource/mongo/sd/service_cache.go
+++ b/datasource/mongo/sd/service_cache.go
@@ -23,6 +23,7 @@
cmap "github.com/orcaman/concurrent-map"
+ "github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/datasource/mongo/client/model"
"github.com/apache/servicecomb-service-center/datasource/sdcommon"
"go.mongodb.org/mongo-driver/bson"
@@ -42,6 +43,7 @@
ServiceIndexCols.AddIndexFunc(ServiceIDIndex)
ServiceIndexCols.AddIndexFunc(ServiceInfoIndex)
ServiceIndexCols.AddIndexFunc(ServiceVersionIndex)
+ ServiceIndexCols.AddIndexFunc(ServiceDomainProjectIndex)
}
func newServiceStore() *MongoCacher {
@@ -162,15 +164,20 @@
func ServiceIDIndex(data interface{}) string {
svc := data.(model.Service)
- return strings.Join([]string{svc.Domain, svc.Project, svc.Service.ServiceId}, "/")
+ return strings.Join([]string{svc.Domain, svc.Project, svc.Service.ServiceId}, datasource.SPLIT)
}
func ServiceInfoIndex(data interface{}) string {
svc := data.(model.Service)
- return strings.Join([]string{svc.Domain, svc.Project, svc.Service.AppId, svc.Service.ServiceName, svc.Service.Version}, "/")
+ return strings.Join([]string{svc.Domain, svc.Project, svc.Service.AppId, svc.Service.ServiceName, svc.Service.Version}, datasource.SPLIT)
}
func ServiceVersionIndex(data interface{}) string {
svc := data.(model.Service)
- return strings.Join([]string{svc.Domain, svc.Project, svc.Service.AppId, svc.Service.ServiceName}, "/")
+ return strings.Join([]string{svc.Domain, svc.Project, svc.Service.AppId, svc.Service.ServiceName}, datasource.SPLIT)
+}
+
+func ServiceDomainProjectIndex(data interface{}) string {
+ svc := data.(model.Service)
+ return strings.Join([]string{svc.Domain, svc.Project}, datasource.SPLIT)
}
diff --git a/datasource/mongo/sd/servicec_test.go b/datasource/mongo/sd/servicec_test.go
index 3cbb756..ccede25 100644
--- a/datasource/mongo/sd/servicec_test.go
+++ b/datasource/mongo/sd/servicec_test.go
@@ -71,7 +71,8 @@
DocumentID: "id2",
Value: svc2,
}
- t.Run("update&&delete serviceCache, should pass", func(t *testing.T) {
+
+ t.Run("add serviceCache, should pass", func(t *testing.T) {
serviceCache.cache.ProcessUpdate(event1)
assert.Equal(t, serviceCache.cache.Size(), 1)
assert.Nil(t, serviceCache.cache.Get("id_not_exist"))
@@ -82,6 +83,32 @@
assert.Len(t, serviceCache.cache.GetValue("default/default/appid1/svc1/1.0"), 2)
assert.Len(t, serviceCache.cache.GetValue("default/default/987654321"), 1)
assert.Len(t, serviceCache.cache.GetValue("default/default/123456789"), 1)
+
+ })
+
+ t.Run("update serviceCache, should pass", func(t *testing.T) {
+ assert.Equal(t, svc1, serviceCache.cache.Get("id1").(model.Service))
+ var svc1Update = model.Service{
+ Domain: "default",
+ Project: "default",
+ Tags: nil,
+ Service: &discovery.MicroService{
+ ServiceId: "123456789",
+ AppId: "appid1",
+ ServiceName: "svc1",
+ Version: "1.0",
+ Description: "update",
+ },
+ }
+ eventUpdate := MongoEvent{
+ DocumentID: "id1",
+ Value: svc1Update,
+ }
+ serviceCache.cache.ProcessUpdate(eventUpdate)
+ assert.Equal(t, svc1Update, serviceCache.cache.Get("id1").(model.Service))
+ })
+
+ t.Run("delete serviceCache, should pass", func(t *testing.T) {
serviceCache.cache.ProcessDelete(event1)
assert.Nil(t, serviceCache.cache.Get("id1"))
assert.Len(t, serviceCache.cache.GetValue("default/default/appid1/svc1/1.0"), 1)
diff --git a/datasource/mongo/util.go b/datasource/mongo/util.go
index bdae287..3644dfb 100644
--- a/datasource/mongo/util.go
+++ b/datasource/mongo/util.go
@@ -21,8 +21,6 @@
"context"
"github.com/apache/servicecomb-service-center/datasource"
- "github.com/apache/servicecomb-service-center/datasource/mongo/client/dao"
- mutil "github.com/apache/servicecomb-service-center/datasource/mongo/util"
"github.com/apache/servicecomb-service-center/pkg/util"
pb "github.com/go-chassis/cari/discovery"
"github.com/go-chassis/foundation/gopool"
@@ -49,9 +47,7 @@
Apps: &pb.StApp{},
}
- filter := mutil.NewBasicFilter(ctx)
-
- services, err := dao.GetMicroServices(ctx, filter)
+ services, err := GetAllMicroServicesByDomainProject(ctx)
if err != nil {
return nil, err
}
@@ -68,7 +64,7 @@
getInstanceCountByDomain(ctx, svcIDToNonVerKey, respGetInstanceCountByDomain)
})
- instances, err := dao.GetInstances(ctx, filter)
+ instances, err := GetInstances(ctx)
if err != nil {
return nil, err
}
@@ -88,11 +84,8 @@
func getInstanceCountByDomain(ctx context.Context, svcIDToNonVerKey map[string]string, resp chan datasource.GetInstanceCountByDomainResponse) {
ret := datasource.GetInstanceCountByDomainResponse{}
- domain := util.ParseDomain(ctx)
- project := util.ParseProject(ctx)
for sid := range svcIDToNonVerKey {
- filter := mutil.NewDomainProjectFilter(domain, project, mutil.InstanceServiceID(sid))
- num, err := dao.CountInstance(ctx, filter)
+ num, err := CountInstance(ctx, sid)
if err != nil {
ret.Err = err
return