[
https://issues.apache.org/jira/browse/SCB-621?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16493358#comment-16493358
]
ASF GitHub Bot commented on SCB-621:
------------------------------------
little-cui closed pull request #358: SCB-621 Fix the wrong revision from
FindInstances API
URL: https://github.com/apache/incubator-servicecomb-service-center/pull/358
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/integration/instances_test.go b/integration/instances_test.go
index 50043210..ec71f21f 100644
--- a/integration/instances_test.go
+++ b/integration/instances_test.go
@@ -328,6 +328,26 @@ var _ = Describe("MicroService Api Test", func() {
resp, _ := scclient.Do(req)
Expect(resp.StatusCode).To(Equal(http.StatusBadRequest))
})
+
+ It("Find Micro-Service Instance with rev", func() {
+ req, _ := http.NewRequest(GET,
SCURL+FINDINSTANCE+"?noCache=1&appId="+serviceAppId+"&serviceName="+serviceName+"&version="+serviceVersion,
nil)
+ req.Header.Set("X-Domain-Name", "default")
+ req.Header.Set("X-ConsumerId", serviceId)
+ resp, _ := scclient.Do(req)
+ ioutil.ReadAll(resp.Body)
+ Expect(resp.StatusCode).To(Equal(http.StatusOK))
+ rev := resp.Header.Get("X-Resource-Revision")
+ Expect(rev).NotTo(BeEmpty())
+
+ req, _ = http.NewRequest(GET,
SCURL+FINDINSTANCE+"?appId="+serviceAppId+"&serviceName="+serviceName+"&version="+serviceVersion+"&rev="+rev,
nil)
+ req.Header.Set("X-Domain-Name", "default")
+ req.Header.Set("X-ConsumerId", serviceId)
+ resp, _ = scclient.Do(req)
+ ioutil.ReadAll(resp.Body)
+
Expect(resp.StatusCode).To(Equal(http.StatusNotModified))
+ rev = resp.Header.Get("X-Resource-Revision")
+ Expect(rev).NotTo(BeEmpty())
+ })
})
By("Update Micro-Service Instance Information API's", func() {
It("Update Micro-Service Instance Properties", func() {
diff --git a/pkg/rest/client.go b/pkg/rest/client.go
index f5b6c009..2fcac6d8 100644
--- a/pkg/rest/client.go
+++ b/pkg/rest/client.go
@@ -174,13 +174,13 @@ func getHttpsClient(gzip, verifyPeer, supplyCert,
verifyCN bool) (client *HttpCl
func (client *HttpClient) getHeaders(method string, headers map[string]string,
body interface{}) map[string]string {
newHeaders := make(map[string]string)
if body != nil {
- newHeaders["Content-Type"] = "application/json;utf-8"
- newHeaders["Accept"] = "application/json"
+ newHeaders[HEADER_CONTENT_TYPE] = CONTENT_TYPE_JSON
+ newHeaders[HEADER_ACCEPT] = ACCEPT_JSON
}
if client.gzip {
- newHeaders["Accept-Encoding"] = "gzip"
- newHeaders["Content-Encoding"] = "gzip"
+ newHeaders[HEADER_ACCEPT_ENCODING] = ENCODING_GZIP
+ newHeaders[HEADER_CONTENT_ENCODING] = ENCODING_GZIP
}
if headers != nil {
@@ -228,7 +228,7 @@ func (client *HttpClient) httpDo(method string, url string,
headers map[string]s
var err error = nil
var bodyReader io.Reader = nil
if body != nil {
- if headers == nil || len(headers["Content-Type"]) == 0 {
+ if headers == nil || len(headers[HEADER_CONTENT_TYPE]) == 0 {
//
如果请求头未传入Content-Type,则按照json格式进行编码(如果是非json类型,需要自行在headers里指定类型)
bodyBytes, err = json.Marshal(body)
if err != nil {
@@ -240,13 +240,13 @@ func (client *HttpClient) httpDo(method string, url
string, headers map[string]s
var ok bool = false
bodyBytes, ok = body.([]byte)
if !ok {
- util.Logger().Errorf(nil, "invalid body type
'%s'(%s), body must type of byte array if Content-Type specified.",
reflect.TypeOf(body), headers["Content-Type"])
+ util.Logger().Errorf(nil, "invalid body type
'%s'(%s), body must type of byte array if Content-Type specified.",
reflect.TypeOf(body), headers[HEADER_CONTENT_TYPE])
return status, result
}
}
//如果配置了gzip压缩,则对body压缩一次(如果请求头里传入已经gzip压缩了,则不重复压缩)
- if client.gzip && (headers == nil ||
headers["Content-Encoding"] != "gzip") {
+ if client.gzip && (headers == nil ||
headers[HEADER_CONTENT_ENCODING] != ENCODING_GZIP) {
bodyBytes = gzipCompress(bodyBytes)
}
@@ -273,7 +273,7 @@ func (client *HttpClient) httpDo(method string, url string,
headers map[string]s
defer resp.Body.Close()
status = resp.StatusCode
var respBody []byte
- if resp.Header.Get("Content-Encoding") == "gzip" {
+ if resp.Header.Get(HEADER_CONTENT_ENCODING) == ENCODING_GZIP {
// 如果响应头里包含了响应消息的压缩格式为gzip,则在返回前先解压缩
respBody, _ = readAndGunzip(resp.Body)
} else {
@@ -289,7 +289,7 @@ func (client *HttpClient) HttpDo(method string, url string,
headers map[string]s
var err error = nil
var bodyReader io.Reader = nil
if body != nil {
- if headers == nil || len(headers["Content-Type"]) == 0 {
+ if headers == nil || len(headers[HEADER_CONTENT_TYPE]) == 0 {
//
如果请求头未传入Conent-Type,则按照json格式进行编码(如果是非json类型,需要自行在headers里指定类型)
bodyBytes, err = json.Marshal(body)
if err != nil {
@@ -302,14 +302,14 @@ func (client *HttpClient) HttpDo(method string, url
string, headers map[string]s
bodyBytes, ok = body.([]byte)
if !ok {
err := fmt.Errorf("invalid body type '%s'(%s),
body must type of byte array if Content-Type specified.",
- reflect.TypeOf(body),
headers["Content-Type"])
+ reflect.TypeOf(body),
headers[HEADER_CONTENT_TYPE])
util.Logger().Errorf(err, "")
return nil, err
}
}
//如果配置了gzip压缩,则对body压缩一次(如果请求头里传入已经gzip压缩了,则不重复压缩)
- if client.gzip && (headers == nil ||
headers["Content-Encoding"] != "gzip") {
+ if client.gzip && (headers == nil ||
headers[HEADER_CONTENT_ENCODING] != ENCODING_GZIP) {
bodyBytes = gzipCompress(bodyBytes)
}
diff --git a/pkg/rest/common.go b/pkg/rest/common.go
index 10104942..182f4137 100644
--- a/pkg/rest/common.go
+++ b/pkg/rest/common.go
@@ -30,7 +30,24 @@ const (
CTX_REQUEST = "_server_request"
CTX_MATCH_PATTERN = "_server_match_pattern"
CTX_MATCH_FUNC = "_server_match_func"
+
SERVER_CHAIN_NAME = "_server_chain"
+
+ HEADER_RESPONSE_STATUS = "X-Response-Status"
+
+ HEADER_ALLOW = "Allow"
+ HEADER_SERVER = "Server"
+ HEADER_CONTENT_TYPE = "Content-Type"
+ HEADER_CONTENT_ENCODING = "Content-Encoding"
+ HEADER_ACCEPT = "Accept"
+ HEADER_ACCEPT_ENCODING = "Accept-Encoding"
+
+ ACCEPT_JSON = "application/json"
+
+ CONTENT_TYPE_JSON = "application/json; charset=UTF-8"
+ CONTENT_TYPE_TEXT = "text/plain; charset=UTF-8"
+
+ ENCODING_GZIP = "gzip"
)
func isValidMethod(method string) bool {
diff --git a/pkg/rest/route.go b/pkg/rest/route.go
index e3eb7c51..f69c1f71 100644
--- a/pkg/rest/route.go
+++ b/pkg/rest/route.go
@@ -106,7 +106,7 @@ func (this *ROAServerHandler) ServeHTTP(w
http.ResponseWriter, r *http.Request)
return
}
- w.Header().Add("Allow", util.StringJoin(allowed, ", "))
+ w.Header().Add(HEADER_ALLOW, util.StringJoin(allowed, ", "))
http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
}
diff --git a/server/broker/controller.go b/server/broker/controller.go
index 2f817c53..24353d9f 100644
--- a/server/broker/controller.go
+++ b/server/broker/controller.go
@@ -127,7 +127,7 @@ func (*BrokerController) GetPactsOfProvider(w
http.ResponseWriter, r *http.Reque
respInternal := resp.Response
resp.Response = nil
//controller.WriteResponse(w, respInternal, resp.Pact)
- controller.WriteBytes(w, respInternal, resp.Pact)
+ controller.WriteJsonBytes(w, respInternal, resp.Pact)
}
func (*BrokerController) DeletePacts(w http.ResponseWriter, r *http.Request) {
diff --git a/server/broker/service_test.go b/server/broker/service_test.go
index ac910a11..ee273202 100644
--- a/server/broker/service_test.go
+++ b/server/broker/service_test.go
@@ -21,6 +21,7 @@ import (
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
pb
"github.com/apache/incubator-servicecomb-service-center/server/core/proto"
+ serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"golang.org/x/net/context"
@@ -192,6 +193,6 @@ 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")
+ ctx = util.SetContext(ctx, serviceUtil.CTX_NOCACHE, "1")
return ctx
}
diff --git a/server/govern/controller_v4.go b/server/govern/controller_v4.go
index 04cb637f..6a0a1817 100644
--- a/server/govern/controller_v4.go
+++ b/server/govern/controller_v4.go
@@ -131,7 +131,7 @@ func (governService *GovernServiceControllerV4) GetGraph(w
http.ResponseWriter,
}
}
graph.Nodes = nodes
- controller.WriteJsonObject(w, graph)
+ controller.WriteResponse(w, nil, graph)
}
// GetServiceDetail 查询服务详细信息
diff --git a/server/handler/cache/cache.go b/server/handler/cache/cache.go
index 8b119926..947ac5a8 100644
--- a/server/handler/cache/cache.go
+++ b/server/handler/cache/cache.go
@@ -17,10 +17,9 @@
package cache
import (
- "fmt"
"github.com/apache/incubator-servicecomb-service-center/pkg/chain"
"github.com/apache/incubator-servicecomb-service-center/pkg/rest"
-
"github.com/apache/incubator-servicecomb-service-center/server/core/backend"
+ serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"net/http"
"strconv"
)
@@ -29,31 +28,28 @@ type CacheResponse struct {
}
func (l *CacheResponse) Handle(i *chain.Invocation) {
- r := i.Context().Value(rest.CTX_REQUEST).(*http.Request)
- w := i.Context().Value(rest.CTX_RESPONSE).(http.ResponseWriter)
+ defer i.Next()
- scRev := backend.Revision()
- w.Header().Set("X-Resource-Revision", fmt.Sprint(scRev))
+ r := i.Context().Value(rest.CTX_REQUEST).(*http.Request)
+ noCache := r.URL.Query().Get(serviceUtil.CTX_NOCACHE) == "1"
+ cacheOnly := r.URL.Query().Get(serviceUtil.CTX_CACHEONLY) == "1"
rev, _ := strconv.ParseInt(r.URL.Query().Get("rev"), 10, 64)
- if rev != 0 && rev == scRev && r.Method == http.MethodGet {
- w.WriteHeader(http.StatusNotModified)
- i.Fail(nil)
+
+ if noCache {
+ i.WithContext(serviceUtil.CTX_NOCACHE, "1")
return
}
- noCache := r.URL.Query().Get("noCache") == "1"
- cacheOnly := r.URL.Query().Get("cacheOnly") == "1"
-
- if rev > scRev || noCache {
- i.WithContext("noCache", "1")
+ if cacheOnly {
+ i.WithContext(serviceUtil.CTX_CACHEONLY, "1")
+ return
}
- if cacheOnly && !noCache {
- i.WithContext("cacheOnly", "1")
+ if rev > 0 {
+ i.WithContext(serviceUtil.CTX_REQUEST_REVISION, rev)
+ return
}
-
- i.Next()
}
func RegisterHandlers() {
diff --git a/server/handler/tracing/tracing.go
b/server/handler/tracing/tracing.go
index 09776c15..77c24d60 100644
--- a/server/handler/tracing/tracing.go
+++ b/server/handler/tracing/tracing.go
@@ -35,7 +35,7 @@ func (h *TracingHandler) Handle(i *chain.Invocation) {
span := plugin.Plugins().Tracing().ServerBegin(op, r)
i.Next(chain.WithAsyncFunc(func(ret chain.Result) {
- statusCode := w.Header().Get("X-Response-Status")
+ statusCode := w.Header().Get(rest.HEADER_RESPONSE_STATUS)
code, _ := strconv.ParseInt(statusCode, 10, 64)
if code == 0 {
code = 200
diff --git a/server/infra/registry/registry.go
b/server/infra/registry/registry.go
index 0856fa3b..b986723a 100644
--- a/server/infra/registry/registry.go
+++ b/server/infra/registry/registry.go
@@ -144,8 +144,7 @@ const (
)
const (
- REQUEST_TIMEOUT = 30 * time.Second
-
+ REQUEST_TIMEOUT = 30 * time.Second
DEFAULT_PAGE_COUNT = 4096 // grpc does not allow to transport a large
body more then 4MB in a request.
)
@@ -314,6 +313,15 @@ type PluginResponse struct {
Succeeded bool
}
+func (pr *PluginResponse) MaxModRevision() (max int64) {
+ for _, kv := range pr.Kvs {
+ if max < kv.ModRevision {
+ max = kv.ModRevision
+ }
+ }
+ return
+}
+
func (pr *PluginResponse) String() string {
return fmt.Sprintf("{action: %s, count: %d/%d, rev: %d, succeed: %v}",
pr.Action, len(pr.Kvs), pr.Count, pr.Revision, pr.Succeeded)
diff --git a/server/interceptor/access/access.go
b/server/interceptor/access/access.go
index d7eb8efa..4e5b336b 100644
--- a/server/interceptor/access/access.go
+++ b/server/interceptor/access/access.go
@@ -18,6 +18,7 @@ package access
import (
"fmt"
+ "github.com/apache/incubator-servicecomb-service-center/pkg/rest"
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
"github.com/apache/incubator-servicecomb-service-center/pkg/validate"
"github.com/apache/incubator-servicecomb-service-center/server/core"
@@ -33,7 +34,7 @@ func init() {
}
func Intercept(w http.ResponseWriter, r *http.Request) error {
- w.Header().Add("server", serverName)
+ w.Header().Add(rest.HEADER_SERVER, serverName)
r.Body = http.MaxBytesReader(w, r.Body,
core.ServerInfo.Config.MaxBodyBytes)
diff --git a/server/rest/controller/rest_util.go
b/server/rest/controller/rest_util.go
index 00f93f7e..7e2491df 100644
--- a/server/rest/controller/rest_util.go
+++ b/server/rest/controller/rest_util.go
@@ -19,29 +19,30 @@ package controller
import (
"encoding/json"
"fmt"
+ "github.com/apache/incubator-servicecomb-service-center/pkg/rest"
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
pb
"github.com/apache/incubator-servicecomb-service-center/server/core/proto"
"github.com/apache/incubator-servicecomb-service-center/server/error"
"net/http"
)
-const (
- contentTypeJson = "application/json; charset=UTF-8"
- contentTypeText = "text/plain; charset=UTF-8"
-)
-
func WriteError(w http.ResponseWriter, code int32, detail string) {
err := error.NewError(code, detail)
- w.Header().Add("X-Response-Status", fmt.Sprint(err.StatusCode()))
- w.Header().Set("Content-Type", contentTypeJson)
+ w.Header().Set(rest.HEADER_RESPONSE_STATUS,
fmt.Sprint(err.StatusCode()))
+ w.Header().Set(rest.HEADER_CONTENT_TYPE, rest.CONTENT_TYPE_JSON)
w.WriteHeader(err.StatusCode())
fmt.Fprintln(w, util.BytesToStringWithNoCopy(err.Marshal()))
}
-func WriteJsonObject(w http.ResponseWriter, obj interface{}) {
+func WriteResponse(w http.ResponseWriter, resp *pb.Response, obj interface{}) {
+ if resp != nil && resp.GetCode() != pb.Response_SUCCESS {
+ WriteError(w, resp.GetCode(), resp.GetMessage())
+ return
+ }
+
if obj == nil {
- w.Header().Add("X-Response-Status", fmt.Sprint(http.StatusOK))
- w.Header().Set("Content-Type", contentTypeText)
+ w.Header().Set(rest.HEADER_RESPONSE_STATUS,
fmt.Sprint(http.StatusOK))
+ w.Header().Set(rest.HEADER_CONTENT_TYPE, rest.CONTENT_TYPE_TEXT)
w.WriteHeader(http.StatusOK)
return
}
@@ -51,25 +52,16 @@ func WriteJsonObject(w http.ResponseWriter, obj
interface{}) {
WriteError(w, error.ErrInternal, err.Error())
return
}
- w.Header().Add("X-Response-Status", fmt.Sprint(http.StatusOK))
- w.Header().Set("Content-Type", contentTypeJson)
+ w.Header().Set(rest.HEADER_RESPONSE_STATUS, fmt.Sprint(http.StatusOK))
+ w.Header().Set(rest.HEADER_CONTENT_TYPE, rest.CONTENT_TYPE_JSON)
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, util.BytesToStringWithNoCopy(objJson))
}
-func WriteResponse(w http.ResponseWriter, resp *pb.Response, obj interface{}) {
- if resp.GetCode() == pb.Response_SUCCESS {
- WriteJsonObject(w, obj)
- return
- }
-
- WriteError(w, resp.GetCode(), resp.GetMessage())
-}
-
-func WriteBytes(w http.ResponseWriter, resp *pb.Response, json []byte) {
+func WriteJsonBytes(w http.ResponseWriter, resp *pb.Response, json []byte) {
if resp.GetCode() == pb.Response_SUCCESS {
- w.Header().Add("X-Response-Status", fmt.Sprint(http.StatusOK))
- w.Header().Set("Content-Type", contentTypeJson)
+ w.Header().Set(rest.HEADER_RESPONSE_STATUS,
fmt.Sprint(http.StatusOK))
+ w.Header().Set(rest.HEADER_CONTENT_TYPE, rest.CONTENT_TYPE_JSON)
w.WriteHeader(http.StatusOK)
w.Write(json)
return
diff --git a/server/rest/controller/v3/main_controller.go
b/server/rest/controller/v3/main_controller.go
index e20e3238..2d1ac1cd 100644
--- a/server/rest/controller/v3/main_controller.go
+++ b/server/rest/controller/v3/main_controller.go
@@ -54,5 +54,5 @@ func (this *MainService) URLPatterns() []rest.Route {
}
func (this *MainService) GetVersion(w http.ResponseWriter, r *http.Request) {
- controller.WriteBytes(w, versionResp, versionJsonCache)
+ controller.WriteJsonBytes(w, versionResp, versionJsonCache)
}
diff --git a/server/rest/controller/v4/instance_controller.go
b/server/rest/controller/v4/instance_controller.go
index 92631e52..f105a68d 100644
--- a/server/rest/controller/v4/instance_controller.go
+++ b/server/rest/controller/v4/instance_controller.go
@@ -18,12 +18,14 @@ package v4
import (
"encoding/json"
+ "fmt"
"github.com/apache/incubator-servicecomb-service-center/pkg/rest"
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
"github.com/apache/incubator-servicecomb-service-center/server/core"
pb
"github.com/apache/incubator-servicecomb-service-center/server/core/proto"
scerr
"github.com/apache/incubator-servicecomb-service-center/server/error"
"github.com/apache/incubator-servicecomb-service-center/server/rest/controller"
+ serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"io/ioutil"
"net/http"
"strings"
@@ -99,7 +101,7 @@ func (this *MicroServiceInstanceService) HeartbeatSet(w
http.ResponseWriter, r *
resp, _ := core.InstanceAPI.HeartbeatSet(r.Context(), request)
if resp.Response.Code == pb.Response_SUCCESS {
- controller.WriteJsonObject(w, nil)
+ controller.WriteResponse(w, nil, nil)
return
}
respInternal := resp.Response
@@ -136,6 +138,15 @@ func (this *MicroServiceInstanceService) FindInstances(w
http.ResponseWriter, r
resp, _ := core.InstanceAPI.Find(r.Context(), request)
respInternal := resp.Response
resp.Response = nil
+
+ iv, _ := r.Context().Value(serviceUtil.CTX_REQUEST_REVISION).(int64)
+ ov, _ := r.Context().Value(serviceUtil.CTX_RESPONSE_REVISION).(int64)
+ w.Header().Set(serviceUtil.HEADER_REV, fmt.Sprint(ov))
+ if iv > 0 && iv == ov {
+ w.WriteHeader(http.StatusNotModified)
+ return
+ }
+
controller.WriteResponse(w, respInternal, resp)
}
diff --git a/server/rest/controller/v4/main_controller.go
b/server/rest/controller/v4/main_controller.go
index cbf5ed58..4f1299d4 100644
--- a/server/rest/controller/v4/main_controller.go
+++ b/server/rest/controller/v4/main_controller.go
@@ -76,5 +76,5 @@ func (this *MainService) ClusterHealth(w http.ResponseWriter,
r *http.Request) {
}
func (this *MainService) GetVersion(w http.ResponseWriter, r *http.Request) {
- controller.WriteBytes(w, versionResp, versionJsonCache)
+ controller.WriteJsonBytes(w, versionResp, versionJsonCache)
}
diff --git a/server/rest/metric.go b/server/rest/metric.go
index e97fb5d0..a15c45f1 100644
--- a/server/rest/metric.go
+++ b/server/rest/metric.go
@@ -79,7 +79,7 @@ func ReportRequestCompleted(w http.ResponseWriter, r
*http.Request, start time.T
}
func codeOf(h http.Header) (bool, string) {
- statusCode := h.Get("X-Response-Status")
+ statusCode := h.Get(rest.HEADER_RESPONSE_STATUS)
if statusCode == "" {
return true, "200"
}
diff --git a/server/service/instances.go b/server/service/instances.go
index 33d64e20..a0ed1c21 100644
--- a/server/service/instances.go
+++ b/server/service/instances.go
@@ -382,8 +382,13 @@ func getHeartbeatFunc(ctx context.Context, domainProject
string, instancesHbRst
}
func (s *InstanceService) GetOneInstance(ctx context.Context, in
*pb.GetOneInstanceRequest) (*pb.GetOneInstanceResponse, error) {
- checkErr := s.getInstancePreCheck(ctx, in)
- if checkErr != nil {
+ if err := apt.Validate(in); err != nil {
+ util.Logger().Errorf(err, "get instance failed: invalid
parameters.")
+ return &pb.GetOneInstanceResponse{
+ Response: pb.CreateResponse(scerr.ErrInvalidParams,
err.Error()),
+ }, nil
+ }
+ if checkErr := s.getInstancePreCheck(ctx, in.ProviderServiceId,
in.ConsumerServiceId, in.Tags); checkErr != nil {
util.Logger().Errorf(checkErr, "get instance failed: pre check
failed.")
resp := &pb.GetOneInstanceResponse{
Response: pb.CreateResponseWithSCErr(checkErr),
@@ -417,26 +422,8 @@ func (s *InstanceService) GetOneInstance(ctx
context.Context, in *pb.GetOneInsta
}, nil
}
-func (s *InstanceService) getInstancePreCheck(ctx context.Context, in
interface{}) *scerr.Error {
- err := apt.Validate(in)
- if err != nil {
- return scerr.NewError(scerr.ErrInvalidParams, err.Error())
- }
+func (s *InstanceService) getInstancePreCheck(ctx context.Context,
providerServiceId, consumerServiceId string, tags []string) *scerr.Error {
targetDomainProject := util.ParseTargetDomainProject(ctx)
- var providerServiceId, consumerServiceId string
- var tags []string
-
- switch in.(type) {
- case *pb.GetOneInstanceRequest:
- providerServiceId =
in.(*pb.GetOneInstanceRequest).ProviderServiceId
- consumerServiceId =
in.(*pb.GetOneInstanceRequest).ConsumerServiceId
- tags = in.(*pb.GetOneInstanceRequest).Tags
- case *pb.GetInstancesRequest:
- providerServiceId =
in.(*pb.GetInstancesRequest).ProviderServiceId
- consumerServiceId =
in.(*pb.GetInstancesRequest).ConsumerServiceId
- tags = in.(*pb.GetInstancesRequest).Tags
- }
-
if !serviceUtil.ServiceExist(ctx, targetDomainProject,
providerServiceId) {
return scerr.NewError(scerr.ErrServiceNotExists, "Provider
serviceId is invalid")
}
@@ -458,18 +445,17 @@ func (s *InstanceService) getInstancePreCheck(ctx
context.Context, in interface{
}
// 黑白名单
// 跨应用调用
- forbid := serviceUtil.Accessible(ctx, consumerServiceId,
providerServiceId)
- if forbid != nil {
- util.Logger().Errorf(forbid,
- "consumer %s can't access provider %s",
consumerServiceId, providerServiceId)
- return forbid
- }
- return nil
+ return serviceUtil.Accessible(ctx, consumerServiceId, providerServiceId)
}
func (s *InstanceService) GetInstances(ctx context.Context, in
*pb.GetInstancesRequest) (*pb.GetInstancesResponse, error) {
- checkErr := s.getInstancePreCheck(ctx, in)
- if checkErr != nil {
+ if err := apt.Validate(in); err != nil {
+ util.Logger().Errorf(err, "get instances failed: invalid
parameters.")
+ return &pb.GetInstancesResponse{
+ Response: pb.CreateResponse(scerr.ErrInvalidParams,
err.Error()),
+ }, nil
+ }
+ if checkErr := s.getInstancePreCheck(ctx, in.ProviderServiceId,
in.ConsumerServiceId, in.Tags); checkErr != nil {
util.Logger().Errorf(checkErr, "get instances failed: pre check
failed.")
resp := &pb.GetInstancesResponse{
Response: pb.CreateResponseWithSCErr(checkErr),
@@ -546,6 +532,7 @@ func (s *InstanceService) Find(ctx context.Context, in
*pb.FindInstancesRequest)
Response: pb.CreateResponse(scerr.ErrInternal, "Get
serviceId failed."),
}, err
}
+
if len(ids) == 0 {
mes := fmt.Sprintf("provider not exist, %s", findFlag)
util.Logger().Errorf(nil, "find instance failed, %s", mes)
@@ -554,48 +541,43 @@ func (s *InstanceService) Find(ctx context.Context, in
*pb.FindInstancesRequest)
}, nil
}
- instances := make([]*pb.MicroServiceInstance, 0, 10)
- cloneCtx := ctx
- if s, ok := ctx.Value("noCache").(string); !ok || s != "1" {
- cloneCtx = util.SetContext(util.CloneContext(ctx), "cacheOnly",
"1")
+ for i := 0; i < len(ids); i++ {
+ err := s.getInstancePreCheck(ctx, ids[i], in.ConsumerServiceId,
in.Tags)
+ if err != nil {
+ ids = append(ids[:i], ids[i+1:]...)
+ i--
+ }
}
- for _, serviceId := range ids {
- resp, err := s.GetInstances(cloneCtx, &pb.GetInstancesRequest{
- ConsumerServiceId: in.ConsumerServiceId,
- ProviderServiceId: serviceId,
- Tags: in.Tags,
- })
+
+ if len(ids) > 0 {
+ //维护version的规则,service name 可能是别名,所以重新获取
+ providerService, err := serviceUtil.GetService(ctx,
provider.Tenant, ids[0])
+ if providerService == nil {
+ util.Logger().Errorf(err, "find instance failed, %s:
provider %s not exist.", findFlag, ids[0])
+ return &pb.FindInstancesResponse{
+ Response:
pb.CreateResponse(scerr.ErrServiceNotExists, "No provider matched."),
+ }, nil
+ }
+
+ provider = pb.MicroServiceToKey(provider.Tenant,
providerService)
+ provider.Version = in.VersionRule
+
+ err = serviceUtil.AddServiceVersionRule(ctx, domainProject,
service, provider)
if err != nil {
- util.Logger().Errorf(err, "find instance failed, %s:
get service %s 's instance failed.", findFlag, serviceId)
+ util.Logger().Errorf(err, "find instance failed, %s:
add service version rule failed.", findFlag)
return &pb.FindInstancesResponse{
- Response: resp.Response,
+ Response: pb.CreateResponse(scerr.ErrInternal,
err.Error()),
}, err
}
- if len(resp.GetInstances()) > 0 {
- instances = append(instances, resp.GetInstances()...)
- }
- }
-
- //维护version的规则,service name 可能是别名,所以重新获取
- providerService, err := serviceUtil.GetService(ctx, provider.Tenant,
ids[0])
- if providerService == nil {
- util.Logger().Errorf(err, "find instance failed, %s: provider
%s not exist.", findFlag, ids[0])
- return &pb.FindInstancesResponse{
- Response: pb.CreateResponse(scerr.ErrServiceNotExists,
"No provider matched."),
- }, nil
}
- provider = pb.MicroServiceToKey(provider.Tenant, providerService)
- provider.Version = in.VersionRule
-
- err = serviceUtil.AddServiceVersionRule(ctx, domainProject, service,
provider)
+ instances, err := serviceUtil.GetAllInstancesOfServices(ctx,
util.ParseTargetDomainProject(ctx), ids)
if err != nil {
- util.Logger().Errorf(err, "find instance failed, %s: add
service version rule failed.", findFlag)
+ util.Logger().Errorf(err, "find instance failed, %s:
GetAllInstancesOfServices failed.", findFlag)
return &pb.FindInstancesResponse{
Response: pb.CreateResponse(scerr.ErrInternal,
err.Error()),
}, err
}
-
return &pb.FindInstancesResponse{
Response: pb.CreateResponse(pb.Response_SUCCESS, "Query
service instances successfully."),
Instances: instances,
diff --git a/server/service/instances_test.go b/server/service/instances_test.go
index e4723d7d..1635ee57 100644
--- a/server/service/instances_test.go
+++ b/server/service/instances_test.go
@@ -21,6 +21,7 @@ import (
"github.com/apache/incubator-servicecomb-service-center/server/core"
pb
"github.com/apache/incubator-servicecomb-service-center/server/core/proto"
scerr
"github.com/apache/incubator-servicecomb-service-center/server/error"
+ serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"os"
@@ -588,10 +589,12 @@ var _ = Describe("'Instance' service", func() {
serviceId5 string
serviceId6 string
serviceId7 string
+ serviceId8 string
instanceId1 string
instanceId2 string
instanceId4 string
instanceId5 string
+ instanceId8 string
)
It("should be passed", func() {
@@ -665,6 +668,21 @@ var _ = Describe("'Instance' service", func() {
Expect(respCreate.Response.Code).To(Equal(pb.Response_SUCCESS))
serviceId5 = respCreate.ServiceId
+ respCreate, err = serviceResource.Create(
+
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
+ &pb.CreateServiceRequest{
+ Service: &pb.MicroService{
+ AppId: "default",
+ ServiceName:
"query_instance_diff_domain_consumer",
+ Version: "1.0.0",
+ Level: "FRONT",
+ Status: pb.MS_UP,
+ },
+ })
+ Expect(err).To(BeNil())
+
Expect(respCreate.Response.Code).To(Equal(pb.Response_SUCCESS))
+ serviceId6 = respCreate.ServiceId
+
respCreate, err = serviceResource.Create(getContext(),
&pb.CreateServiceRequest{
Service: &pb.MicroService{
AppId: "default",
@@ -678,20 +696,18 @@ var _ = Describe("'Instance' service", func() {
Expect(respCreate.Response.Code).To(Equal(pb.Response_SUCCESS))
serviceId7 = respCreate.ServiceId
- respCreate, err = serviceResource.Create(
-
util.SetDomainProject(util.CloneContext(getContext()), "user", "user"),
- &pb.CreateServiceRequest{
- Service: &pb.MicroService{
- AppId: "default",
- ServiceName:
"query_instance_diff_domain_consumer",
- Version: "1.0.0",
- Level: "FRONT",
- Status: pb.MS_UP,
- },
- })
+ respCreate, err = serviceResource.Create(getContext(),
&pb.CreateServiceRequest{
+ Service: &pb.MicroService{
+ AppId: "query_instance",
+ ServiceName: "query_instance_with_rev",
+ Version: "1.0.0",
+ Level: "FRONT",
+ Status: pb.MS_UP,
+ },
+ })
Expect(err).To(BeNil())
Expect(respCreate.Response.Code).To(Equal(pb.Response_SUCCESS))
- serviceId6 = respCreate.ServiceId
+ serviceId8 = respCreate.ServiceId
resp, err := instanceResource.Register(getContext(),
&pb.RegisterInstanceRequest{
Instance: &pb.MicroServiceInstance{
@@ -748,6 +764,20 @@ var _ = Describe("'Instance' service", func() {
Expect(err).To(BeNil())
Expect(resp.Response.Code).To(Equal(pb.Response_SUCCESS))
instanceId5 = resp.InstanceId
+
+ resp, err = instanceResource.Register(getContext(),
&pb.RegisterInstanceRequest{
+ Instance: &pb.MicroServiceInstance{
+ ServiceId: serviceId8,
+ HostName: "UT-HOST",
+ Endpoints: []string{
+ "find:127.0.0.8:8080",
+ },
+ Status: pb.MSI_UP,
+ },
+ })
+ Expect(err).To(BeNil())
+
Expect(resp.Response.Code).To(Equal(pb.Response_SUCCESS))
+ instanceId8 = resp.InstanceId
})
Context("when query invalid parameters", func() {
@@ -868,6 +898,59 @@ var _ = Describe("'Instance' service", func() {
Expect(len(respFind.Instances)).To(Equal(1))
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId4))
+ By("find with rev")
+ ctx := util.SetContext(getContext(),
serviceUtil.CTX_NOCACHE, 0)
+ respFind, err = instanceResource.Find(ctx,
&pb.FindInstancesRequest{
+ ConsumerServiceId: serviceId8,
+ AppId: "query_instance",
+ ServiceName:
"query_instance_with_rev",
+ VersionRule: "1.0.0",
+ })
+ Expect(err).To(BeNil())
+
Expect(respFind.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(len(respFind.Instances)).To(Equal(1))
+
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId8))
+ rev, _ :=
ctx.Value(serviceUtil.CTX_RESPONSE_REVISION).(int64)
+ Expect(rev).NotTo(Equal(0))
+
+ util.SetContext(ctx,
serviceUtil.CTX_REQUEST_REVISION, rev-1)
+ respFind, err = instanceResource.Find(ctx,
&pb.FindInstancesRequest{
+ ConsumerServiceId: serviceId8,
+ AppId: "query_instance",
+ ServiceName:
"query_instance_with_rev",
+ VersionRule: "1.0.0",
+ })
+ Expect(err).To(BeNil())
+
Expect(respFind.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(len(respFind.Instances)).To(Equal(1))
+
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId8))
+
Expect(ctx.Value(serviceUtil.CTX_RESPONSE_REVISION)).To(Equal(rev))
+
+ util.SetContext(ctx,
serviceUtil.CTX_REQUEST_REVISION, rev+1)
+ respFind, err = instanceResource.Find(ctx,
&pb.FindInstancesRequest{
+ ConsumerServiceId: serviceId8,
+ AppId: "query_instance",
+ ServiceName:
"query_instance_with_rev",
+ VersionRule: "1.0.0",
+ })
+ Expect(err).To(BeNil())
+
Expect(respFind.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(len(respFind.Instances)).To(Equal(1))
+
Expect(respFind.Instances[0].InstanceId).To(Equal(instanceId8))
+
Expect(ctx.Value(serviceUtil.CTX_RESPONSE_REVISION)).To(Equal(rev))
+
+ util.SetContext(ctx,
serviceUtil.CTX_REQUEST_REVISION, rev)
+ respFind, err = instanceResource.Find(ctx,
&pb.FindInstancesRequest{
+ ConsumerServiceId: serviceId8,
+ AppId: "query_instance",
+ ServiceName:
"query_instance_with_rev",
+ VersionRule: "1.0.0",
+ })
+ Expect(err).To(BeNil())
+
Expect(respFind.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(len(respFind.Instances)).To(Equal(0))
+
Expect(ctx.Value(serviceUtil.CTX_RESPONSE_REVISION)).To(Equal(rev))
+
By("find should return 200 even if consumer
permission deny")
respFind, err =
instanceResource.Find(getContext(), &pb.FindInstancesRequest{
ConsumerServiceId: serviceId3,
diff --git a/server/service/service_suite_test.go
b/server/service/service_suite_test.go
index 696ab2d1..6ac9b7ac 100644
--- a/server/service/service_suite_test.go
+++ b/server/service/service_suite_test.go
@@ -24,6 +24,7 @@ import (
_
"github.com/apache/incubator-servicecomb-service-center/server/plugin/infra/tracing/buildin"
_
"github.com/apache/incubator-servicecomb-service-center/server/plugin/infra/uuid/buildin"
"github.com/apache/incubator-servicecomb-service-center/server/service"
+ serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
. "github.com/onsi/ginkgo"
"github.com/onsi/ginkgo/reporters"
. "github.com/onsi/gomega"
@@ -42,7 +43,7 @@ var _ = BeforeSuite(func() {
func getContext() context.Context {
return util.SetContext(
util.SetDomainProject(context.Background(), "default",
"default"),
- "noCache", "1")
+ serviceUtil.CTX_NOCACHE, "1")
}
func TestGrpc(t *testing.T) {
diff --git a/server/service/util/common.go b/server/service/util/common.go
new file mode 100644
index 00000000..6c25e513
--- /dev/null
+++ b/server/service/util/common.go
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package util
+
+const (
+ HEADER_REV = "X-Resource-Revision"
+ CTX_NOCACHE = "noCache"
+ CTX_CACHEONLY = "cacheOnly"
+ CTX_REQUEST_REVISION = "requestRev"
+ CTX_RESPONSE_REVISION = "responseRev"
+)
diff --git a/server/service/util/dependency.go
b/server/service/util/dependency.go
index 3263841e..14e0f06f 100644
--- a/server/service/util/dependency.go
+++ b/server/service/util/dependency.go
@@ -58,7 +58,7 @@ func GetConsumerIdsByProvider(ctx context.Context,
domainProject string, provide
}
//todo 删除服务,最后实例推送有误差
- providerRules, err :=
GetRulesUtil(util.SetContext(util.CloneContext(ctx), "cacheOnly", "1"),
+ providerRules, err :=
GetRulesUtil(util.SetContext(util.CloneContext(ctx), CTX_CACHEONLY, "1"),
domainProject, provider.ServiceId)
if err != nil {
return nil, nil, err
@@ -128,7 +128,7 @@ func GetProviderIdsByConsumer(ctx context.Context,
domainProject string, service
}
allowIdx, denyIdx := 0, l
providerIds := make([]string, l)
- copyCtx := util.SetContext(util.CloneContext(ctx), "cacheOnly", "1")
+ copyCtx := util.SetContext(util.CloneContext(ctx), CTX_CACHEONLY, "1")
for _, providerId := range providerIdsInCache {
provider, err := GetService(ctx, domainProject, providerId)
if provider == nil {
diff --git a/server/service/util/domain_util.go
b/server/service/util/domain_util.go
index acd49a5d..1ae8f6f6 100644
--- a/server/service/util/domain_util.go
+++ b/server/service/util/domain_util.go
@@ -102,7 +102,7 @@ func NewProject(ctx context.Context, domain, project
string) error {
}
func NewDomainProject(ctx context.Context, domain, project string) error {
- copyCtx := util.SetContext(util.CloneContext(ctx), "cacheOnly", "1")
+ copyCtx := util.SetContext(util.CloneContext(ctx), CTX_CACHEONLY, "1")
ok, err := DomainExist(copyCtx, domain)
if !ok && err == nil {
err = NewDomain(ctx, domain)
diff --git a/server/service/util/domain_util_test.go
b/server/service/util/domain_util_test.go
index 331bd273..946d17fb 100644
--- a/server/service/util/domain_util_test.go
+++ b/server/service/util/domain_util_test.go
@@ -14,77 +14,76 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package util_test
+package util
import (
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
- serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
"testing"
)
func TestGetDomain(t *testing.T) {
- _, err :=
serviceUtil.GetAllDomainRawData(util.SetContext(context.Background(),
"cacheOnly", "1"))
+ _, err := GetAllDomainRawData(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"))
if err != nil {
t.Fatalf("GetAllDomainRawData WithCacheOnly failed")
}
- _, err = serviceUtil.GetAllDomainRawData(context.Background())
+ _, err = GetAllDomainRawData(context.Background())
if err == nil {
t.Fatalf("GetAllDomainRawData failed")
}
- _, err = serviceUtil.GetAllDomain(util.SetContext(context.Background(),
"cacheOnly", "1"))
+ _, err = GetAllDomain(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"))
if err != nil {
t.Fatalf("GetAllDomain WithCacheOnly failed")
}
- _, err = serviceUtil.GetAllDomain(context.Background())
+ _, err = GetAllDomain(context.Background())
if err == nil {
t.Fatalf("GetAllDomain failed")
}
}
func TestDomainExist(t *testing.T) {
- _, err := serviceUtil.DomainExist(util.SetContext(context.Background(),
"cacheOnly", "1"), "")
+ _, err := DomainExist(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "")
if err != nil {
t.Fatalf("DomainExist WithCacheOnly failed")
}
- _, err = serviceUtil.DomainExist(context.Background(), "")
+ _, err = DomainExist(context.Background(), "")
if err == nil {
t.Fatalf("DomainExist failed")
}
}
func TestNewDomain(t *testing.T) {
- err := serviceUtil.NewDomain(context.Background(), "")
+ err := NewDomain(context.Background(), "")
if err == nil {
t.Fatalf("NewDomain failed")
}
}
func TestProjectExist(t *testing.T) {
- _, err :=
serviceUtil.ProjectExist(util.SetContext(context.Background(), "cacheOnly",
"1"), "", "")
+ _, err := ProjectExist(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "")
if err != nil {
t.Fatalf("DomainExist WithCacheOnly failed")
}
- _, err = serviceUtil.ProjectExist(context.Background(), "", "")
+ _, err = ProjectExist(context.Background(), "", "")
if err == nil {
t.Fatalf("DomainExist failed")
}
}
func TestNewProject(t *testing.T) {
- err := serviceUtil.NewProject(context.Background(), "", "")
+ err := NewProject(context.Background(), "", "")
if err == nil {
t.Fatalf("NewProject failed")
}
}
func TestNewDomainProject(t *testing.T) {
- err := serviceUtil.NewDomainProject(context.Background(), "", "")
+ err := NewDomainProject(context.Background(), "", "")
if err == nil {
t.Fatalf("NewDomainProject failed")
}
diff --git a/server/service/util/heartbeat_util_test.go
b/server/service/util/heartbeat_util_test.go
index 26ef0369..bc7f37a6 100644
--- a/server/service/util/heartbeat_util_test.go
+++ b/server/service/util/heartbeat_util_test.go
@@ -14,10 +14,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package util_test
+package util
import (
- serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
"testing"
)
@@ -28,16 +27,16 @@ func TestHeartbeatUtil(t *testing.T) {
t.FailNow()
}
}()
- serviceUtil.HeartbeatUtil(context.Background(), "", "", "")
+ HeartbeatUtil(context.Background(), "", "", "")
}
func TestKeepAliveLease(t *testing.T) {
- _, err := serviceUtil.KeepAliveLease(context.Background(), "", "", "",
-1)
+ _, err := KeepAliveLease(context.Background(), "", "", "", -1)
if err == nil {
t.Fatalf("KeepAliveLease -1 failed")
}
- _, err = serviceUtil.KeepAliveLease(context.Background(), "", "", "", 0)
+ _, err = KeepAliveLease(context.Background(), "", "", "", 0)
if err == nil {
t.Fatalf("KeepAliveLease failed")
}
diff --git a/server/service/util/instance_util.go
b/server/service/util/instance_util.go
index 4e7b8cf2..8abc7bd1 100644
--- a/server/service/util/instance_util.go
+++ b/server/service/util/instance_util.go
@@ -18,6 +18,7 @@ package util
import (
"encoding/json"
+ "fmt"
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
apt "github.com/apache/incubator-servicecomb-service-center/server/core"
"github.com/apache/incubator-servicecomb-service-center/server/core/backend"
@@ -65,6 +66,72 @@ func GetInstance(ctx context.Context, domainProject string,
serviceId string, in
return instance, nil
}
+func GetAllInstancesOfServices(ctx context.Context, domainProject string, ids
[]string) (instances []*pb.MicroServiceInstance, err error) {
+ cloneCtx := util.CloneContext(ctx)
+ noCache, cacheOnly := ctx.Value(CTX_NOCACHE) == "1",
ctx.Value(CTX_CACHEONLY) == "1"
+
+ rev, _ := cloneCtx.Value(CTX_REQUEST_REVISION).(int64)
+ if !noCache && !cacheOnly && rev > 0 {
+ // force to find in cache at first time when rev > 0
+ util.SetContext(cloneCtx, CTX_CACHEONLY, "1")
+ }
+
+ var (
+ max int64
+ kvs []*mvccpb.KeyValue
+ )
+ for i := 0; i < 2; i++ {
+ for _, serviceId := range ids {
+ key := apt.GenerateInstanceKey(domainProject,
serviceId, "")
+ opts := append(FromContext(cloneCtx),
registry.WithStrKey(key), registry.WithPrefix())
+ resp, err :=
backend.Store().Instance().Search(cloneCtx, opts...)
+ if err != nil {
+ return nil, err
+ }
+
+ if len(resp.Kvs) > 0 {
+ kvs = append(kvs, resp.Kvs...)
+ }
+ if cmax := resp.MaxModRevision(); max < cmax {
+ max = cmax
+ }
+ }
+
+ if noCache || cacheOnly || rev == 0 {
+ break
+ }
+
+ if rev == max {
+ // return not modified
+ kvs = kvs[:0]
+ break
+ }
+
+ if rev < max || i != 0 {
+ break
+ }
+
+ kvs = kvs[:0]
+ // find from remote server at second time
+ util.SetContext(util.SetContext(cloneCtx,
+ CTX_CACHEONLY, ""),
+ CTX_NOCACHE, "1")
+ }
+
+ for _, kv := range kvs {
+ instance := &pb.MicroServiceInstance{}
+ err := json.Unmarshal(kv.Value, instance)
+ if err != nil {
+ return nil, fmt.Errorf("unmarshal %s faild, %s",
+ util.BytesToStringWithNoCopy(kv.Key),
err.Error())
+ }
+ instances = append(instances, instance)
+ }
+
+ util.SetContext(ctx, CTX_RESPONSE_REVISION, max)
+ return
+}
+
func GetAllInstancesOfOneService(ctx context.Context, domainProject string,
serviceId string) ([]*pb.MicroServiceInstance, error) {
key := apt.GenerateInstanceKey(domainProject, serviceId, "")
opts := append(FromContext(ctx), registry.WithStrKey(key),
registry.WithPrefix())
diff --git a/server/service/util/instance_util_test.go
b/server/service/util/instance_util_test.go
index fa275501..17ebd9d1 100644
--- a/server/service/util/instance_util_test.go
+++ b/server/service/util/instance_util_test.go
@@ -25,7 +25,7 @@ import (
func TestGetLeaseId(t *testing.T) {
- _, err := GetLeaseId(util.SetContext(context.Background(), "cacheOnly",
"1"), "", "", "")
+ _, err := GetLeaseId(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "", "")
if err != nil {
t.Fatalf(`GetLeaseId WithCacheOnly failed`)
}
@@ -37,7 +37,7 @@ func TestGetLeaseId(t *testing.T) {
}
func TestGetInstance(t *testing.T) {
- _, err := GetInstance(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "", "")
+ _, err := GetInstance(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "", "")
if err != nil {
t.Fatalf(`GetInstance WithCacheOnly failed`)
}
@@ -47,7 +47,7 @@ func TestGetInstance(t *testing.T) {
t.Fatalf(`GetInstance failed`)
}
- _, err =
GetAllInstancesOfOneService(util.SetContext(context.Background(), "cacheOnly",
"1"), "", "")
+ _, err =
GetAllInstancesOfOneService(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "")
if err != nil {
t.Fatalf(`GetAllInstancesOfOneService WithCacheOnly failed`)
}
@@ -66,7 +66,7 @@ func TestGetInstance(t *testing.T) {
}
func TestInstanceExistById(t *testing.T) {
- _, err := InstanceExistById(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "", "")
+ _, err := InstanceExistById(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "", "")
if err != nil {
t.Fatalf(`InstanceExistById WithCacheOnly failed`)
}
@@ -113,3 +113,22 @@ func TestGetInstanceCountOfOneService(t *testing.T) {
t.Fatalf(`GetInstanceCountOfOneService failed`)
}
}
+
+func TestGetInstanceCountOfServices(t *testing.T) {
+ _, err :=
GetAllInstancesOfServices(util.SetContext(context.Background(), CTX_CACHEONLY,
"1"), "", []string{"1"})
+ if err != nil {
+ t.Fatalf(`GetAllInstancesOfServices CTX_CACHEONLY failed`)
+ }
+ _, err =
GetAllInstancesOfServices(util.SetContext(context.Background(), CTX_NOCACHE,
"1"), "", []string{"1"})
+ if err == nil {
+ t.Fatalf(`GetAllInstancesOfServices CTX_NOCACHE failed`)
+ }
+ _, err =
GetAllInstancesOfServices(util.SetContext(context.Background(),
CTX_REQUEST_REVISION, 1), "", []string{"1"})
+ if err == nil {
+ t.Fatalf(`GetAllInstancesOfServices CTX_REQUEST_REVISION
failed`)
+ }
+ _, err = GetAllInstancesOfServices(context.Background(), "",
[]string{"1"})
+ if err == nil {
+ t.Fatalf(`GetAllInstancesOfServices failed`)
+ }
+}
diff --git a/server/service/util/rule_util.go b/server/service/util/rule_util.go
index 660c2e8f..7a04160c 100644
--- a/server/service/util/rule_util.go
+++ b/server/service/util/rule_util.go
@@ -38,7 +38,7 @@ type RuleFilter struct {
}
func (rf *RuleFilter) Filter(ctx context.Context, consumerId string) (bool,
error) {
- copyCtx := util.SetContext(util.CloneContext(ctx), "cacheOnly", "1")
+ copyCtx := util.SetContext(util.CloneContext(ctx), CTX_CACHEONLY, "1")
consumer, err := GetService(copyCtx, rf.DomainProject, consumerId)
if consumer == nil {
return false, err
@@ -225,7 +225,7 @@ func patternBlackList(rulesOfProvider []*pb.ServiceRule,
tagsOfConsumer map[stri
match, _ := regexp.MatchString(rule.Pattern, value)
if match {
- util.Logger().Infof("no permission to access, consumer
%s match black list, rule.Pattern is %s, value is %s",
+ util.Logger().Warnf(nil, "no permission to access,
consumer %s match black list, rule.Pattern is %s, value is %s",
consumerId, rule.Pattern, value)
return scerr.NewError(scerr.ErrPermissionDeny, "Found
in black list")
}
@@ -259,7 +259,7 @@ func Accessible(ctx context.Context, consumerId string,
providerId string) *scer
return scerr.NewError(scerr.ErrPermissionDeny, err.Error())
}
- ctx = util.SetContext(util.CloneContext(ctx), "cacheOnly", "1")
+ ctx = util.SetContext(util.CloneContext(ctx), CTX_CACHEONLY, "1")
// 黑白名单
rules, err := GetRulesUtil(ctx, targetDomainProject, providerId)
diff --git a/server/service/util/rule_util_test.go
b/server/service/util/rule_util_test.go
index e029d2be..55fec419 100644
--- a/server/service/util/rule_util_test.go
+++ b/server/service/util/rule_util_test.go
@@ -14,19 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package util_test
+package util
import (
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
"github.com/apache/incubator-servicecomb-service-center/server/core/proto"
- serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
"net/http"
"testing"
)
func TestRuleFilter_Filter(t *testing.T) {
- rf := serviceUtil.RuleFilter{
+ rf := RuleFilter{
DomainProject: "",
Provider: &proto.MicroService{},
ProviderRules: []*proto.ServiceRule{},
@@ -38,22 +37,22 @@ func TestRuleFilter_Filter(t *testing.T) {
}
func TestGetRulesUtil(t *testing.T) {
- _, err :=
serviceUtil.GetRulesUtil(util.SetContext(context.Background(), "cacheOnly",
"1"), "", "")
+ _, err := GetRulesUtil(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "")
if err != nil {
t.Fatalf("GetRulesUtil WithCacheOnly failed")
}
- _, err = serviceUtil.GetRulesUtil(context.Background(), "", "")
+ _, err = GetRulesUtil(context.Background(), "", "")
if err == nil {
t.Fatalf("GetRulesUtil failed")
}
- _, err = serviceUtil.GetOneRule(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "", "")
+ _, err = GetOneRule(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "", "")
if err != nil {
t.Fatalf("GetOneRule WithCacheOnly failed")
}
- _, err = serviceUtil.GetOneRule(context.Background(), "", "", "")
+ _, err = GetOneRule(context.Background(), "", "", "")
if err == nil {
t.Fatalf("GetOneRule failed")
}
@@ -65,24 +64,24 @@ func TestRuleExist(t *testing.T) {
t.Fatalf("TestRuleExist panic")
}
}()
- serviceUtil.RuleExist(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "", "", "")
- serviceUtil.RuleExist(context.Background(), "", "", "", "")
+ RuleExist(util.SetContext(context.Background(), CTX_CACHEONLY, "1"),
"", "", "", "")
+ RuleExist(context.Background(), "", "", "", "")
}
func TestGetServiceRuleType(t *testing.T) {
- _, _, err :=
serviceUtil.GetServiceRuleType(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "")
+ _, _, err := GetServiceRuleType(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "")
if err != nil {
t.Fatalf("GetServiceRuleType WithCacheOnly failed")
}
- _, _, err = serviceUtil.GetServiceRuleType(context.Background(), "", "")
+ _, _, err = GetServiceRuleType(context.Background(), "", "")
if err == nil {
t.Fatalf("GetServiceRuleType failed")
}
}
func TestAllowAcrossApp(t *testing.T) {
- err := serviceUtil.AllowAcrossDimension(context.Background(),
&proto.MicroService{
+ err := AllowAcrossDimension(context.Background(), &proto.MicroService{
AppId: "a",
}, &proto.MicroService{
AppId: "a",
@@ -91,7 +90,7 @@ func TestAllowAcrossApp(t *testing.T) {
t.Fatalf("AllowAcrossApp with the same appId and no property
failed")
}
- err = serviceUtil.AllowAcrossDimension(context.Background(),
&proto.MicroService{
+ err = AllowAcrossDimension(context.Background(), &proto.MicroService{
AppId: "a",
}, &proto.MicroService{
AppId: "c",
@@ -100,7 +99,7 @@ func TestAllowAcrossApp(t *testing.T) {
t.Fatalf("AllowAcrossApp with the diff appId and no property
failed")
}
- err = serviceUtil.AllowAcrossDimension(context.Background(),
&proto.MicroService{
+ err = AllowAcrossDimension(context.Background(), &proto.MicroService{
AppId: "a",
Properties: map[string]string{
proto.PROP_ALLOW_CROSS_APP: "true",
@@ -112,7 +111,7 @@ func TestAllowAcrossApp(t *testing.T) {
t.Fatalf("AllowAcrossApp with the same appId and allow property
failed")
}
- err = serviceUtil.AllowAcrossDimension(context.Background(),
&proto.MicroService{
+ err = AllowAcrossDimension(context.Background(), &proto.MicroService{
AppId: "a",
Properties: map[string]string{
proto.PROP_ALLOW_CROSS_APP: "true",
@@ -124,7 +123,7 @@ func TestAllowAcrossApp(t *testing.T) {
t.Fatalf("AllowAcrossApp with the diff appId and allow property
failed")
}
- err = serviceUtil.AllowAcrossDimension(context.Background(),
&proto.MicroService{
+ err = AllowAcrossDimension(context.Background(), &proto.MicroService{
AppId: "a",
Properties: map[string]string{
proto.PROP_ALLOW_CROSS_APP: "false",
@@ -136,7 +135,7 @@ func TestAllowAcrossApp(t *testing.T) {
t.Fatalf("AllowAcrossApp with the diff appId and deny property
failed")
}
- err = serviceUtil.AllowAcrossDimension(context.Background(),
&proto.MicroService{
+ err = AllowAcrossDimension(context.Background(), &proto.MicroService{
AppId: "a",
Properties: map[string]string{
proto.PROP_ALLOW_CROSS_APP: "",
@@ -150,7 +149,7 @@ func TestAllowAcrossApp(t *testing.T) {
}
func TestMatchRules(t *testing.T) {
- err := serviceUtil.MatchRules([]*proto.ServiceRule{
+ err := MatchRules([]*proto.ServiceRule{
{
RuleType: "WHITE",
Attribute: "",
@@ -161,7 +160,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules nil failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "WHITE",
Attribute: "",
@@ -172,7 +171,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules invalid WHITE failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "WHITE",
Attribute: "ServiceName",
@@ -185,7 +184,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules WHITE with field ServiceName failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "WHITE",
Attribute: "tag_a",
@@ -198,7 +197,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules WHITE with tag b failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "WHITE",
Attribute: "tag_a",
@@ -211,7 +210,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules WHITE with tag c failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "BLACK",
Attribute: "tag_a",
@@ -224,7 +223,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules BLACK with tag b failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "BLACK",
Attribute: "ServiceName",
@@ -237,7 +236,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules BLACK with field ServiceName failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "BLACK",
Attribute: "tag_a",
@@ -250,7 +249,7 @@ func TestMatchRules(t *testing.T) {
t.Fatalf("MatchRules BLACK with tag c failed")
}
- err = serviceUtil.MatchRules([]*proto.ServiceRule{
+ err = MatchRules([]*proto.ServiceRule{
{
RuleType: "BLACK",
Attribute: "tag_a",
@@ -265,19 +264,19 @@ func TestMatchRules(t *testing.T) {
}
func TestGetConsumer(t *testing.T) {
- _, _, err := serviceUtil.GetConsumerIdsByProvider(context.Background(),
"", &proto.MicroService{})
+ _, _, err := GetConsumerIdsByProvider(context.Background(), "",
&proto.MicroService{})
if err == nil {
t.Fatalf("GetConsumerIdsByProvider invalid failed")
}
- _, _, err = serviceUtil.GetConsumerIdsByProvider(context.Background(),
"", &proto.MicroService{
+ _, _, err = GetConsumerIdsByProvider(context.Background(), "",
&proto.MicroService{
ServiceId: "a",
})
if err == nil {
t.Fatalf("GetConsumerIdsByProvider not exist service failed")
}
- _, err =
serviceUtil.GetConsumersInCache(util.SetContext(context.Background(),
"cacheOnly", "1"), "",
+ _, err = GetConsumersInCache(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "",
&proto.MicroService{
ServiceId: "a",
})
@@ -287,7 +286,7 @@ func TestGetConsumer(t *testing.T) {
}
func TestGetProvider(t *testing.T) {
- _, err :=
serviceUtil.GetProvidersInCache(util.SetContext(context.Background(),
"cacheOnly", "1"), "",
+ _, err := GetProvidersInCache(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "",
&proto.MicroService{
ServiceId: "a",
})
@@ -295,12 +294,12 @@ func TestGetProvider(t *testing.T) {
t.Fatalf("GetProvidersInCache WithCacheOnly failed")
}
- _, _, err = serviceUtil.GetProviderIdsByConsumer(context.Background(),
"", &proto.MicroService{})
+ _, _, err = GetProviderIdsByConsumer(context.Background(), "",
&proto.MicroService{})
if err == nil {
t.Fatalf("GetProviderIdsByConsumer invalid failed")
}
- _, _, err =
serviceUtil.GetProviderIdsByConsumer(util.SetContext(context.Background(),
"cacheOnly", "1"),
+ _, _, err =
GetProviderIdsByConsumer(util.SetContext(context.Background(), CTX_CACHEONLY,
"1"),
"", &proto.MicroService{})
if err != nil {
t.Fatalf("GetProviderIdsByConsumer WithCacheOnly failed")
@@ -308,12 +307,12 @@ func TestGetProvider(t *testing.T) {
}
func TestAccessible(t *testing.T) {
- err := serviceUtil.Accessible(context.Background(), "", "")
+ err := Accessible(context.Background(), "", "")
if err.StatusCode() != http.StatusInternalServerError {
t.Fatalf("Accessible invalid failed")
}
- err = serviceUtil.Accessible(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "")
+ err = Accessible(util.SetContext(context.Background(), CTX_CACHEONLY,
"1"), "", "")
if err.StatusCode() == http.StatusInternalServerError {
t.Fatalf("Accessible WithCacheOnly failed")
}
diff --git a/server/service/util/schema_util_test.go
b/server/service/util/schema_util_test.go
index 756bf85c..7ba71463 100644
--- a/server/service/util/schema_util_test.go
+++ b/server/service/util/schema_util_test.go
@@ -14,22 +14,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package util_test
+package util
import (
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
- serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
"testing"
)
func TestCheckSchemaInfoExist(t *testing.T) {
- _, err :=
serviceUtil.CheckSchemaInfoExist(util.SetContext(context.Background(),
"cacheOnly", "1"), "")
+ _, err := CheckSchemaInfoExist(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "")
if err != nil {
t.FailNow()
}
- _, err = serviceUtil.CheckSchemaInfoExist(context.Background(), "")
+ _, err = CheckSchemaInfoExist(context.Background(), "")
if err == nil {
t.FailNow()
}
diff --git a/server/service/util/tag_util_test.go
b/server/service/util/tag_util_test.go
index 935d4c2d..20fa7d5b 100644
--- a/server/service/util/tag_util_test.go
+++ b/server/service/util/tag_util_test.go
@@ -14,29 +14,28 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package util_test
+package util
import (
"github.com/apache/incubator-servicecomb-service-center/pkg/util"
- serviceUtil
"github.com/apache/incubator-servicecomb-service-center/server/service/util"
"golang.org/x/net/context"
"testing"
)
func TestAddTagIntoETCD(t *testing.T) {
- err := serviceUtil.AddTagIntoETCD(context.Background(), "", "",
map[string]string{"a": "1"})
+ err := AddTagIntoETCD(context.Background(), "", "",
map[string]string{"a": "1"})
if err == nil {
t.Fatalf(`AddTagIntoETCD with {"a": "1"} tags failed`)
}
}
func TestGetTagsUtils(t *testing.T) {
- _, err :=
serviceUtil.GetTagsUtils(util.SetContext(context.Background(), "cacheOnly",
"1"), "", "")
+ _, err := GetTagsUtils(util.SetContext(context.Background(),
CTX_CACHEONLY, "1"), "", "")
if err != nil {
t.Fatalf(`GetTagsUtils WithCacheOnly failed`)
}
- _, err = serviceUtil.GetTagsUtils(context.Background(), "", "")
+ _, err = GetTagsUtils(context.Background(), "", "")
if err == nil {
t.Fatalf(`GetTagsUtils failed`)
}
diff --git a/server/service/util/util.go b/server/service/util/util.go
index 8279c295..6d0653c2 100644
--- a/server/service/util/util.go
+++ b/server/service/util/util.go
@@ -24,9 +24,9 @@ import (
func FromContext(ctx context.Context) []registry.PluginOpOption {
opts := make([]registry.PluginOpOption, 0, 5)
switch {
- case ctx.Value("noCache") == "1":
+ case ctx.Value(CTX_NOCACHE) == "1":
opts = append(opts, registry.WithNoCache())
- case ctx.Value("cacheOnly") == "1":
+ case ctx.Value(CTX_CACHEONLY) == "1":
opts = append(opts, registry.WithCacheOnly())
}
return opts
diff --git a/server/service/util/util_suite_test.go
b/server/service/util/util_suite_test.go
index c1dffa66..457e085c 100644
--- a/server/service/util/util_suite_test.go
+++ b/server/service/util/util_suite_test.go
@@ -45,19 +45,19 @@ func TestMicroservice(t *testing.T) {
}
func TestFindServiceIds(t *testing.T) {
- _, err :=
serviceUtil.FindServiceIds(util.SetContext(context.Background(), "cacheOnly",
"1"),
+ _, err :=
serviceUtil.FindServiceIds(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"),
"latest", &proto.MicroServiceKey{})
if err != nil {
t.FailNow()
}
- _, err =
serviceUtil.FindServiceIds(util.SetContext(context.Background(), "cacheOnly",
"1"),
+ _, err =
serviceUtil.FindServiceIds(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"),
"1.0.0", &proto.MicroServiceKey{})
if err != nil {
t.FailNow()
}
- _, err =
serviceUtil.FindServiceIds(util.SetContext(context.Background(), "cacheOnly",
"1"),
+ _, err =
serviceUtil.FindServiceIds(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"),
"1.0+", &proto.MicroServiceKey{Alias: "test"})
if err != nil {
t.FailNow()
@@ -65,7 +65,7 @@ func TestFindServiceIds(t *testing.T) {
}
func TestGetService(t *testing.T) {
- _, err := serviceUtil.GetService(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "")
+ _, err := serviceUtil.GetService(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"), "", "")
if err != nil {
t.FailNow()
}
@@ -75,7 +75,7 @@ func TestGetService(t *testing.T) {
t.FailNow()
}
- _, err =
serviceUtil.GetServicesRawData(util.SetContext(context.Background(),
"cacheOnly", "1"), "")
+ _, err =
serviceUtil.GetServicesRawData(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"), "")
if err != nil {
t.FailNow()
}
@@ -85,7 +85,7 @@ func TestGetService(t *testing.T) {
t.FailNow()
}
- _, err =
serviceUtil.GetServicesByDomain(util.SetContext(context.Background(),
"cacheOnly", "1"), "")
+ _, err =
serviceUtil.GetServicesByDomain(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"), "")
if err != nil {
t.FailNow()
}
@@ -95,7 +95,7 @@ func TestGetService(t *testing.T) {
t.FailNow()
}
- _, err =
serviceUtil.GetAllServiceUtil(util.SetContext(context.Background(),
"cacheOnly", "1"))
+ _, err =
serviceUtil.GetAllServiceUtil(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"))
if err != nil {
t.FailNow()
}
@@ -117,7 +117,7 @@ func TestGetService(t *testing.T) {
}
func TestFromContext(t *testing.T) {
- ctx := context.WithValue(context.Background(), "noCache", "1")
+ ctx := context.WithValue(context.Background(), serviceUtil.CTX_NOCACHE,
"1")
opts := serviceUtil.FromContext(ctx)
if len(opts) == 0 {
t.FailNow()
@@ -128,7 +128,7 @@ func TestFromContext(t *testing.T) {
t.FailNow()
}
- ctx = context.WithValue(context.Background(), "cacheOnly", "1")
+ ctx = context.WithValue(context.Background(),
serviceUtil.CTX_CACHEONLY, "1")
opts = serviceUtil.FromContext(ctx)
if len(opts) == 0 {
t.FailNow()
@@ -146,7 +146,7 @@ func TestServiceExist(t *testing.T) {
t.FailNow()
}
}()
- serviceUtil.ServiceExist(util.SetContext(context.Background(),
"cacheOnly", "1"), "", "")
+ serviceUtil.ServiceExist(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"), "", "")
}
func TestRemandQuota(t *testing.T) {
@@ -164,7 +164,7 @@ func TestSetDefault(t *testing.T) {
}
func TestGetOneDomainProjectServiceCount(t *testing.T) {
- _, err :=
serviceUtil.GetOneDomainProjectServiceCount(util.SetContext(context.Background(),
"cacheOnly", "1"), "")
+ _, err :=
serviceUtil.GetOneDomainProjectServiceCount(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"), "")
if err != nil {
t.Fatalf("GetOneDomainProjectServiceCount WithCacheOnly failed")
}
@@ -176,7 +176,7 @@ func TestGetOneDomainProjectServiceCount(t *testing.T) {
}
func TestGetOneDomainProjectInstanceCount(t *testing.T) {
- _, err :=
serviceUtil.GetOneDomainProjectInstanceCount(util.SetContext(context.Background(),
"cacheOnly", "1"), "")
+ _, err :=
serviceUtil.GetOneDomainProjectInstanceCount(util.SetContext(context.Background(),
serviceUtil.CTX_CACHEONLY, "1"), "")
if err != nil {
t.Fatalf("GetOneDomainProjectInstanceCount WithCacheOnly
failed")
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Fix the wrong revision from FindInstances API
> ---------------------------------------------
>
> Key: SCB-621
> URL: https://issues.apache.org/jira/browse/SCB-621
> Project: Apache ServiceComb
> Issue Type: Bug
> Components: Service-Center
> Reporter: little-cui
> Assignee: little-cui
> Priority: Major
> Fix For: service-center-1.0.0-m2
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)