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 2017/12/28 09:21:58 UTC
[incubator-servicecomb-service-center] branch master updated:
SCB-127 Optimize util.go (#236)
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 6e6c790 SCB-127 Optimize util.go (#236)
6e6c790 is described below
commit 6e6c790778c1595a714d646fc4c11fcf8255e00e
Author: little-cui <su...@qq.com>
AuthorDate: Thu Dec 28 17:21:56 2017 +0800
SCB-127 Optimize util.go (#236)
---
pkg/util/util.go | 24 +++++++++++++++++
server/core/microservice.go | 7 +++--
server/govern/govern_suite_test.go | 8 +++---
server/handler/context/v3.go | 13 ++++++----
server/handler/context/v4.go | 33 ++++++++----------------
server/rest/controller/v4/instance_controller.go | 8 +-----
server/service/event/instance_event_handler.go | 4 +--
server/service/instances.go | 11 +++-----
server/service/service_suite_test.go | 8 +++---
9 files changed, 57 insertions(+), 59 deletions(-)
diff --git a/pkg/util/util.go b/pkg/util/util.go
index fc950a4..17997a6 100644
--- a/pkg/util/util.go
+++ b/pkg/util/util.go
@@ -185,6 +185,30 @@ func ParseTargetProject(ctx context.Context) string {
return v
}
+func SetDomain(ctx context.Context, domain string) context.Context {
+ return SetContext(ctx, "domain", domain)
+}
+
+func SetProject(ctx context.Context, project string) context.Context {
+ return SetContext(ctx, "project", project)
+}
+
+func SetTargetDomain(ctx context.Context, domain string) context.Context {
+ return SetContext(ctx, "target-domain", domain)
+}
+
+func SetTargetProject(ctx context.Context, project string) context.Context {
+ return SetContext(ctx, "target-project", project)
+}
+
+func SetDomainProject(ctx context.Context, domain string, project string) context.Context {
+ return SetProject(SetDomain(ctx, domain), project)
+}
+
+func SetTargetDomainProject(ctx context.Context, domain string, project string) context.Context {
+ return SetTargetProject(SetTargetDomain(ctx, domain), project)
+}
+
func GetIPFromContext(ctx context.Context) string {
v, ok := FromContext(ctx, "x-remote-ip").(string)
if !ok {
diff --git a/server/core/microservice.go b/server/core/microservice.go
index d42ec00..3cd8af6 100644
--- a/server/core/microservice.go
+++ b/server/core/microservice.go
@@ -70,10 +70,9 @@ func init() {
}
func AddDefaultContextValue(ctx context.Context) context.Context {
- ctx = util.SetContext(ctx, "domain", REGISTRY_DOMAIN)
- ctx = util.SetContext(ctx, "project", REGISTRY_PROJECT)
- ctx = util.SetContext(ctx, IS_SC_SELF, true)
- return ctx
+ return util.SetContext(
+ util.SetDomainProject(ctx, REGISTRY_DOMAIN, REGISTRY_PROJECT),
+ IS_SC_SELF, true)
}
func IsDefaultDomainProject(domainProject string) bool {
diff --git a/server/govern/govern_suite_test.go b/server/govern/govern_suite_test.go
index e300716..b8063c3 100644
--- a/server/govern/govern_suite_test.go
+++ b/server/govern/govern_suite_test.go
@@ -48,9 +48,7 @@ var _ = BeforeSuite(func() {
})
func getContext() context.Context {
- ctx := context.TODO()
- ctx = util.SetContext(ctx, "domain", "default")
- ctx = util.SetContext(ctx, "project", "default")
- ctx = util.SetContext(ctx, "noCache", "1")
- return ctx
+ return util.SetContext(
+ util.SetDomainProject(context.Background(), "default", "default"),
+ "noCache", "1")
}
diff --git a/server/handler/context/v3.go b/server/handler/context/v3.go
index 2be4e91..c4c10d9 100644
--- a/server/handler/context/v3.go
+++ b/server/handler/context/v3.go
@@ -34,8 +34,10 @@ func (v *v3Context) IsMatch(r *http.Request) bool {
func (v *v3Context) Do(r *http.Request) error {
ctx := r.Context()
- if len(util.ParseDomain(ctx)) == 0 {
- domain := r.Header.Get("X-Tenant-Name")
+ domain, project := util.ParseDomain(ctx), util.ParseProject(ctx)
+
+ if len(domain) == 0 {
+ domain = r.Header.Get("X-Tenant-Name")
if len(domain) == 0 {
domain = r.Header.Get("X-Domain-Name")
}
@@ -45,11 +47,12 @@ func (v *v3Context) Do(r *http.Request) error {
util.Logger().Errorf(err, "Invalid Request URI %s", r.RequestURI)
return err
}
- util.SetRequestContext(r, "domain", domain)
+ util.SetDomain(r.Context(), domain)
}
- if len(util.ParseProject(ctx)) == 0 {
- util.SetRequestContext(r, "project", core.REGISTRY_PROJECT)
+ if len(project) == 0 {
+ util.SetProject(r.Context(), core.REGISTRY_PROJECT)
}
+
return nil
}
diff --git a/server/handler/context/v4.go b/server/handler/context/v4.go
index 5b13495..7fea2c2 100644
--- a/server/handler/context/v4.go
+++ b/server/handler/context/v4.go
@@ -21,7 +21,6 @@ import (
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
"github.com/apache/incubator-servicecomb-service-center/server/core"
"net/http"
- "net/url"
"strings"
)
@@ -35,35 +34,25 @@ func (v *v4Context) IsMatch(r *http.Request) bool {
func (v *v4Context) Do(r *http.Request) error {
ctx := r.Context()
- if len(util.ParseProject(ctx)) == 0 {
- path, err := url.PathUnescape(r.RequestURI)
- if err != nil {
- util.Logger().Errorf(err, "Invalid Request URI %s", r.RequestURI)
- return err
- }
+ domain, project := util.ParseDomain(ctx), util.ParseProject(ctx)
- util.SetRequestContext(r, "project", v.parseProjectFromPath(path))
- }
-
- if len(util.ParseDomain(ctx)) == 0 {
- domain := r.Header.Get("X-Domain-Name")
+ if len(domain) == 0 {
+ domain = r.Header.Get("X-Domain-Name")
if len(domain) == 0 {
err := errors.New("Header does not contain domain.")
util.Logger().Errorf(err, "Invalid Request URI %s", r.RequestURI)
return err
}
- util.SetRequestContext(r, "domain", domain)
+ util.SetDomain(r.Context(), domain)
}
- return nil
-}
-
-func (v *v4Context) parseProjectFromPath(path string) string {
- start := len("/v4/")
- end := start + strings.Index(path[start:], "/")
- project := strings.TrimSpace(path[start:end])
if len(project) == 0 {
- project = core.REGISTRY_PROJECT
+ project = r.URL.Query().Get(":project")
+ if len(project) == 0 {
+ project = core.REGISTRY_PROJECT
+ }
+ util.SetProject(r.Context(), project)
}
- return project
+
+ return nil
}
diff --git a/server/rest/controller/v4/instance_controller.go b/server/rest/controller/v4/instance_controller.go
index 0f23320..92631e5 100644
--- a/server/rest/controller/v4/instance_controller.go
+++ b/server/rest/controller/v4/instance_controller.go
@@ -131,13 +131,7 @@ func (this *MicroServiceInstanceService) FindInstances(w http.ResponseWriter, r
Tags: ids,
}
- targetDomain := r.Header.Get("X-Domain-Name")
- targetProject := r.URL.Query().Get(":project")
- if len(targetProject) == 0 {
- targetProject = core.REGISTRY_PROJECT
- }
- util.SetRequestContext(r, "target-domain", targetDomain)
- util.SetRequestContext(r, "target-project", targetProject)
+ util.SetTargetDomainProject(r.Context(), r.Header.Get("X-Domain-Name"), r.URL.Query().Get(":project"))
resp, _ := core.InstanceAPI.Find(r.Context(), request)
respInternal := resp.Response
diff --git a/server/service/event/instance_event_handler.go b/server/service/event/instance_event_handler.go
index 4d44e7c..0e0c02c 100644
--- a/server/service/event/instance_event_handler.go
+++ b/server/service/event/instance_event_handler.go
@@ -54,9 +54,7 @@ func (h *InstanceEventHandler) OnEvent(evt *store.KvEvent) {
if len(splited) == 2 && !apt.IsDefaultDomainProject(domainProject) {
domainName := splited[0]
projectName := splited[1]
- ctx := context.TODO()
- ctx = util.SetContext(ctx, "domain", domainName)
- ctx = util.SetContext(ctx, "project", projectName)
+ ctx := util.SetDomainProject(context.Background(), domainName, projectName)
serviceUtil.RemandInstanceQuota(ctx)
}
}
diff --git a/server/service/instances.go b/server/service/instances.go
index 8160f7e..6a52625 100644
--- a/server/service/instances.go
+++ b/server/service/instances.go
@@ -434,11 +434,9 @@ func (s *InstanceService) GetOneInstance(ctx context.Context, in *pb.GetOneInsta
}
conPro := util.StringJoin([]string{in.ConsumerServiceId, in.ProviderServiceId, in.ProviderInstanceId}, "/")
- targetDomainProject := util.ParseTargetDomainProject(ctx)
-
serviceId := in.ProviderServiceId
instanceId := in.ProviderInstanceId
- instance, err := serviceUtil.GetInstance(ctx, targetDomainProject, serviceId, instanceId)
+ instance, err := serviceUtil.GetInstance(ctx, util.ParseTargetDomainProject(ctx), serviceId, instanceId)
if err != nil {
util.Logger().Errorf(err, "get instance failed, %s(consumer/provider): get instance failed.", conPro)
return &pb.GetOneInstanceResponse{
@@ -522,9 +520,7 @@ func (s *InstanceService) GetInstances(ctx context.Context, in *pb.GetInstancesR
}
conPro := util.StringJoin([]string{in.ConsumerServiceId, in.ProviderServiceId}, "/")
- targetDomainProject := util.ParseTargetDomainProject(ctx)
-
- instances, err := serviceUtil.GetAllInstancesOfOneService(ctx, targetDomainProject, in.ProviderServiceId)
+ instances, err := serviceUtil.GetAllInstancesOfOneService(ctx, util.ParseTargetDomainProject(ctx), in.ProviderServiceId)
if err != nil {
util.Logger().Errorf(err, "get instances failed, %s(consumer/provider): get instances from etcd failed.", conPro)
return &pb.GetInstancesResponse{
@@ -577,8 +573,7 @@ func (s *InstanceService) Find(ctx context.Context, in *pb.FindInstancesRequest)
} else {
// provider is not a shared micro-service,
// only allow shared micro-service instances found in different domains.
- util.SetContext(ctx, "target-domain", util.ParseDomain(ctx))
- util.SetContext(ctx, "target-project", util.ParseProject(ctx))
+ util.SetTargetDomainProject(ctx, util.ParseDomain(ctx), util.ParseProject(ctx))
provider.Tenant = util.ParseTargetDomainProject(ctx)
findFlag += "(" + provider.Environment + " services of the same domain)"
}
diff --git a/server/service/service_suite_test.go b/server/service/service_suite_test.go
index 8bce1f0..e23ad93 100644
--- a/server/service/service_suite_test.go
+++ b/server/service/service_suite_test.go
@@ -39,11 +39,9 @@ var _ = BeforeSuite(func() {
})
func getContext() context.Context {
- ctx := context.TODO()
- ctx = util.SetContext(ctx, "domain", "default")
- ctx = util.SetContext(ctx, "project", "default")
- ctx = util.SetContext(ctx, "noCache", "1")
- return ctx
+ return util.SetContext(
+ util.SetDomainProject(context.Background(), "default", "default"),
+ "noCache", "1")
}
func TestGrpc(t *testing.T) {
--
To stop receiving notification emails like this one, please contact
['"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>'].