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/02 12:47:44 UTC
[servicecomb-service-center] branch master updated: Optimize: Add
discosvc.GetService (#1123)
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 2d1aa32 Optimize: Add discosvc.GetService (#1123)
2d1aa32 is described below
commit 2d1aa32767cc508105f3ad8c9a80148eff699e51
Author: little-cui <su...@qq.com>
AuthorDate: Mon Aug 2 20:47:38 2021 +0800
Optimize: Add discosvc.GetService (#1123)
---
datasource/etcd/ms.go | 15 +++-------
datasource/mongo/engine.go | 6 ++--
datasource/mongo/ms.go | 15 +++-------
datasource/ms.go | 2 +-
datasource/schema_test.go | 19 ++++++-------
datasource/service_test.go | 18 ++++++------
pkg/proto/service.go | 2 ++
server/plugin/auth/buildin/service_parser.go | 8 +-----
.../rest/controller/v4/microservice_controller.go | 7 +++--
server/service/disco/metadata_dao.go | 11 ++++++++
server/service/disco/microservice.go | 7 ++---
server/service/disco/microservice_test.go | 33 +++++++++++-----------
server/service/disco/schema_test.go | 18 ++++++------
13 files changed, 75 insertions(+), 86 deletions(-)
diff --git a/datasource/etcd/ms.go b/datasource/etcd/ms.go
index e63a458..e2b4d52 100644
--- a/datasource/etcd/ms.go
+++ b/datasource/etcd/ms.go
@@ -196,26 +196,19 @@ func (ds *MetadataManager) GetServices(ctx context.Context, request *pb.GetServi
}
func (ds *MetadataManager) GetService(ctx context.Context, request *pb.GetServiceRequest) (
- *pb.GetServiceResponse, error) {
+ *pb.MicroService, error) {
domainProject := util.ParseDomainProject(ctx)
singleService, err := serviceUtil.GetService(ctx, domainProject, request.ServiceId)
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("get micro-service[%s] failed, service does not exist in db", request.ServiceId))
- return &pb.GetServiceResponse{
- Response: pb.CreateResponse(pb.ErrServiceNotExists, "Service does not exist."),
- }, nil
+ return nil, pb.NewError(pb.ErrServiceNotExists, "Service does not exist.")
}
log.Error(fmt.Sprintf("get micro-service[%s] failed, get service file failed", request.ServiceId), err)
- return &pb.GetServiceResponse{
- Response: pb.CreateResponse(pb.ErrInternal, err.Error()),
- }, err
+ return nil, pb.NewError(pb.ErrInternal, err.Error())
}
- return &pb.GetServiceResponse{
- Response: pb.CreateResponse(pb.ResponseSuccess, "Get service successfully."),
- Service: singleService,
- }, nil
+ return singleService, nil
}
func (ds *MetadataManager) GetServiceDetail(ctx context.Context, request *pb.GetServiceRequest) (
diff --git a/datasource/mongo/engine.go b/datasource/mongo/engine.go
index 4c48239..997e510 100644
--- a/datasource/mongo/engine.go
+++ b/datasource/mongo/engine.go
@@ -156,12 +156,12 @@ func (ds *SCManager) registryService(pCtx context.Context) error {
}
if respE.Response.GetCode() == pb.ResponseSuccess {
log.Warn(fmt.Sprintf("service center service[%s] already registered", respE.ServiceId))
- respG, err := datasource.GetMetadataManager().GetService(ctx, core.GetServiceRequest(respE.ServiceId))
- if respG.Response.GetCode() != pb.ResponseSuccess {
+ service, err := datasource.GetMetadataManager().GetService(ctx, core.GetServiceRequest(respE.ServiceId))
+ if err != nil {
log.Error(fmt.Sprintf("query service center service[%s] info failed", respE.ServiceId), err)
return mutil.ErrLostServiceFile
}
- core.Service = respG.Service
+ core.Service = service
return nil
}
diff --git a/datasource/mongo/ms.go b/datasource/mongo/ms.go
index 9d6fe85..7420779 100644
--- a/datasource/mongo/ms.go
+++ b/datasource/mongo/ms.go
@@ -209,7 +209,7 @@ func (ds *MetadataManager) GetApplications(ctx context.Context, request *discove
}, nil
}
-func (ds *MetadataManager) GetService(ctx context.Context, request *discovery.GetServiceRequest) (*discovery.GetServiceResponse, error) {
+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
@@ -217,20 +217,13 @@ func (ds *MetadataManager) GetService(ctx context.Context, request *discovery.Ge
if err != nil {
if errors.Is(err, datasource.ErrNoData) {
log.Debug(fmt.Sprintf("service %s not exist in db", request.ServiceId))
- return &discovery.GetServiceResponse{
- Response: discovery.CreateResponse(discovery.ErrServiceNotExists, "Service not exist."),
- }, nil
+ 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 &discovery.GetServiceResponse{
- Response: discovery.CreateResponse(discovery.ErrInternal, "get service data from mongodb failed."),
- }, err
+ return nil, discovery.NewError(discovery.ErrInternal, "get service data from mongodb failed.")
}
}
- return &discovery.GetServiceResponse{
- Response: discovery.CreateResponse(discovery.ResponseSuccess, "Get service successfully."),
- Service: svc.Service,
- }, nil
+ return svc.Service, nil
}
func (ds *MetadataManager) ExistServiceByID(ctx context.Context, request *discovery.GetExistenceByIDRequest) (*discovery.GetExistenceByIDResponse, error) {
diff --git a/datasource/ms.go b/datasource/ms.go
index 6208d39..309ce88 100644
--- a/datasource/ms.go
+++ b/datasource/ms.go
@@ -42,7 +42,7 @@ type MetadataManager interface {
// Microservice management
RegisterService(ctx context.Context, request *pb.CreateServiceRequest) (*pb.CreateServiceResponse, error)
GetServices(ctx context.Context, request *pb.GetServicesRequest) (*pb.GetServicesResponse, error)
- GetService(ctx context.Context, request *pb.GetServiceRequest) (*pb.GetServiceResponse, error)
+ GetService(ctx context.Context, request *pb.GetServiceRequest) (*pb.MicroService, error)
GetServiceDetail(ctx context.Context, request *pb.GetServiceRequest) (*pb.GetServiceDetailResponse, error)
GetServicesInfo(ctx context.Context, request *pb.GetServicesInfoRequest) (*pb.GetServicesInfoResponse, error)
diff --git a/datasource/schema_test.go b/datasource/schema_test.go
index c004ef3..795be06 100644
--- a/datasource/schema_test.go
+++ b/datasource/schema_test.go
@@ -198,12 +198,11 @@ func TestSchema_Create(t *testing.T) {
assert.Equal(t, pb.ResponseSuccess, respCreateSchema.Response.GetCode())
log.Info("query service by serviceID to obtain schema info")
- respGetService, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
+ service, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceIdDev1,
})
assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, respGetService.Response.GetCode())
- assert.Equal(t, []string{"second_schemaId_service_ms"}, respGetService.Service.Schemas)
+ assert.Equal(t, []string{"second_schemaId_service_ms"}, service.Schemas)
log.Info("add new schemaId not exist in service's schemaId list")
schemas = []*pb.Schema{
@@ -220,12 +219,11 @@ func TestSchema_Create(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respCreateSchema.Response.GetCode())
- respGetService, err = datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
+ service, err = datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceIdDev2,
})
assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, respGetService.Response.GetCode())
- assert.Equal(t, []string{"second_schemaId_service_ms"}, respGetService.Service.Schemas)
+ assert.Equal(t, []string{"second_schemaId_service_ms"}, service.Schemas)
})
t.Run("when modify schemas and summary is empty", func(t *testing.T) {
@@ -411,12 +409,11 @@ func TestSchema_Create(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
- respService, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
+ service, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceIdPro1,
})
assert.NoError(t, err)
- assert.Equal(t, pb.ResponseSuccess, respService.Response.GetCode())
- assert.Equal(t, []string{"first_schemaId_ms"}, respService.Service.Schemas)
+ assert.Equal(t, []string{"first_schemaId_ms"}, service.Schemas)
schemas = []*pb.Schema{
{
@@ -479,11 +476,11 @@ func TestSchema_Create(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, respModifySchemas.Response.GetCode())
- respService, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
+ service, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceIdPro1,
})
assert.NoError(t, err)
- assert.Equal(t, []string{"first_schemaId_ms"}, respService.Service.Schemas)
+ assert.Equal(t, []string{"first_schemaId_ms"}, service.Schemas)
log.Info("schema edit not allowed, modify schema should fail")
localMicroServiceDs := genLocalDatasource(false).MetadataManager()
diff --git a/datasource/service_test.go b/datasource/service_test.go
index 0c84147..93df825 100644
--- a/datasource/service_test.go
+++ b/datasource/service_test.go
@@ -19,6 +19,7 @@ package datasource_test
import (
"context"
+ "github.com/go-chassis/cari/pkg/errsvc"
"strconv"
"strings"
"testing"
@@ -277,20 +278,19 @@ func TestService_Get(t *testing.T) {
assert.Equal(t, resp.Response.GetCode(), pb.ResponseSuccess)
// search service by serviceID
- queryResp, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
+ _, err = datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
ServiceId: "ms-service-query-id",
})
assert.NoError(t, err)
- assert.Equal(t, queryResp.Response.GetCode(), pb.ResponseSuccess)
})
t.Run("query a service by a not existed serviceId, should not pass", func(t *testing.T) {
// not exist service
- resp, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
+ _, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
ServiceId: "no-exist-service",
})
- assert.NoError(t, err)
- assert.Equal(t, resp.Response.GetCode(), pb.ErrServiceNotExists)
+ assert.NotNil(t, err)
+ assert.Equal(t, pb.ErrServiceNotExists, err.(*errsvc.Error).Code)
})
}
@@ -496,13 +496,13 @@ func TestService_Update(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, pb.ResponseSuccess, resp.Response.GetCode())
- respGetService, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
+ service, err := datasource.GetMetadataManager().GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceId,
})
assert.NoError(t, err)
- assert.Equal(t, serviceId, respGetService.Service.ServiceId)
- assert.Equal(t, "", respGetService.Service.Properties["test"])
- assert.Equal(t, "v", respGetService.Service.Properties["k"])
+ assert.Equal(t, serviceId, service.ServiceId)
+ assert.Equal(t, "", service.Properties["test"])
+ assert.Equal(t, "v", service.Properties["k"])
})
t.Run("update service that does not exist", func(t *testing.T) {
diff --git a/pkg/proto/service.go b/pkg/proto/service.go
index 3fa0b62..a38e005 100644
--- a/pkg/proto/service.go
+++ b/pkg/proto/service.go
@@ -24,10 +24,12 @@ import (
"google.golang.org/grpc"
)
+// ServiceCtrlServer deprecated, Use disco pkg instead
type ServiceCtrlServer interface {
Exist(context.Context, *discovery.GetExistenceRequest) (*discovery.GetExistenceResponse, error)
Create(context.Context, *discovery.CreateServiceRequest) (*discovery.CreateServiceResponse, error)
Delete(context.Context, *discovery.DeleteServiceRequest) (*discovery.DeleteServiceResponse, error)
+ // deprecated
GetOne(context.Context, *discovery.GetServiceRequest) (*discovery.GetServiceResponse, error)
GetServices(context.Context, *discovery.GetServicesRequest) (*discovery.GetServicesResponse, error)
UpdateProperties(context.Context, *discovery.UpdateServicePropsRequest) (*discovery.UpdateServicePropsResponse, error)
diff --git a/server/plugin/auth/buildin/service_parser.go b/server/plugin/auth/buildin/service_parser.go
index 6d37fe8..b9c68c3 100644
--- a/server/plugin/auth/buildin/service_parser.go
+++ b/server/plugin/auth/buildin/service_parser.go
@@ -103,16 +103,10 @@ func fromQueryKey(r *http.Request, queryKey string) (*auth.ResourceScope, error)
}, nil
}
func serviceIDToLabels(ctx context.Context, serviceID string) ([]map[string]string, error) {
- response, err := datasource.GetMetadataManager().GetService(ctx, &discovery.GetServiceRequest{ServiceId: serviceID})
+ service, err := datasource.GetMetadataManager().GetService(ctx, &discovery.GetServiceRequest{ServiceId: serviceID})
if err != nil {
return nil, err
}
-
- service := response.Service
- if service == nil {
- return nil, fmt.Errorf("resource %s not found", serviceID)
- }
-
return []map[string]string{{
LabelEnvironment: service.Environment,
LabelAppID: service.AppId,
diff --git a/server/rest/controller/v4/microservice_controller.go b/server/rest/controller/v4/microservice_controller.go
index 0d58956..467d481 100644
--- a/server/rest/controller/v4/microservice_controller.go
+++ b/server/rest/controller/v4/microservice_controller.go
@@ -26,6 +26,7 @@ import (
"github.com/apache/servicecomb-service-center/pkg/rest"
"github.com/apache/servicecomb-service-center/pkg/util"
"github.com/apache/servicecomb-service-center/server/core"
+ discosvc "github.com/apache/servicecomb-service-center/server/service/disco"
pb "github.com/go-chassis/cari/discovery"
)
@@ -156,13 +157,13 @@ func (s *MicroServiceService) GetServiceOne(w http.ResponseWriter, r *http.Reque
request := &pb.GetServiceRequest{
ServiceId: r.URL.Query().Get(":serviceId"),
}
- resp, err := core.ServiceAPI.GetOne(r.Context(), request)
+ service, err := discosvc.GetService(r.Context(), request)
if err != nil {
log.Errorf(err, "get service[%s] failed", request.ServiceId)
- rest.WriteError(w, pb.ErrInternal, "get service failed")
+ rest.WriteServiceError(w, err)
return
}
- rest.WriteResponse(w, r, resp.Response, resp)
+ rest.WriteResponse(w, r, nil, &pb.GetServiceResponse{Service: service})
}
func (s *MicroServiceService) UnregisterServices(w http.ResponseWriter, r *http.Request) {
diff --git a/server/service/disco/metadata_dao.go b/server/service/disco/metadata_dao.go
index 1060348..3f046ef 100644
--- a/server/service/disco/metadata_dao.go
+++ b/server/service/disco/metadata_dao.go
@@ -4,6 +4,8 @@ import (
"context"
"github.com/apache/servicecomb-service-center/datasource"
+ "github.com/apache/servicecomb-service-center/pkg/log"
+ "github.com/apache/servicecomb-service-center/server/service/validator"
pb "github.com/go-chassis/cari/discovery"
)
@@ -14,3 +16,12 @@ func RegisterService(ctx context.Context, request *pb.CreateServiceRequest) (*pb
func UnregisterService(ctx context.Context, request *pb.DeleteServiceRequest) (*pb.DeleteServiceResponse, error) {
return datasource.GetMetadataManager().UnregisterService(ctx, request)
}
+
+func GetService(ctx context.Context, in *pb.GetServiceRequest) (*pb.MicroService, error) {
+ err := validator.Validate(in)
+ if err != nil {
+ log.Errorf(err, "get micro-service[%s] failed", in.ServiceId)
+ return nil, pb.NewError(pb.ErrInvalidParams, err.Error())
+ }
+ return datasource.GetMetadataManager().GetService(ctx, in)
+}
diff --git a/server/service/disco/microservice.go b/server/service/disco/microservice.go
index 493518c..0145453 100644
--- a/server/service/disco/microservice.go
+++ b/server/service/disco/microservice.go
@@ -198,15 +198,14 @@ func (s *MicroServiceService) getDeleteServiceFunc(ctx context.Context, serviceI
}
func (s *MicroServiceService) GetOne(ctx context.Context, in *pb.GetServiceRequest) (*pb.GetServiceResponse, error) {
- err := validator.Validate(in)
+ service, err := GetService(ctx, in)
if err != nil {
log.Errorf(err, "get micro-service[%s] failed", in.ServiceId)
return &pb.GetServiceResponse{
Response: pb.CreateResponse(pb.ErrInvalidParams, err.Error()),
- }, nil
+ }, err
}
-
- return datasource.GetMetadataManager().GetService(ctx, in)
+ return &pb.GetServiceResponse{Response: pb.CreateResponse(pb.ResponseSuccess, ""), Service: service}, nil
}
func (s *MicroServiceService) GetServices(ctx context.Context, in *pb.GetServicesRequest) (*pb.GetServicesResponse, error) {
diff --git a/server/service/disco/microservice_test.go b/server/service/disco/microservice_test.go
index 5677224..85142c3 100644
--- a/server/service/disco/microservice_test.go
+++ b/server/service/disco/microservice_test.go
@@ -20,13 +20,14 @@ import (
"strconv"
"strings"
- "github.com/apache/servicecomb-service-center/server/service/disco"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
"github.com/apache/servicecomb-service-center/server/core"
"github.com/apache/servicecomb-service-center/server/plugin/quota"
+ "github.com/apache/servicecomb-service-center/server/service/disco"
pb "github.com/go-chassis/cari/discovery"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
+ "github.com/go-chassis/cari/pkg/errsvc"
)
var (
@@ -1019,23 +1020,23 @@ var _ = Describe("'Micro-service' service", func() {
Context("when query a not exist service by serviceId", func() {
It("should be failed", func() {
- resp, err := serviceResource.GetOne(getContext(), &pb.GetServiceRequest{
+ service, err := disco.GetService(getContext(), &pb.GetServiceRequest{
ServiceId: "",
})
- Expect(err).To(BeNil())
- Expect(resp.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
+ Expect(service).To(BeNil())
+ Expect(err.(*errsvc.Error).Code).To(Equal(pb.ErrInvalidParams))
- resp, err = serviceResource.GetOne(getContext(), &pb.GetServiceRequest{
+ service, err = disco.GetService(getContext(), &pb.GetServiceRequest{
ServiceId: "notexistservice",
})
- Expect(err).To(BeNil())
- Expect(resp.Response.GetCode()).To(Equal(pb.ErrServiceNotExists))
+ Expect(service).To(BeNil())
+ Expect(err.(*errsvc.Error).Code).To(Equal(pb.ErrServiceNotExists))
- resp, err = serviceResource.GetOne(getContext(), &pb.GetServiceRequest{
+ service, err = disco.GetService(getContext(), &pb.GetServiceRequest{
ServiceId: TOO_LONG_SERVICEID,
})
- Expect(err).To(BeNil())
- Expect(resp.Response.GetCode()).To(Equal(pb.ErrInvalidParams))
+ Expect(service).To(BeNil())
+ Expect(err.(*errsvc.Error).Code).To(Equal(pb.ErrInvalidParams))
})
})
})
@@ -1079,13 +1080,13 @@ var _ = Describe("'Micro-service' service", func() {
resp, err = serviceResource.UpdateProperties(getContext(), r2)
Expect(err).To(BeNil())
- resp2, err := serviceResource.GetOne(getContext(), &pb.GetServiceRequest{
+ service, err := disco.GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceId,
})
Expect(err).To(BeNil())
- Expect(resp2.Service.ServiceId).To(Equal(serviceId))
- Expect(resp2.Service.Properties["test"]).To(Equal(""))
- Expect(resp2.Service.Properties["k"]).To(Equal("v"))
+ Expect(service.ServiceId).To(Equal(serviceId))
+ Expect(service.Properties["test"]).To(Equal(""))
+ Expect(service.Properties["k"]).To(Equal("v"))
})
})
diff --git a/server/service/disco/schema_test.go b/server/service/disco/schema_test.go
index c7823d7..f9d87b3 100644
--- a/server/service/disco/schema_test.go
+++ b/server/service/disco/schema_test.go
@@ -20,13 +20,13 @@ import (
"strconv"
"strings"
- "github.com/apache/servicecomb-service-center/datasource"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+ "github.com/apache/servicecomb-service-center/datasource"
"github.com/apache/servicecomb-service-center/server/plugin/quota"
+ "github.com/apache/servicecomb-service-center/server/service/disco"
pb "github.com/go-chassis/cari/discovery"
-
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
)
const (
@@ -384,12 +384,11 @@ var _ = Describe("'Schema' service", func() {
Expect(err).To(BeNil())
Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- respGetOne, err := serviceResource.GetOne(getContext(), &pb.GetServiceRequest{
+ service, err := disco.GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceIdDev1,
})
Expect(err).To(BeNil())
- Expect(respGetOne.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(respGetOne.Service.Schemas).To(Equal([]string{"second_schemaId"}))
+ Expect(service.Schemas).To(Equal([]string{"second_schemaId"}))
By("create empty")
schemas = []*pb.Schema{}
@@ -415,12 +414,11 @@ var _ = Describe("'Schema' service", func() {
Expect(err).To(BeNil())
Expect(respCreateService.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- respGetOne, err = serviceResource.GetOne(getContext(), &pb.GetServiceRequest{
+ service, err = disco.GetService(getContext(), &pb.GetServiceRequest{
ServiceId: serviceIdDev2,
})
Expect(err).To(BeNil())
- Expect(respGetOne.Response.GetCode()).To(Equal(pb.ResponseSuccess))
- Expect(respGetOne.Service.Schemas).To(Equal([]string{"second_schemaId"}))
+ Expect(service.Schemas).To(Equal([]string{"second_schemaId"}))
})
})