You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2018/01/15 08:41:59 UTC
[incubator-servicecomb-service-center] branch master updated:
SCB-235 Optimize quota check log (#248)
This is an automated email from the ASF dual-hosted git repository.
littlecui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-service-center.git
The following commit(s) were added to refs/heads/master by this push:
new 57c1da3 SCB-235 Optimize quota check log (#248)
57c1da3 is described below
commit 57c1da3d798761ba939c4521891973b2dea2026a
Author: aseTo2016 <14...@qq.com>
AuthorDate: Mon Jan 15 16:41:57 2018 +0800
SCB-235 Optimize quota check log (#248)
* optimize quota check log
(cherry picked from commit ba500ee3ebf0b33a599cc200549ee530d6302597)
* optimize quota check log
* optimize quota check log
* optimize quota check log
* optimize quota check log
optimize log of find api
* optimize quota check log
optimize log of find api
* optimize quota check log
optimize log of find api
* optimize quota check log
optimize log of find api
---
etc/conf/app.conf | 2 +-
server/core/proto/services.go | 8 ++
server/error/error.go | 7 ++
server/infra/quota/quota.go | 31 ++++++-
server/plugin/infra/quota/buildin/buildin.go | 113 ++++++++++++++---------
server/plugin/infra/quota/unlimit/unlimit.go | 4 +-
server/service/instances.go | 43 +++++----
server/service/microservices.go | 130 +++++++++++++--------------
server/service/rule.go | 29 +++---
server/service/schema.go | 51 +++++------
server/service/tag.go | 24 ++---
11 files changed, 250 insertions(+), 192 deletions(-)
diff --git a/etc/conf/app.conf b/etc/conf/app.conf
index 1799c30..9d54f2d 100644
--- a/etc/conf/app.conf
+++ b/etc/conf/app.conf
@@ -43,7 +43,7 @@ compact_interval = 12h
cipher_plugin = ""
-#suppot buildin, fusionstage, unlimit
+#suppot buildin, unlimit
quota_plugin = ""
# access control plugin
diff --git a/server/core/proto/services.go b/server/core/proto/services.go
index cf6ea39..27f2e2e 100644
--- a/server/core/proto/services.go
+++ b/server/core/proto/services.go
@@ -23,6 +23,7 @@ import (
"github.com/gorilla/websocket"
"golang.org/x/net/context"
"strings"
+ scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
)
type EventType string
@@ -131,6 +132,13 @@ func CreateResponse(code int32, message string) *Response {
return resp
}
+func CreateResponseWithSCErr(err *scerr.Error) *Response {
+ return &Response{
+ Code: err.Code,
+ Message: err.Detail,
+ }
+}
+
func KvToResponse(kv *mvccpb.KeyValue) (keys []string, data []byte) {
keys = strings.Split(util.BytesToStringWithNoCopy(kv.Key), "/")
data = kv.Value
diff --git a/server/error/error.go b/server/error/error.go
index cdad863..5ee5bf1 100644
--- a/server/error/error.go
+++ b/server/error/error.go
@@ -116,6 +116,13 @@ func (e Error) StatusCode() int {
return http.StatusBadRequest
}
+func (e Error) InternalError() bool {
+ if e.Code >= 500000 {
+ return true
+ }
+ return false
+}
+
func (e Error) HttpWrite(w http.ResponseWriter) {
status := e.StatusCode()
w.Header().Add("X-Response-Status", fmt.Sprint(status))
diff --git a/server/infra/quota/quota.go b/server/infra/quota/quota.go
index ba7ecb4..84dc579 100644
--- a/server/infra/quota/quota.go
+++ b/server/infra/quota/quota.go
@@ -19,10 +19,39 @@ package quota
import (
"fmt"
"golang.org/x/net/context"
+ scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
)
+type ApplyQuotaResult struct {
+ Reporter QuotaReporter
+ Err *scerr.Error
+}
+
+func NewApplyQuotaResult(reporter QuotaReporter, err *scerr.Error) *ApplyQuotaResult {
+ return &ApplyQuotaResult{
+ reporter,
+ err,
+ }
+}
+
+type ApplyQuotaResource struct {
+ QuotaType ResourceType
+ DomainProject string
+ ServiceId string
+ QuotaSize int64
+}
+
+func NewApplyQuotaResource(quotaType ResourceType, domainProject, serviceId string, quotaSize int64) *ApplyQuotaResource {
+ return &ApplyQuotaResource{
+ quotaType,
+ domainProject,
+ serviceId,
+ quotaSize,
+ }
+}
+
type QuotaManager interface {
- Apply4Quotas(ctx context.Context, quotaType ResourceType, domainProject string, serviceId string, quotaSize int16) (QuotaReporter, bool, error)
+ Apply4Quotas(ctx context.Context, res *ApplyQuotaResource) *ApplyQuotaResult
RemandQuotas(ctx context.Context, quotaType ResourceType)
}
diff --git a/server/plugin/infra/quota/buildin/buildin.go b/server/plugin/infra/quota/buildin/buildin.go
index a8b7b11..018a845 100644
--- a/server/plugin/infra/quota/buildin/buildin.go
+++ b/server/plugin/infra/quota/buildin/buildin.go
@@ -27,6 +27,7 @@ import (
serviceUtil "github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
"strings"
+ scerr "github.com/apache/incubator-servicecomb-service-center/server/error"
)
const (
@@ -52,20 +53,18 @@ type BuildInQuota struct {
}
//申请配额sourceType serviceinstance servicetype
-func (q *BuildInQuota) Apply4Quotas(ctx context.Context, quotaType quota.ResourceType, domainProject string, serviceId string, quotaSize int16) (quota.QuotaReporter, bool, error) {
+func (q *BuildInQuota) Apply4Quotas(ctx context.Context, res *quota.ApplyQuotaResource) *quota.ApplyQuotaResult {
data := &QuotaApplyData{
- domain: strings.Split(domainProject, "/")[0],
- quotaSize: int64(quotaSize),
+ domain: strings.Split(res.DomainProject, "/")[0],
+ quotaSize: res.QuotaSize,
}
- switch quotaType {
+ switch res.QuotaType {
case quota.MicroServiceInstanceQuotaType:
- isOk, err := instanceQuotaCheck(ctx, data)
- return nil, isOk, err
+ return instanceQuotaCheck(ctx, data)
case quota.MicroServiceQuotaType:
- isOk, err := serviceQuotaCheck(ctx, data)
- return nil, isOk, err
+ return serviceQuotaCheck(ctx, data)
default:
- return ResourceLimitHandler(ctx, quotaType, domainProject, serviceId, quotaSize)
+ return ResourceLimitHandler(ctx, res)
}
}
@@ -73,12 +72,14 @@ func (q *BuildInQuota) Apply4Quotas(ctx context.Context, quotaType quota.Resourc
func (q *BuildInQuota) RemandQuotas(ctx context.Context, quotaType quota.ResourceType) {
}
-func ResourceLimitHandler(ctx context.Context, quotaType quota.ResourceType, domainProject string, serviceId string, quotaSize int16) (quota.QuotaReporter, bool, error) {
+func ResourceLimitHandler(ctx context.Context, res *quota.ApplyQuotaResource) *quota.ApplyQuotaResult {
var key string
var max int64 = 0
var indexer *store.Indexer
- switch quotaType {
+ domainProject := res.DomainProject
+ serviceId := res.ServiceId
+ switch res.QuotaType {
case quota.RuleQuotaType:
key = core.GenerateServiceRuleKey(domainProject, serviceId, "")
max = RULE_NUM_MAX_LIMIT_PER_SERVICE
@@ -88,19 +89,23 @@ func ResourceLimitHandler(ctx context.Context, quotaType quota.ResourceType, dom
max = SCHEMA_NUM_MAX_LIMIT_PER_SERVICE
indexer = store.Store().Schema()
case quota.TagQuotaType:
- num := quotaSize
+ applyNum := res.QuotaSize
max = TAG_NUM_MAX_LIMIT_PER_SERVICE
tags, err := serviceUtil.GetTagsUtils(ctx, domainProject, serviceId)
if err != nil {
- return nil, false, err
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrInternal, err.Error()))
}
- if int64(len(tags))+int64(num) > max {
- util.Logger().Errorf(nil, "no quota(%d) to apply resource '%s', %s", max, quotaType, serviceId)
- return nil, false, nil
+ curNum := int64(len(tags))
+ if curNum+applyNum > max {
+ mes := fmt.Sprintf("no quota to apply %s , max quota is %d, current used quota is %d, apply quota num is %d",
+ res.QuotaType, max, curNum, applyNum)
+ util.Logger().Errorf(nil, "%s, serviceId is %s", mes, serviceId)
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrNotEnoughQuota, mes))
}
- return nil, true, nil
+ return quota.NewApplyQuotaResult(nil, nil)
default:
- return nil, false, fmt.Errorf("Unsurported resource '%s'", quotaType)
+ mes := fmt.Sprintf("not define quota type %s", res.QuotaType)
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrInternal, mes))
}
resp, err := indexer.Search(ctx,
@@ -108,15 +113,17 @@ func ResourceLimitHandler(ctx context.Context, quotaType quota.ResourceType, dom
registry.WithPrefix(),
registry.WithCountOnly())
if err != nil {
- return nil, false, err
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrInternal, err.Error()))
}
- num := resp.Count + int64(quotaSize)
+ num := resp.Count + int64(res.QuotaSize)
util.Logger().Debugf("resource num is %d", num)
if num > max {
- util.Logger().Errorf(nil, "no quota(%d) to apply resource '%s', %s", max, quotaType, serviceId)
- return nil, false, nil
+ mes := fmt.Sprintf("no quota to apply %s, max quota is %d, current used quota is %d, apply quota num is %d",
+ res.QuotaType, max, resp.Count, res.QuotaSize)
+ util.Logger().Errorf(nil, "%s, serviceId %s", mes, serviceId)
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrNotEnoughQuota, mes))
}
- return nil, true, nil
+ return quota.NewApplyQuotaResult(nil, nil)
}
type QuotaApplyData struct {
@@ -129,29 +136,46 @@ type QuotaApplyData struct {
type GetCurUsedNum func(context.Context, *QuotaApplyData) (int64, error)
type GetLimitQuota func() int64
-func quotaCheck(ctx context.Context, data *QuotaApplyData, getLimitQuota GetLimitQuota, getCurUsedNum GetCurUsedNum) (bool, error) {
+type QuotaCheckResult struct {
+ IsOk bool
+ CurNum int64
+ Err error
+}
+
+func NewQuotaCheckResult(isOk bool, curNum int64, err error) QuotaCheckResult {
+ return QuotaCheckResult{
+ isOk,
+ curNum,
+ err,
+ }
+}
+
+func quotaCheck(ctx context.Context, data *QuotaApplyData, getLimitQuota GetLimitQuota, getCurUsedNum GetCurUsedNum) QuotaCheckResult {
limitQuota := getLimitQuota()
curNum, err := getCurUsedNum(ctx, data)
if err != nil {
- return false, err
+ return NewQuotaCheckResult(false, 0, err)
}
if curNum+data.quotaSize > limitQuota {
- return false, nil
+ return NewQuotaCheckResult(false, curNum, nil)
}
- return true, nil
+ return NewQuotaCheckResult(true, curNum, nil)
}
-func instanceQuotaCheck(ctx context.Context, data *QuotaApplyData) (isOk bool, err error) {
- isOk, err = quotaCheck(ctx, data, getInstanceMaxLimit, getAllInstancesNum)
- if err != nil {
- util.Logger().Errorf(err, "instance quota check failed")
- return
+func instanceQuotaCheck(ctx context.Context, data *QuotaApplyData) *quota.ApplyQuotaResult {
+ rst := quotaCheck(ctx, data, getInstanceMaxLimit, getAllInstancesNum)
+ err := rst.Err
+ if rst.Err != nil {
+ util.Logger().Errorf(rst.Err, "instance quota check failed")
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrInternal, err.Error()))
}
- if !isOk {
- util.Logger().Errorf(err, "no quota to create instance")
- return
+ if !rst.IsOk {
+ mes := fmt.Sprintf("no quota to create instance, max num is %d, curNum is %d, apply num is %d",
+ getInstanceMaxLimit(), rst.CurNum, data.quotaSize)
+ util.Logger().Errorf(nil, mes)
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrNotEnoughQuota, mes))
}
- return
+ return quota.NewApplyQuotaResult(nil, nil)
}
func getInstanceMaxLimit() int64 {
@@ -174,17 +198,20 @@ func getAllInstancesNum(ctx context.Context, data *QuotaApplyData) (int64, error
return getInstancesNum(ctx, key)
}
-func serviceQuotaCheck(ctx context.Context, data *QuotaApplyData) (isOk bool, err error) {
- isOk, err = quotaCheck(ctx, data, getServiceMaxLimit, getAllServicesNum)
+func serviceQuotaCheck(ctx context.Context, data *QuotaApplyData) *quota.ApplyQuotaResult {
+ rst := quotaCheck(ctx, data, getServiceMaxLimit, getAllServicesNum)
+ err := rst.Err
if err != nil {
util.Logger().Errorf(err, "service quota check failed")
- return
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrInternal, err.Error()))
}
- if !isOk {
- util.Logger().Errorf(err, "no quota to create service")
- return
+ if !rst.IsOk {
+ mes := fmt.Sprintf("no quota to create service, max quota is %d, current used quota is %d, apply quota num is %d",
+ getServiceMaxLimit(), rst.CurNum, data.quotaSize)
+ util.Logger().Errorf(err, mes)
+ return quota.NewApplyQuotaResult(nil, scerr.NewError(scerr.ErrNotEnoughQuota, mes))
}
- return
+ return quota.NewApplyQuotaResult(nil,nil)
}
func getServiceMaxLimit() int64 {
diff --git a/server/plugin/infra/quota/unlimit/unlimit.go b/server/plugin/infra/quota/unlimit/unlimit.go
index 422f0ee..319d8cf 100644
--- a/server/plugin/infra/quota/unlimit/unlimit.go
+++ b/server/plugin/infra/quota/unlimit/unlimit.go
@@ -41,8 +41,8 @@ func New() mgr.PluginInstance {
return &Unlimit{}
}
-func (q *Unlimit) Apply4Quotas(ctx context.Context, quotaType quota.ResourceType, domainProject string, serviceId string, quotaSize int16) (quota.QuotaReporter, bool, error) {
- return nil, true, nil
+func (q *Unlimit) Apply4Quotas(ctx context.Context, res *quota.ApplyQuotaResource) *quota.ApplyQuotaResult {
+ return quota.NewApplyQuotaResult(nil, nil)
}
func (q *Unlimit) RemandQuotas(ctx context.Context, quotaType quota.ResourceType) {
diff --git a/server/service/instances.go b/server/service/instances.go
index e2838ec..1f066fb 100644
--- a/server/service/instances.go
+++ b/server/service/instances.go
@@ -33,7 +33,6 @@ import (
"github.com/gorilla/websocket"
"golang.org/x/net/context"
"math"
- "net/http"
"strconv"
"time"
)
@@ -108,23 +107,22 @@ func (s *InstanceService) Register(ctx context.Context, in *pb.RegisterInstanceR
var reporter quota.QuotaReporter
if len(oldInstanceId) == 0 {
if !apt.IsSCInstance(ctx) {
- var err error
- var ok bool
- reporter, ok, err = plugin.Plugins().Quota().Apply4Quotas(ctx, quota.MicroServiceInstanceQuotaType, domainProject, in.Instance.ServiceId, 1)
+ res := quota.NewApplyQuotaResource(quota.MicroServiceInstanceQuotaType, domainProject, in.Instance.ServiceId, 1)
+ rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
+ reporter = rst.Reporter
+ err := rst.Err
if reporter != nil {
defer reporter.Close()
}
if err != nil {
- util.Logger().Errorf(err, "register instance failed, service %s, operator %s: check apply quota failed.", instanceFlag, remoteIP)
- return &pb.RegisterInstanceResponse{
- Response: pb.CreateResponse(scerr.ErrUnavailableQuota, err.Error()),
- }, err
- }
- if !ok {
- util.Logger().Errorf(nil, "register instance failed, service %s, operator %s: no quota apply.", instanceFlag, remoteIP)
- return &pb.RegisterInstanceResponse{
- Response: pb.CreateResponse(scerr.ErrNotEnoughQuota, "No quota to create instance."),
- }, nil
+ util.Logger().Errorf(err, "register instance failed, service %s, operator %s: no quota apply.", instanceFlag, remoteIP)
+ response := &pb.RegisterInstanceResponse{
+ Response: pb.CreateResponseWithSCErr(err),
+ }
+ if err.InternalError() {
+ return response, err
+ }
+ return response, nil
}
}
}
@@ -422,9 +420,9 @@ func (s *InstanceService) GetOneInstance(ctx context.Context, in *pb.GetOneInsta
if checkErr != nil {
util.Logger().Errorf(checkErr, "get instance failed: pre check failed.")
resp := &pb.GetOneInstanceResponse{
- Response: pb.CreateResponse(checkErr.Code, checkErr.Detail),
+ Response: pb.CreateResponseWithSCErr(checkErr),
}
- if checkErr.StatusCode() == http.StatusInternalServerError {
+ if checkErr.InternalError() {
return resp, checkErr
}
return resp, nil
@@ -508,9 +506,9 @@ func (s *InstanceService) GetInstances(ctx context.Context, in *pb.GetInstancesR
if checkErr != nil {
util.Logger().Errorf(checkErr, "get instances failed: pre check failed.")
resp := &pb.GetInstancesResponse{
- Response: pb.CreateResponse(checkErr.Code, checkErr.Detail),
+ Response: pb.CreateResponseWithSCErr(checkErr),
}
- if checkErr.StatusCode() == http.StatusInternalServerError {
+ if checkErr.InternalError() {
return resp, checkErr
}
return resp, nil
@@ -540,7 +538,7 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
}
domainProject := util.ParseDomainProject(ctx)
- findFlag := fmt.Sprintf("consumer %s --> provider %s/%s/%s", in.ConsumerServiceId, in.AppId, in.ServiceName, in.VersionRule)
+ findFlag := fmt.Sprintf("consumer %s find provider %s/%s/%s", in.ConsumerServiceId, in.AppId, in.ServiceName, in.VersionRule)
service, err := serviceUtil.GetService(ctx, domainProject, in.ConsumerServiceId)
if err != nil {
@@ -584,9 +582,10 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
}, err
}
if len(ids) == 0 {
- util.Logger().Errorf(nil, "find instance failed, %s: no provider matched.", findFlag)
+ mes := fmt.Sprintf("no provider matched, %s", findFlag)
+ util.Logger().Errorf(nil, "find instance failed, %s", mes)
return &pb.FindInstancesResponse{
- Response: pb.CreateResponse(scerr.ErrServiceNotExists, "No provider matched."),
+ Response: pb.CreateResponse(scerr.ErrServiceNotExists, mes),
}, nil
}
@@ -608,7 +607,7 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
}
}
- //维护version的规则,servicename 可能是别名,所以重新获取
+ //维护version的规则,service name 可能是别名,所以重新获取
providerService, err := serviceUtil.GetService(ctx, provider.Tenant, ids[0])
if providerService == nil {
util.Logger().Errorf(err, "find instance failed, %s: no provider matched.", findFlag)
diff --git a/server/service/microservices.go b/server/service/microservices.go
index aadbcea..578c408 100644
--- a/server/service/microservices.go
+++ b/server/service/microservices.go
@@ -32,9 +32,9 @@ import (
"github.com/apache/incubator-servicecomb-service-center/server/plugin"
serviceUtil "github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
- "net/http"
"strconv"
"time"
+ "errors"
)
type MicroServiceService struct {
@@ -48,7 +48,7 @@ const (
func (s *MicroServiceService) Create(ctx context.Context, in *pb.CreateServiceRequest) (*pb.CreateServiceResponse, error) {
if in == nil || in.Service == nil {
- util.Logger().Errorf(nil, "create microservice failed : param empty.")
+ util.Logger().Errorf(nil, "create micro-service failed : param empty.")
return &pb.CreateServiceResponse{
Response: pb.CreateResponse(scerr.ErrInvalidParams, "request format invalid"),
}, nil
@@ -77,7 +77,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
err := apt.Validate(service)
if err != nil {
- util.Logger().Errorf(err, "create microservice failed, %s: invalid parameters. operator: %s",
+ util.Logger().Errorf(err, "create micro-service failed, %s: invalid parameters. operator: %s",
serviceFlag, remoteIP)
return &pb.CreateServiceResponse{
Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
@@ -99,12 +99,12 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
defer reporter.Close()
}
if quotaErr != nil {
- util.Logger().Errorf(err, "create microservice failed, %s: check service failed before create. operator: %s",
+ util.Logger().Errorf(quotaErr, "create micro-service failed, %s: check service failed before create. operator: %s",
serviceFlag, remoteIP)
resp := &pb.CreateServiceResponse{
- Response: pb.CreateResponse(quotaErr.Code, quotaErr.Detail),
+ Response: pb.CreateResponseWithSCErr(quotaErr),
}
- if quotaErr.StatusCode() == http.StatusInternalServerError {
+ if quotaErr.InternalError() {
return resp, quotaErr
}
return resp, nil
@@ -121,7 +121,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
data, err := json.Marshal(service)
if err != nil {
- util.Logger().Errorf(err, "create microservice failed, %s: json marshal service failed. operator: %s",
+ util.Logger().Errorf(err, "create micro-service failed, %s: json marshal service failed. operator: %s",
serviceFlag, remoteIP)
return &pb.CreateServiceResponse{
Response: pb.CreateResponse(scerr.ErrInternal, "Body error "+err.Error()),
@@ -147,16 +147,16 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
resp, err := backend.Registry().TxnWithCmp(ctx, opts, uniqueCmpOpts, nil)
if err != nil {
- util.Logger().Errorf(err, "create microservice failed, %s: commit data into etcd failed. operator: %s",
+ util.Logger().Errorf(err, "create micro-service failed, %s: commit data into etcd failed. operator: %s",
serviceFlag, remoteIP)
return &pb.CreateServiceResponse{
- Response: pb.CreateResponse(scerr.ErrUnavailableBackend, "Commit operations failed."),
+ Response: pb.CreateResponse(scerr.ErrUnavailableBackend, "commit operations failed."),
}, err
}
if !resp.Succeeded {
if s.isCreateServiceEx(in) == true {
serviceIdInner, _ := serviceUtil.GetServiceId(ctx, serviceKey)
- util.Logger().Warnf(nil, "create microservice failed, serviceid = %s , flag = %s: service already exists. operator: %s",
+ util.Logger().Warnf(nil, "create micro-service failed, serviceId = %s , flag = %s: service already exists. operator: %s",
serviceIdInner, serviceFlag, remoteIP)
return &pb.CreateServiceResponse{
@@ -165,7 +165,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
}, nil
}
- util.Logger().Warnf(nil, "create microservice failed, %s: service already exists. operator: %s",
+ util.Logger().Warnf(nil, "create micro-service failed, %s: service already exists. operator: %s",
serviceFlag, remoteIP)
return &pb.CreateServiceResponse{
@@ -178,7 +178,7 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
util.Logger().Errorf(err, "report used quota failed.")
}
}
- util.Logger().Infof("create microservice successful, %s, serviceId: %s. operator: %s",
+ util.Logger().Infof("create micro-service successful, %s, serviceId: %s. operator: %s",
serviceFlag, service.ServiceId, remoteIP)
return &pb.CreateServiceResponse{
Response: pb.CreateResponse(pb.Response_SUCCESS, "Register service successfully."),
@@ -191,15 +191,9 @@ func checkQuota(ctx context.Context, domainProject string) (quota.QuotaReporter,
util.Logger().Infof("it is service-center")
return nil, nil
}
- reporter, ok, err := plugin.Plugins().Quota().Apply4Quotas(ctx, quota.MicroServiceQuotaType, domainProject, "", 1)
- if err != nil {
- return reporter, scerr.NewError(scerr.ErrUnavailableQuota,
- fmt.Sprintf("An error occurred in apply for quotas(%s)", err.Error()))
- }
- if !ok {
- return reporter, scerr.NewError(scerr.ErrNotEnoughQuota, "No quota to create service")
- }
- return reporter, nil
+ res := quota.NewApplyQuotaResource(quota.MicroServiceQuotaType, domainProject, "", 1)
+ rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
+ return rst.Reporter, rst.Err
}
func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId string, force bool) (*pb.Response, error) {
@@ -211,19 +205,19 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId st
}
if ServiceId == apt.Service.ServiceId {
- err := fmt.Errorf("Not allow to delete service center")
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s", title, ServiceId)
+ err := errors.New("not allow to delete service center")
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s", title, ServiceId)
return pb.CreateResponse(scerr.ErrInvalidParams, err.Error()), nil
}
service, err := serviceUtil.GetService(ctx, domainProject, ServiceId)
if err != nil {
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s: get service failed.", title, ServiceId)
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s: get service failed.", title, ServiceId)
return pb.CreateResponse(scerr.ErrInternal, err.Error()), err
}
if service == nil {
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s: service not exist.", title, ServiceId)
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s: service not exist.", title, ServiceId)
return pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."), nil
}
@@ -232,11 +226,11 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId st
dr := serviceUtil.NewProviderDependencyRelation(ctx, domainProject, service)
services, err := dr.GetDependencyConsumerIds()
if err != nil {
- util.Logger().Errorf(err, "delete microservice failed, serviceId is %s: inner err, get service dependency failed.", ServiceId)
+ util.Logger().Errorf(err, "delete micro-service failed, serviceId is %s: inner err, get service dependency failed.", ServiceId)
return pb.CreateResponse(scerr.ErrInternal, "Get dependency info failed."), err
}
if len(services) > 1 || (len(services) == 1 && services[0] != ServiceId) {
- util.Logger().Errorf(nil, "delete microservice failed, serviceId is %s: can't delete, other services rely it.", ServiceId)
+ util.Logger().Errorf(nil, "delete micro-service failed, serviceId is %s: can't delete, other services rely it.", ServiceId)
return pb.CreateResponse(scerr.ErrDependedOnConsumer, "Can not delete this service, other service rely it."), err
}
@@ -246,12 +240,12 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId st
registry.WithPrefix(),
registry.WithCountOnly())
if err != nil {
- util.Logger().Errorf(err, "delete microservice failed, serviceId is %s: inner err,get instances failed.", ServiceId)
+ util.Logger().Errorf(err, "delete micro-service failed, serviceId is %s: inner err,get instances failed.", ServiceId)
return pb.CreateResponse(scerr.ErrInternal, "Get instance failed."), err
}
if rsp.Count > 0 {
- util.Logger().Errorf(nil, "delete microservice failed, serviceId is %s: can't delete, exist instance.", ServiceId)
+ util.Logger().Errorf(nil, "delete micro-service failed, serviceId is %s: can't delete, exist instance.", ServiceId)
return pb.CreateResponse(scerr.ErrDeployedInstance, "Can not delete this service, exist instance."), err
}
}
@@ -268,7 +262,7 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId st
//refresh msCache consumerCache, ensure that watch can notify consumers when no cache.
err = serviceUtil.RefreshDependencyCache(ctx, domainProject, service)
if err != nil {
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s: inner err, refresh service dependency cache failed.", title, ServiceId)
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s: inner err, refresh service dependency cache failed.", title, ServiceId)
return pb.CreateResponse(scerr.ErrInternal, "Refresh dependency cache failed."), err
}
@@ -283,13 +277,13 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId st
//删除依赖规则
lock, err := mux.Lock(mux.DEP_QUEUE_LOCK)
if err != nil {
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s: inner err, create lock failed.", title, ServiceId)
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s: inner err, create lock failed.", title, ServiceId)
return pb.CreateResponse(scerr.ErrUnavailableBackend, err.Error()), err
}
optsTmp, err := serviceUtil.DeleteDependencyForService(ctx, consumer, ServiceId)
lock.Unlock()
if err != nil {
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s: inner err, delete dependency failed.", title, ServiceId)
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s: inner err, delete dependency failed.", title, ServiceId)
return pb.CreateResponse(scerr.ErrInternal, err.Error()), err
}
opts = append(opts, optsTmp...)
@@ -301,7 +295,7 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId st
opts = append(opts, registry.OpDel(
registry.WithStrKey(apt.GenerateRuleIndexKey(domainProject, ServiceId, "", ""))))
- //删除shemas
+ //删除schemas
opts = append(opts, registry.OpDel(
registry.WithStrKey(apt.GenerateServiceSchemaKey(domainProject, ServiceId, "")),
registry.WithPrefix()))
@@ -316,32 +310,32 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, ServiceId st
//删除实例
err = serviceUtil.DeleteServiceAllInstances(ctx, ServiceId)
if err != nil {
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s: delete all instances failed.", title, ServiceId)
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s: delete all instances failed.", title, ServiceId)
return pb.CreateResponse(scerr.ErrInternal, "Delete all instances failed for service."), err
}
err = backend.BatchCommit(ctx, opts)
if err != nil {
- util.Logger().Errorf(err, "%s microservice failed, serviceId is %s: commit data into etcd failed.", title, ServiceId)
+ util.Logger().Errorf(err, "%s micro-service failed, serviceId is %s: commit data into etcd failed.", title, ServiceId)
return pb.CreateResponse(scerr.ErrUnavailableBackend, "Commit operations failed."), nil
}
serviceUtil.RemandServiceQuota(ctx)
- util.Logger().Infof("%s microservice successful: serviceid is %s, operator is %s.", title, ServiceId, util.GetIPFromContext(ctx))
+ util.Logger().Infof("%s micro-service successful: serviceId is %s, operator is %s.", title, ServiceId, util.GetIPFromContext(ctx))
return pb.CreateResponse(pb.Response_SUCCESS, "Unregister service successfully."), nil
}
func (s *MicroServiceService) Delete(ctx context.Context, in *pb.DeleteServiceRequest) (*pb.DeleteServiceResponse, error) {
if in == nil || len(in.ServiceId) == 0 {
- util.Logger().Errorf(nil, "delete microservice failed: service empty.")
+ util.Logger().Errorf(nil, "delete micro-service failed: service empty.")
return &pb.DeleteServiceResponse{
Response: pb.CreateResponse(scerr.ErrInvalidParams, "Request format invalid."),
}, nil
}
err := apt.Validate(in)
if err != nil {
- util.Logger().Errorf(err, "delete microservice failed, serviceId is %s: invalid parameters.", in.ServiceId)
+ util.Logger().Errorf(err, "delete micro-service failed, serviceId is %s: invalid parameters.", in.ServiceId)
return &pb.DeleteServiceResponse{
Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
}, nil
@@ -370,7 +364,7 @@ func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.De
for _, serviceId := range request.ServiceIds {
//ServiceId重复性检查
if _, ok := existFlag[serviceId]; ok {
- util.Logger().Warnf(nil, "delete microservice %s , multiple.", serviceId)
+ util.Logger().Warnf(nil, "delete micro-service %s , multiple.", serviceId)
continue
} else {
existFlag[serviceId] = true
@@ -389,7 +383,7 @@ func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.De
}
err := apt.Validate(in)
if err != nil {
- util.Logger().Errorf(err, "delete microservice failed, serviceId is %s: invalid parameters.", in.ServiceId)
+ util.Logger().Errorf(err, "delete micro-service failed, serviceId is %s: invalid parameters.", in.ServiceId)
serviceRst.ErrMessage = err.Error()
serviceRespChan <- serviceRst
continue
@@ -411,7 +405,7 @@ func (s *MicroServiceService) DeleteServices(ctx context.Context, request *pb.De
//获取批量删除服务的结果
count := 0
responseCode := pb.Response_SUCCESS
- delServiceRspInfo := []*pb.DelServicesRspInfo{}
+ delServiceRspInfo := make([]*pb.DelServicesRspInfo, 0, len(serviceRespChan))
for serviceRespItem := range serviceRespChan {
count++
if len(serviceRespItem.ErrMessage) != 0 {
@@ -439,7 +433,7 @@ func (s *MicroServiceService) GetOne(ctx context.Context, in *pb.GetServiceReque
}
err := apt.Validate(in)
if err != nil {
- util.Logger().Errorf(err, "get microservice failed, serviceId is %s: invalid parameters.",
+ util.Logger().Errorf(err, "get micro-service failed, serviceId is %s: invalid parameters.",
in.ServiceId)
return &pb.GetServiceResponse{
Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
@@ -449,19 +443,19 @@ func (s *MicroServiceService) GetOne(ctx context.Context, in *pb.GetServiceReque
service, err := serviceUtil.GetService(ctx, domainProject, in.ServiceId)
if err != nil {
- util.Logger().Errorf(err, "get microservice failed, serviceId is %s: inner err,get service failed.", in.ServiceId)
+ util.Logger().Errorf(err, "get micro-service failed, serviceId is %s: inner err,get service failed.", in.ServiceId)
return &pb.GetServiceResponse{
Response: pb.CreateResponse(scerr.ErrInternal, "Get service file failed."),
}, err
}
if service == nil {
- util.Logger().Errorf(nil, "get microservice failed, serviceId is %s: service not exist.", in.ServiceId)
+ util.Logger().Errorf(nil, "get micro-service failed, serviceId is %s: service not exist.", in.ServiceId)
return &pb.GetServiceResponse{
- Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
+ Response: pb.CreateResponse(scerr.ErrServiceNotExists, "service does not exist."),
}, nil
}
return &pb.GetServiceResponse{
- Response: pb.CreateResponse(pb.Response_SUCCESS, "Get service successfully."),
+ Response: pb.CreateResponse(pb.Response_SUCCESS, "get service successfully."),
Service: service,
}, nil
}
@@ -470,7 +464,7 @@ func (s *MicroServiceService) GetServices(ctx context.Context, in *pb.GetService
if in == nil {
util.Logger().Errorf(nil, "get services failed: invalid params.")
return &pb.GetServicesResponse{
- Response: pb.CreateResponse(scerr.ErrInvalidParams, "Request format invalid."),
+ Response: pb.CreateResponse(scerr.ErrInvalidParams, "request format invalid."),
}, nil
}
services, err := serviceUtil.GetAllServiceUtil(ctx)
@@ -482,7 +476,7 @@ func (s *MicroServiceService) GetServices(ctx context.Context, in *pb.GetService
}
return &pb.GetServicesResponse{
- Response: pb.CreateResponse(pb.Response_SUCCESS, "Get services successfully."),
+ Response: pb.CreateResponse(pb.Response_SUCCESS, "get services successfully."),
Services: services,
}, nil
}
@@ -491,7 +485,7 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
if in == nil || len(in.ServiceId) == 0 || in.Properties == nil {
util.Logger().Errorf(nil, "update service properties failed: invalid params.")
return &pb.UpdateServicePropsResponse{
- Response: pb.CreateResponse(scerr.ErrInvalidParams, "Request format invalid."),
+ Response: pb.CreateResponse(scerr.ErrInvalidParams, "request format invalid."),
}, nil
}
err := apt.Validate(in)
@@ -515,7 +509,7 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
if service == nil {
util.Logger().Errorf(nil, "update service properties failed, serviceId is %s: service not exist.", in.ServiceId)
return &pb.UpdateServicePropsResponse{
- Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
+ Response: pb.CreateResponse(scerr.ErrServiceNotExists, "service does not exist."),
}, nil
}
service.Properties = make(map[string]string)
@@ -528,7 +522,7 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
if err != nil {
util.Logger().Errorf(err, "update service properties failed, serviceId is %s: json marshal service failed.", in.ServiceId)
return &pb.UpdateServicePropsResponse{
- Response: pb.CreateResponse(scerr.ErrInternal, "Service file marshal error."),
+ Response: pb.CreateResponse(scerr.ErrInternal, "service file marshal error."),
}, err
}
@@ -546,15 +540,15 @@ func (s *MicroServiceService) UpdateProperties(ctx context.Context, in *pb.Updat
util.Logger().Infof("update service properties successful: serviceId is %s.", in.ServiceId)
return &pb.UpdateServicePropsResponse{
- Response: pb.CreateResponse(pb.Response_SUCCESS, "Update service successfully."),
+ Response: pb.CreateResponse(pb.Response_SUCCESS, "update service successfully."),
}, nil
}
func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequest) (*pb.GetExistenceResponse, error) {
if in == nil {
- util.Logger().Errorf(nil, "exist failed: invalid params.")
+ util.Logger().Errorf(nil, "exist failed: invalid params")
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrInvalidParams, "Request format invalid."),
+ Response: pb.CreateResponse(scerr.ErrInvalidParams, "request format invalid"),
}, nil
}
@@ -562,15 +556,15 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
switch in.Type {
case EXIST_TYPE_MICROSERVICE:
if len(in.AppId) == 0 || len(in.ServiceName) == 0 || len(in.Version) == 0 {
- util.Logger().Errorf(nil, "microservice exist failed: invalid params.")
+ util.Logger().Errorf(nil, "micro-service exist failed: invalid params.")
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrInvalidParams, "Invalid request."),
+ Response: pb.CreateResponse(scerr.ErrInvalidParams, "invalid request."),
}, nil
}
err := apt.GetMSExistsReqValidator.Validate(in)
serviceFlag := util.StringJoin([]string{in.AppId, in.ServiceName, in.Version}, "/")
if err != nil {
- util.Logger().Errorf(err, "microservice exist failed, service %s: invalid params.", serviceFlag)
+ util.Logger().Errorf(err, "micro-service exist failed, service %s: invalid params.", serviceFlag)
return &pb.GetExistenceResponse{
Response: pb.CreateResponse(scerr.ErrInvalidParams, err.Error()),
}, nil
@@ -585,26 +579,26 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
Tenant: domainProject,
})
if err != nil {
- util.Logger().Errorf(err, "microservice exist failed, service %s: find serviceIds failed.", serviceFlag)
+ util.Logger().Errorf(err, "micro-service exist failed, service %s: find serviceIds failed.", serviceFlag)
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrInternal, "Get service file failed."),
+ Response: pb.CreateResponse(scerr.ErrInternal, "get service file failed."),
}, err
}
if len(ids) <= 0 {
- util.Logger().Infof("microservice exist failed, service %s: service not exist.", serviceFlag)
+ util.Logger().Infof("micro-service exist failed, service %s: service not exist.", serviceFlag)
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
+ Response: pb.CreateResponse(scerr.ErrServiceNotExists, "service does not exist."),
}, nil
}
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(pb.Response_SUCCESS, "Get service id successfully."),
+ Response: pb.CreateResponse(pb.Response_SUCCESS, "get service id successfully."),
ServiceId: ids[0], // 约定多个时,取较新版本
}, nil
case EXIST_TYPE_SCHEMA:
if len(in.SchemaId) == 0 || len(in.ServiceId) == 0 {
util.Logger().Errorf(nil, "schema exist failed, serviceId %s, schemaId %s: invalid params.", in.ServiceId, in.SchemaId)
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrInvalidParams, "Invalid request."),
+ Response: pb.CreateResponse(scerr.ErrInvalidParams, "invalid request."),
}, nil
}
@@ -619,7 +613,7 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
if !serviceUtil.ServiceExist(ctx, domainProject, in.ServiceId) {
util.Logger().Warnf(nil, "schema exist failed, serviceId %s, schemaId %s: service not exist.", in.ServiceId, in.SchemaId)
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrServiceNotExists, "Service does not exist."),
+ Response: pb.CreateResponse(scerr.ErrServiceNotExists, "service does not exist."),
}, nil
}
@@ -634,7 +628,7 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
if !exist {
util.Logger().Infof("schema exist failed, serviceId %s, schemaId %s: schema not exist.", in.ServiceId, in.SchemaId)
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrSchemaNotExists, "Schema does not exist."),
+ Response: pb.CreateResponse(scerr.ErrSchemaNotExists, "schema does not exist."),
}, nil
}
schemaSummary, err := getSchemaSummary(ctx, domainProject, in.ServiceId, in.SchemaId)
@@ -652,7 +646,7 @@ func (s *MicroServiceService) Exist(ctx context.Context, in *pb.GetExistenceRequ
default:
util.Logger().Warnf(nil, "unexpected type '%s' for query.", in.Type)
return &pb.GetExistenceResponse{
- Response: pb.CreateResponse(scerr.ErrInvalidParams, "Only microservice and schema can be used as type."),
+ Response: pb.CreateResponse(scerr.ErrInvalidParams, "Only micro-service and schema can be used as type."),
}, nil
}
}
@@ -747,12 +741,12 @@ func (s *MicroServiceService) CreateServiceEx(ctx context.Context, in *pb.Create
util.Logger().Error("marshal errMessages error", err)
return result, nil
}
- result.Response.Message = fmt.Sprintf("ErrMessage : %s", string(errMessage))
+ result.Response.Message = fmt.Sprintf("errMessage : %s", string(errMessage))
} else {
result.Response.Code = pb.Response_SUCCESS
}
- util.Logger().Infof("CreateServiceEx, serviceid = %s, result = %s ", result.ServiceId, result.Response.Message)
+ util.Logger().Infof("createServiceEx, serviceId = %s, result = %s ", result.ServiceId, result.Response.Message)
return result, nil
}
diff --git a/server/service/rule.go b/server/service/rule.go
index dfab65f..287dbc2 100644
--- a/server/service/rule.go
+++ b/server/service/rule.go
@@ -50,21 +50,21 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
Response: pb.CreateResponse(scerr.ErrInvalidParams, "Service does not exist."),
}, nil
}
- _, ok, err := plugin.Plugins().Quota().Apply4Quotas(ctx, quota.RuleQuotaType, domainProject, in.ServiceId, int16(len(in.Rules)))
- if err != nil {
- util.Logger().Errorf(err, "check can apply resource failed.%s", in.ServiceId)
- return &pb.AddServiceRulesResponse{
- Response: pb.CreateResponse(scerr.ErrUnavailableQuota, err.Error()),
- }, err
- }
- if !ok {
- util.Logger().Errorf(err, "no size to add tag, max size is 100 for one servivce.%s", in.ServiceId)
- return &pb.AddServiceRulesResponse{
- Response: pb.CreateResponse(scerr.ErrNotEnoughQuota, "no size to add tag, max size is 100 for one servivce"),
- }, nil
+ res := quota.NewApplyQuotaResource(quota.RuleQuotaType, domainProject, in.ServiceId, int64(len(in.Rules)))
+ rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
+ errQuota := rst.Err
+ if errQuota != nil {
+ util.Logger().Errorf(errQuota, "")
+ response := &pb.AddServiceRulesResponse{
+ Response: pb.CreateResponseWithSCErr(errQuota),
+ }
+ if errQuota.InternalError() {
+ return response, errQuota
+ }
+ return response, nil
}
- opts := []registry.PluginOp{}
+
ruleType, _, err := serviceUtil.GetServiceRuleType(ctx, domainProject, in.ServiceId)
util.Logger().Debugf("ruleType is %s", ruleType)
if err != nil {
@@ -72,7 +72,8 @@ func (s *MicroServiceService) AddRule(ctx context.Context, in *pb.AddServiceRule
Response: pb.CreateResponse(scerr.ErrInternal, err.Error()),
}, err
}
- ruleIds := []string{}
+ ruleIds := make([]string, 0, len(in.Rules))
+ opts := make([]registry.PluginOp, 0, 2*len(in.Rules))
for _, rule := range in.Rules {
err := apt.Validate(rule)
if err != nil {
diff --git a/server/service/schema.go b/server/service/schema.go
index fa279c6..107575f 100644
--- a/server/service/schema.go
+++ b/server/service/schema.go
@@ -29,7 +29,6 @@ import (
"github.com/apache/incubator-servicecomb-service-center/server/plugin"
serviceUtil "github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
- "net/http"
"strings"
)
@@ -264,9 +263,9 @@ func (s *MicroServiceService) ModifySchemas(ctx context.Context, request *pb.Mod
respErr := modifySchemas(ctx, domainProject, service, request.Schemas)
if respErr != nil {
resp := &pb.ModifySchemasResponse{
- Response: pb.CreateResponse(respErr.Code, respErr.Detail),
+ Response: pb.CreateResponseWithSCErr(respErr),
}
- if respErr.StatusCode() == http.StatusInternalServerError {
+ if respErr.InternalError() {
return resp, respErr
}
return resp, nil
@@ -323,14 +322,12 @@ func modifySchemas(ctx context.Context, domainProject string, service *pb.MicroS
pluginOps := make([]registry.PluginOp, 0)
if service.Environment == pb.ENV_PROD {
if len(service.Schemas) == 0 {
- _, ok, err := plugin.Plugins().Quota().Apply4Quotas(ctx, quota.SchemaQuotaType, domainProject, serviceId, int16(len(schemas)))
- if err != nil {
- util.Logger().Errorf(err, "modify schemas info failed, check resource num failed, %s", serviceId)
- return scerr.NewError(scerr.ErrUnavailableQuota, err.Error())
- }
- if !ok {
- util.Logger().Errorf(err, "modify schemas info failed, reach the max size of schema, %s", serviceId)
- return scerr.NewError(scerr.ErrNotEnoughQuota, "reach the max size of schema")
+ res := quota.NewApplyQuotaResource(quota.SchemaQuotaType, domainProject, serviceId, int64(len(schemas)))
+ rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
+ errQuota := rst.Err
+ if errQuota != nil {
+ util.Logger().Errorf(errQuota, "modify schemas info failed, serviceId is %s", serviceId)
+ return errQuota
}
service.Schemas = nonExistSchemaIds
@@ -376,14 +373,12 @@ func modifySchemas(ctx context.Context, domainProject string, service *pb.MicroS
quotaSize := len(needAddSchemas) - len(needDeleteSchemas)
if quotaSize > 0 {
- _, ok, err := plugin.Plugins().Quota().Apply4Quotas(ctx, quota.SchemaQuotaType, domainProject, serviceId, int16(quotaSize))
+ res := quota.NewApplyQuotaResource(quota.SchemaQuotaType, domainProject, serviceId, int64(quotaSize))
+ rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
+ err := rst.Err
if err != nil {
util.Logger().Errorf(err, "modify schemas info failed, check resource num failed, %s", serviceId)
- return scerr.NewError(scerr.ErrUnavailableQuota, err.Error())
- }
- if !ok {
- util.Logger().Errorf(err, "modify schemas info failed, reach the max size of schema, %s", serviceId)
- return scerr.NewError(scerr.ErrNotEnoughQuota, "reach the max size of schema")
+ return err
}
}
@@ -487,9 +482,9 @@ func (s *MicroServiceService) ModifySchema(ctx context.Context, request *pb.Modi
respErr := s.canModifySchema(ctx, domainProject, request)
if respErr != nil {
resp := &pb.ModifySchemaResponse{
- Response: pb.CreateResponse(respErr.Code, respErr.Detail),
+ Response: pb.CreateResponseWithSCErr(respErr),
}
- if respErr.StatusCode() == http.StatusInternalServerError {
+ if respErr.InternalError() {
return resp, respErr
}
return resp, nil
@@ -507,9 +502,9 @@ func (s *MicroServiceService) ModifySchema(ctx context.Context, request *pb.Modi
if err != nil {
util.Logger().Errorf(err, "modify schema failed, serviceId %s, schemaId %s", serviceId, schemaId)
resp := &pb.ModifySchemaResponse{
- Response: pb.CreateResponse(err.Code, err.Detail),
+ Response: pb.CreateResponseWithSCErr(err),
}
- if err.StatusCode() == http.StatusInternalServerError {
+ if err.InternalError() {
return resp, err
}
return resp, nil
@@ -534,14 +529,12 @@ func (s *MicroServiceService) canModifySchema(ctx context.Context, domainProject
return scerr.NewError(scerr.ErrInvalidParams, err.Error())
}
- _, ok, err := plugin.Plugins().Quota().Apply4Quotas(ctx, quota.SchemaQuotaType, domainProject, serviceId, 1)
- if err != nil {
- util.Logger().Errorf(err, "modify schema info failed, check resource num failed, %s, %s", serviceId, schemaId)
- return scerr.NewError(scerr.ErrUnavailableQuota, err.Error())
- }
- if !ok {
- util.Logger().Errorf(err, "modify schema info failed, reach the max size of schema, %s, %s", serviceId, schemaId)
- return scerr.NewError(scerr.ErrNotEnoughQuota, "add schema failed, reach max size of schema")
+ res := quota.NewApplyQuotaResource(quota.SchemaQuotaType, domainProject, serviceId, 1)
+ rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
+ errQuota := rst.Err
+ if errQuota != nil {
+ util.Logger().Errorf(errQuota, "modify schema info failed, check resource num failed, %s, %s", serviceId, schemaId)
+ return errQuota
}
if len(request.Summary) == 0 {
util.Logger().Warnf(nil, "service %s schema %s summary is empty.", request.ServiceId, schemaId)
diff --git a/server/service/tag.go b/server/service/tag.go
index 6685452..08f3527 100644
--- a/server/service/tag.go
+++ b/server/service/tag.go
@@ -56,18 +56,18 @@ func (s *MicroServiceService) AddTags(ctx context.Context, in *pb.AddServiceTags
}
addTags := in.GetTags()
- _, ok, err := plugin.Plugins().Quota().Apply4Quotas(ctx, quota.TagQuotaType, domainProject, in.ServiceId, int16(len(addTags)))
- if err != nil {
- util.Logger().Errorf(err, "add tag info failed, check resource num failed, %s", in.ServiceId)
- return &pb.AddServiceTagsResponse{
- Response: pb.CreateResponse(scerr.ErrUnavailableQuota, "Modify schema info failed, check resource num failed."),
- }, err
- }
- if !ok {
- util.Logger().Errorf(err, "add tag info failed, reach the max size of tag, %s", in.ServiceId)
- return &pb.AddServiceTagsResponse{
- Response: pb.CreateResponse(scerr.ErrNotEnoughQuota, "reach the max size of tag."),
- }, nil
+ res := quota.NewApplyQuotaResource(quota.TagQuotaType, domainProject, in.ServiceId, int64(len(addTags)))
+ rst := plugin.Plugins().Quota().Apply4Quotas(ctx, res)
+ errQuota := rst.Err
+ if errQuota != nil {
+ util.Logger().Errorf(errQuota, "add tag info failed, check resource num failed, %s", in.ServiceId)
+ response := &pb.AddServiceTagsResponse{
+ Response: pb.CreateResponseWithSCErr(errQuota),
+ }
+ if errQuota.InternalError() {
+ return response, errQuota
+ }
+ return response, nil
}
dataTags, err := serviceUtil.GetTagsUtils(ctx, domainProject, in.ServiceId)
--
To stop receiving notification emails like this one, please contact
['"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>'].