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/02/28 06:18:58 UTC

[incubator-servicecomb-service-center] branch master updated: SCB-339 The wrong statistics in micro-service (#280)

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 b828669  SCB-339 The wrong statistics in micro-service (#280)
b828669 is described below

commit b8286694238e3e49e0d0c740d6fcd75d07cb3f23
Author: aseTo2016 <14...@qq.com>
AuthorDate: Wed Feb 28 14:18:56 2018 +0800

    SCB-339 The wrong statistics in micro-service (#280)
    
    * SCB-339 The wrong statistics in micro-service
    2.get appId bug fix
    
    * SCB-339 The wrong statistics in micro-service
    2.get appId bug fix
    3.create micro-service, add service key compare
---
 server/core/key_generator.go              |  8 ++++++++
 server/govern/service.go                  |  8 +-------
 server/plugin/infra/registry/etcd/etcd.go | 17 ++++++++++-------
 server/service/microservices.go           | 10 ++++------
 4 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/server/core/key_generator.go b/server/core/key_generator.go
index cdd0e80..cb01236 100644
--- a/server/core/key_generator.go
+++ b/server/core/key_generator.go
@@ -78,6 +78,14 @@ func GetServiceAliasRootKey(domainProject string) string {
 	}, "/")
 }
 
+func GetServiceAppKey(domainProject, env, appId string) string {
+	return util.StringJoin([]string{
+		GetServiceIndexRootKey(domainProject),
+		env,
+		appId,
+	}, "/")
+}
+
 func GetServiceRuleRootKey(domainProject string) string {
 	return util.StringJoin([]string{
 		GetRootKey(),
diff --git a/server/govern/service.go b/server/govern/service.go
index 4a0abe8..b2d74eb 100644
--- a/server/govern/service.go
+++ b/server/govern/service.go
@@ -180,13 +180,7 @@ func (governService *GovernService) GetApplications(ctx context.Context, in *pb.
 	}
 
 	domainProject := util.ParseDomainProject(ctx)
-	key := util.StringJoin([]string{
-		apt.GetServiceIndexRootKey(domainProject),
-		in.Environment,
-	}, "/")
-	if key[len(key)-1:] != "/" {
-		key += "/"
-	}
+	key := apt.GetServiceAppKey(domainProject, in.Environment, "")
 
 	opts := append(serviceUtil.FromContext(ctx),
 		registry.WithStrKey(key),
diff --git a/server/plugin/infra/registry/etcd/etcd.go b/server/plugin/infra/registry/etcd/etcd.go
index 941aa7c..6cd984a 100644
--- a/server/plugin/infra/registry/etcd/etcd.go
+++ b/server/plugin/infra/registry/etcd/etcd.go
@@ -250,12 +250,12 @@ func (c *EtcdClient) paging(ctx context.Context, op registry.PluginOp) (*clientv
 	start := time.Now()
 	tempOp := op
 	tempOp.CountOnly = true
-	coutResp, err := c.Client.Get(ctx, key, c.toGetRequest(tempOp)...)
+	countResp, err := c.Client.Get(ctx, key, c.toGetRequest(tempOp)...)
 	if err != nil {
 		return nil, err
 	}
 
-	recordCount := coutResp.Count
+	recordCount := countResp.Count
 	if op.Offset == -1 && recordCount < op.Limit {
 		return nil, nil // no paging
 	}
@@ -268,9 +268,9 @@ func (c *EtcdClient) paging(ctx context.Context, op registry.PluginOp) (*clientv
 	if len(op.EndKey) > 0 {
 		tempOp.EndKey = op.EndKey
 	}
-	tempOp.Revision = coutResp.Header.Revision
+	tempOp.Revision = countResp.Header.Revision
 
-	etcdResp = coutResp
+	etcdResp = countResp
 	etcdResp.Kvs = make([]*mvccpb.KeyValue, 0, etcdResp.Count)
 
 	pageCount := recordCount / op.Limit
@@ -344,6 +344,9 @@ func (c *EtcdClient) Do(ctx context.Context, opts ...registry.PluginOpOption) (*
 	switch op.Action {
 	case registry.Get:
 		var etcdResp *clientv3.GetResponse
+		if op.Prefix && op.Key[len(op.Key)-1] != '/' {
+			op.Key = append(op.Key, '/')
+		}
 		key := util.BytesToStringWithNoCopy(op.Key)
 
 		if (op.Prefix || len(op.EndKey) > 0) && !op.CountOnly {
@@ -517,10 +520,10 @@ func (c *EtcdClient) Watch(ctx context.Context, opts ...registry.PluginOpOption)
 		client := clientv3.NewWatcher(c.Client)
 		defer client.Close()
 
-		key := util.BytesToStringWithNoCopy(op.Key)
-		if op.Prefix && key[len(key)-1] != '/' {
-			key += "/"
+		if op.Prefix && op.Key[len(op.Key)-1] != '/' {
+			op.Key = append(op.Key, '/')
 		}
+		key := util.BytesToStringWithNoCopy(op.Key)
 
 		// 不能设置超时context,内部判断了连接超时和watch超时
 		ws := client.Watch(context.Background(), key, c.toGetRequest(op)...)
diff --git a/server/service/microservices.go b/server/service/microservices.go
index 0e3e444..d3265e5 100644
--- a/server/service/microservices.go
+++ b/server/service/microservices.go
@@ -127,16 +127,18 @@ func (s *MicroServiceService) CreateServicePri(ctx context.Context, in *pb.Creat
 		}, err
 	}
 	key := apt.GenerateServiceKey(domainProject, serviceId)
+	keyBytes := util.StringToBytesWithNoCopy(key)
 	index := apt.GenerateServiceIndexKey(serviceKey)
 	indexBytes := util.StringToBytesWithNoCopy(index)
 	aliasBytes := util.StringToBytesWithNoCopy(apt.GenerateServiceAliasKey(serviceKey))
 
 	opts := []registry.PluginOp{
-		registry.OpPut(registry.WithStrKey(key), registry.WithValue(data)),
+		registry.OpPut(registry.WithKey(keyBytes), registry.WithValue(data)),
 		registry.OpPut(registry.WithKey(indexBytes), registry.WithStrValue(serviceId)),
 	}
 	uniqueCmpOpts := []registry.CompareOp{
 		registry.OpCmp(registry.CmpVer(indexBytes), registry.CMP_EQUAL, 0),
+		registry.OpCmp(registry.CmpVer(keyBytes), registry.CMP_EQUAL, 0),
 	}
 
 	if len(serviceKey.Alias) > 0 {
@@ -204,11 +206,7 @@ func (s *MicroServiceService) DeleteServicePri(ctx context.Context, serviceId st
 		title = "force delete"
 	}
 
-	isServiceCenter := func(serviceId string) bool {
-		return serviceId == apt.Service.ServiceId
-	}
-
-	if isServiceCenter(serviceId) {
+	if serviceId == apt.Service.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

-- 
To stop receiving notification emails like this one, please contact
littlecui@apache.org.