This is an automated email from the ASF dual-hosted git repository.

asifdxtreme 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 bd59e8b  SCB-972 Using Sha1 signature key as UUID of micro service 
(#460)
bd59e8b is described below

commit bd59e8bf98179b49c997f10ed4f529b2d1c0afcf
Author: little-cui <[email protected]>
AuthorDate: Tue Oct 23 11:33:04 2018 +0800

    SCB-972 Using Sha1 signature key as UUID of micro service (#460)
    
    * SCB-972 Using Sha1 signature key as UUID of micro service
    
    * Fix the IT failure
---
 etc/conf/app.conf                                  |  3 ++
 integration/governance_test.go                     |  6 ++--
 integration/instances_test.go                      |  8 ++---
 integration/integrationtest_suite_test.go          |  2 ++
 integration/microservices_test.go                  |  6 ++--
 integration/rules_test.go                          |  2 +-
 integration/tags_test.go                           |  2 +-
 server/bootstrap/bootstrap.go                      |  1 +
 server/plugin/pkg/uuid/buildin/buildin.go          |  5 ++--
 .../{buildin/buildin.go => context/context.go}     | 34 +++++++++++++---------
 server/plugin/pkg/uuid/uuid.go                     |  8 +++--
 server/service/instance.go                         |  2 +-
 server/service/microservice.go                     |  8 +++--
 13 files changed, 54 insertions(+), 33 deletions(-)

diff --git a/etc/conf/app.conf b/etc/conf/app.conf
index df4128c..38b6690 100644
--- a/etc/conf/app.conf
+++ b/etc/conf/app.conf
@@ -108,6 +108,9 @@ auditlog_plugin = ""
 #                   in path specified by TRACING_FILE_PATH env variable
 trace_plugin = ""
 
+#customize the uuid format
+uuid_plugin = "context"
+
 ###################################################################
 # rate limit options
 ###################################################################
diff --git a/integration/governance_test.go b/integration/governance_test.go
index 2f592d7..e8c0360 100644
--- a/integration/governance_test.go
+++ b/integration/governance_test.go
@@ -66,7 +66,7 @@ var _ = Describe("MicroService Api Test", func() {
                        Expect(resp.StatusCode).To(Equal(http.StatusOK))
                        respbody, _ := ioutil.ReadAll(resp.Body)
                        serviceId = 
gojson.Json(string(respbody)).Get("serviceId").Tostring()
-                       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                       Expect(len(serviceId)).Should(BeNumerically("==", 
LengthUUID))
 
                        //Register MicroService Instance
                        endpoints := []string{"cse://127.0.0.1:9984"}
@@ -105,7 +105,7 @@ var _ = Describe("MicroService Api Test", func() {
                        Expect(resp.StatusCode).To(Equal(http.StatusOK))
                        respbody, _ = ioutil.ReadAll(resp.Body)
                        serviceInstanceID = 
gojson.Json(string(respbody)).Get("instanceId").Tostring()
-                       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                       Expect(len(serviceId)).Should(BeNumerically("==", 
LengthUUID))
 
                })
 
@@ -259,7 +259,7 @@ func BenchmarkGovernance(b *testing.B) {
        Expect(resp.StatusCode).To(Equal(http.StatusOK))
        respbody, _ := ioutil.ReadAll(resp.Body)
        serviceId := gojson.Json(string(respbody)).Get("serviceId").Tostring()
-       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+       Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
 
        for i := 0; i < b.N; i++ {
                url := strings.Replace(GETGOVERNANCESERVICEDETAILS, 
":serviceId", serviceId, 1)
diff --git a/integration/instances_test.go b/integration/instances_test.go
index 458c45d..0d675ee 100644
--- a/integration/instances_test.go
+++ b/integration/instances_test.go
@@ -69,7 +69,7 @@ var _ = Describe("MicroService Api Test", func() {
                        Expect(resp.StatusCode).To(Equal(http.StatusOK))
                        respbody, _ := ioutil.ReadAll(resp.Body)
                        serviceId = 
gojson.Json(string(respbody)).Get("serviceId").Tostring()
-                       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                       Expect(len(serviceId)).Should(BeNumerically("==", 
LengthUUID))
 
                        //Register MicroService Instance
                        endpoints := []string{"cse://127.0.0.1:9984"}
@@ -108,7 +108,7 @@ var _ = Describe("MicroService Api Test", func() {
                        Expect(resp.StatusCode).To(Equal(http.StatusOK))
                        respbody, _ = ioutil.ReadAll(resp.Body)
                        serviceInstanceID = 
gojson.Json(string(respbody)).Get("instanceId").Tostring()
-                       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                       Expect(len(serviceId)).Should(BeNumerically("==", 
LengthUUID))
 
                })
 
@@ -559,7 +559,7 @@ func BenchmarkRegisterMicroServiceInstance(b *testing.B) {
        Expect(resp.StatusCode).To(Equal(http.StatusOK))
        respbody, _ := ioutil.ReadAll(resp.Body)
        serviceId := gojson.Json(string(respbody)).Get("serviceId").Tostring()
-       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+       Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
 
        for i := 0; i < b.N; i++ {
                //Register MicroService Instance
@@ -599,7 +599,7 @@ func BenchmarkRegisterMicroServiceInstance(b *testing.B) {
                Expect(resp.StatusCode).To(Equal(http.StatusOK))
                respbody, _ = ioutil.ReadAll(resp.Body)
                serviceInstanceID := 
gojson.Json(string(respbody)).Get("instanceId").Tostring()
-               Expect(len(serviceId)).Should(BeNumerically("==", 32))
+               Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
 
                if serviceInstanceID != "" {
                        url := strings.Replace(UNREGISTERINSTANCE, 
":serviceId", serviceId, 1)
diff --git a/integration/integrationtest_suite_test.go 
b/integration/integrationtest_suite_test.go
index ae25b96..d5a2d83 100644
--- a/integration/integrationtest_suite_test.go
+++ b/integration/integrationtest_suite_test.go
@@ -25,6 +25,8 @@ import (
        "testing"
 )
 
+const LengthUUID = 40
+
 var scclient *http.Client
 
 var insecurityConnection = &http.Client{}
diff --git a/integration/microservices_test.go 
b/integration/microservices_test.go
index 0361275..fd995a2 100644
--- a/integration/microservices_test.go
+++ b/integration/microservices_test.go
@@ -70,7 +70,7 @@ var _ = Describe("MicroService Api Test", func() {
                                Expect(resp.StatusCode).To(Equal(http.StatusOK))
                                respbody, _ := ioutil.ReadAll(resp.Body)
                                serviceId = 
gojson.Json(string(respbody)).Get("serviceId").Tostring()
-                               
Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                               
Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
 
                                // UNRegister Service
                                url := strings.Replace(UNREGISTERMICROSERVICE, 
":serviceId", serviceId, 1)
@@ -112,7 +112,7 @@ var _ = Describe("MicroService Api Test", func() {
                                Expect(resp.StatusCode).To(Equal(http.StatusOK))
                                respbody, _ := ioutil.ReadAll(resp.Body)
                                serviceId = 
gojson.Json(string(respbody)).Get("serviceId").Tostring()
-                               
Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                               
Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
                        })
 
                        AfterEach(func() {
@@ -573,7 +573,7 @@ func BenchmarkRegisterMicroServiceAndDelete(b *testing.B) {
                Expect(resp.StatusCode).To(Equal(http.StatusOK))
                respbody, _ := ioutil.ReadAll(resp.Body)
                serviceId := 
gojson.Json(string(respbody)).Get("serviceId").Tostring()
-               Expect(len(serviceId)).Should(BeNumerically("==", 32))
+               Expect(len(serviceId)).Should(BeNumerically("==", LengthUUID))
                if serviceId != "" {
                        url := strings.Replace(UNREGISTERMICROSERVICE, 
":serviceId", serviceId, 1)
                        req, _ := http.NewRequest(DELETE, SCURL+url, nil)
diff --git a/integration/rules_test.go b/integration/rules_test.go
index 13543c3..78a478f 100644
--- a/integration/rules_test.go
+++ b/integration/rules_test.go
@@ -66,7 +66,7 @@ var _ = Describe("MicroService Api Test", func() {
                        Expect(resp.StatusCode).To(Equal(http.StatusOK))
                        respbody, _ := ioutil.ReadAll(resp.Body)
                        serviceId = 
gojson.Json(string(respbody)).Get("serviceId").Tostring()
-                       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                       Expect(len(serviceId)).Should(BeNumerically("==", 
LengthUUID))
                })
 
                AfterEach(func() {
diff --git a/integration/tags_test.go b/integration/tags_test.go
index ba96a7c..85cf1e1 100644
--- a/integration/tags_test.go
+++ b/integration/tags_test.go
@@ -65,7 +65,7 @@ var _ = Describe("MicroService Api Test", func() {
                        Expect(resp.StatusCode).To(Equal(http.StatusOK))
                        respbody, _ := ioutil.ReadAll(resp.Body)
                        serviceId = 
gojson.Json(string(respbody)).Get("serviceId").Tostring()
-                       Expect(len(serviceId)).Should(BeNumerically("==", 32))
+                       Expect(len(serviceId)).Should(BeNumerically("==", 
LengthUUID))
                })
 
                AfterEach(func() {
diff --git a/server/bootstrap/bootstrap.go b/server/bootstrap/bootstrap.go
index 2f80cc0..531ade9 100644
--- a/server/bootstrap/bootstrap.go
+++ b/server/bootstrap/bootstrap.go
@@ -43,6 +43,7 @@ import _ 
"github.com/apache/incubator-servicecomb-service-center/server/plugin/p
 
 // uuid
 import _ 
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/uuid/buildin"
+import _ 
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/uuid/context"
 
 // tracing
 import _ 
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/tracing/buildin"
diff --git a/server/plugin/pkg/uuid/buildin/buildin.go 
b/server/plugin/pkg/uuid/buildin/buildin.go
index b2796ea..8218e14 100644
--- a/server/plugin/pkg/uuid/buildin/buildin.go
+++ b/server/plugin/pkg/uuid/buildin/buildin.go
@@ -20,6 +20,7 @@ package buildin
 import (
        "github.com/apache/incubator-servicecomb-service-center/pkg/util"
        mgr 
"github.com/apache/incubator-servicecomb-service-center/server/plugin"
+       "golang.org/x/net/context"
 )
 
 func init() {
@@ -33,7 +34,7 @@ func New() mgr.PluginInstance {
 type BuildinUUID struct {
 }
 
-func (du *BuildinUUID) GetServiceId() string {
+func (du *BuildinUUID) GetServiceId(_ context.Context) string {
        df, ok := mgr.DynamicPluginFunc(mgr.UUID, "GetServiceId").(func() 
string)
        if ok {
                return df()
@@ -41,7 +42,7 @@ func (du *BuildinUUID) GetServiceId() string {
        return util.GenerateUuid()
 }
 
-func (du *BuildinUUID) GetInstanceId() string {
+func (du *BuildinUUID) GetInstanceId(_ context.Context) string {
        df, ok := mgr.DynamicPluginFunc(mgr.UUID, "GetInstanceId").(func() 
string)
        if ok {
                return df()
diff --git a/server/plugin/pkg/uuid/buildin/buildin.go 
b/server/plugin/pkg/uuid/context/context.go
similarity index 57%
copy from server/plugin/pkg/uuid/buildin/buildin.go
copy to server/plugin/pkg/uuid/context/context.go
index b2796ea..9ab26e9 100644
--- a/server/plugin/pkg/uuid/buildin/buildin.go
+++ b/server/plugin/pkg/uuid/context/context.go
@@ -15,36 +15,42 @@
  * limitations under the License.
  */
 
-package buildin
+package context
 
 import (
+       "crypto/sha1"
+       "fmt"
        "github.com/apache/incubator-servicecomb-service-center/pkg/util"
        mgr 
"github.com/apache/incubator-servicecomb-service-center/server/plugin"
+       
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/uuid"
+       
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/uuid/buildin"
+       "golang.org/x/net/context"
 )
 
 func init() {
-       mgr.RegisterPlugin(mgr.Plugin{mgr.UUID, "buildin", New})
+       mgr.RegisterPlugin(mgr.Plugin{mgr.UUID, "context", New})
 }
 
 func New() mgr.PluginInstance {
-       return &BuildinUUID{}
+       return &ContextUUID{}
 }
 
-type BuildinUUID struct {
+type ContextUUID struct {
+       buildin.BuildinUUID
 }
 
-func (du *BuildinUUID) GetServiceId() string {
-       df, ok := mgr.DynamicPluginFunc(mgr.UUID, "GetServiceId").(func() 
string)
-       if ok {
-               return df()
+func (cu *ContextUUID) fromContext(ctx context.Context) string {
+       key, ok := ctx.Value(uuid.ContextKey).(string)
+       if !ok {
+               return ""
        }
-       return util.GenerateUuid()
+       return key
 }
 
-func (du *BuildinUUID) GetInstanceId() string {
-       df, ok := mgr.DynamicPluginFunc(mgr.UUID, "GetInstanceId").(func() 
string)
-       if ok {
-               return df()
+func (cu *ContextUUID) GetServiceId(ctx context.Context) string {
+       content := cu.fromContext(ctx)
+       if len(content) == 0 {
+               return cu.BuildinUUID.GetServiceId(ctx)
        }
-       return util.GenerateUuid()
+       return fmt.Sprintf("%x", 
sha1.Sum(util.StringToBytesWithNoCopy(content)))
 }
diff --git a/server/plugin/pkg/uuid/uuid.go b/server/plugin/pkg/uuid/uuid.go
index 678ec30..08bab8e 100644
--- a/server/plugin/pkg/uuid/uuid.go
+++ b/server/plugin/pkg/uuid/uuid.go
@@ -16,7 +16,11 @@
  */
 package uuid
 
+import "golang.org/x/net/context"
+
+const ContextKey = "_uuid_key"
+
 type UUID interface {
-       GetServiceId() string
-       GetInstanceId() string
+       GetServiceId(ctx context.Context) string
+       GetInstanceId(ctx context.Context) string
 }
diff --git a/server/service/instance.go b/server/service/instance.go
index 9ee509d..54eef40 100644
--- a/server/service/instance.go
+++ b/server/service/instance.go
@@ -47,7 +47,7 @@ func (s *InstanceService) preProcessRegisterInstance(ctx 
context.Context, instan
        }
 
        if len(instance.InstanceId) == 0 {
-               instance.InstanceId = plugin.Plugins().UUID().GetInstanceId()
+               instance.InstanceId = plugin.Plugins().UUID().GetInstanceId(ctx)
        }
 
        instance.Timestamp = strconv.FormatInt(time.Now().Unix(), 10)
diff --git a/server/service/microservice.go b/server/service/microservice.go
index 60c40f1..b0b36e1 100644
--- a/server/service/microservice.go
+++ b/server/service/microservice.go
@@ -31,6 +31,7 @@ import (
        "github.com/apache/incubator-servicecomb-service-center/server/plugin"
        
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/quota"
        
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/registry"
+       
"github.com/apache/incubator-servicecomb-service-center/server/plugin/pkg/uuid"
        serviceUtil 
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
        "golang.org/x/net/context"
        "strconv"
@@ -110,10 +111,13 @@ func (s *MicroServiceService) CreateServicePri(ctx 
context.Context, in *pb.Creat
                return resp, nil
        }
 
+       index := apt.GenerateServiceIndexKey(serviceKey)
+
        // 产生全局service id
        requestServiceId := service.ServiceId
        if len(requestServiceId) == 0 {
-               service.ServiceId = plugin.Plugins().UUID().GetServiceId()
+               ctx = util.SetContext(ctx, uuid.ContextKey, index)
+               service.ServiceId = plugin.Plugins().UUID().GetServiceId(ctx)
        }
        service.Timestamp = strconv.FormatInt(time.Now().Unix(), 10)
        service.ModTimestamp = service.Timestamp
@@ -126,9 +130,9 @@ func (s *MicroServiceService) CreateServicePri(ctx 
context.Context, in *pb.Creat
                        Response: pb.CreateResponse(scerr.ErrInternal, 
err.Error()),
                }, err
        }
+
        key := apt.GenerateServiceKey(domainProject, service.ServiceId)
        keyBytes := util.StringToBytesWithNoCopy(key)
-       index := apt.GenerateServiceIndexKey(serviceKey)
        indexBytes := util.StringToBytesWithNoCopy(index)
        aliasBytes := 
util.StringToBytesWithNoCopy(apt.GenerateServiceAliasKey(serviceKey))
 

Reply via email to