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/servicecomb-kie.git
commit bf3c4d6121be294afd97b706b356481e6ea5c1a8 Author: tian <xiaoliang.t...@gmail.com> AuthorDate: Thu Jun 27 15:54:06 2019 +0800 fix bug: if find by labels, will lose key value record --- go.mod | 2 +- server/config/config.go | 4 ++-- server/dao/kie_api.go | 19 +++++++++++++++++-- server/resource/v1/common.go | 3 +++ server/resource/v1/common_test.go | 16 ++++++++++++++++ server/resource/v1/kv_resource.go | 14 +++++++------- server/resource/v1/v1_suite_test.go | 17 +++++++++++++++++ 7 files changed, 63 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 6646204..2540c72 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/apache/servicecomb-kie require ( github.com/emicklei/go-restful v2.8.0+incompatible github.com/go-chassis/foundation v0.0.0-20190516083152-b8b2476b6db7 - github.com/go-chassis/go-archaius v0.16.0 + github.com/go-chassis/go-archaius v0.18.0 github.com/go-chassis/go-chassis v1.4.3 github.com/go-chassis/paas-lager v1.0.2-0.20190328010332-cf506050ddb2 github.com/go-mesh/openlogging v1.0.1-0.20181205082104-3d418c478b2d diff --git a/server/config/config.go b/server/config/config.go index 76571de..36b66c2 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -19,7 +19,7 @@ package config import ( "github.com/go-chassis/go-archaius" - "github.com/go-chassis/go-archaius/sources/file-source" + "github.com/go-chassis/go-archaius/sources/utils" "gopkg.in/yaml.v2" "path/filepath" ) @@ -28,7 +28,7 @@ var configurations *Config //Init initiate config files func Init(file string) error { - if err := archaius.AddFile(file, archaius.WithFileHandler(filesource.UseFileNameAsKeyContentAsValue)); err != nil { + if err := archaius.AddFile(file, archaius.WithFileHandler(utils.UseFileNameAsKeyContentAsValue)); err != nil { return err } _, filename := filepath.Split(file) diff --git a/server/dao/kie_api.go b/server/dao/kie_api.go index 0e0020d..5e641aa 100644 --- a/server/dao/kie_api.go +++ b/server/dao/kie_api.go @@ -58,6 +58,11 @@ func (s *MongodbService) CreateOrUpdate(ctx context.Context, domain string, kv * if domain == "" { return nil, ErrMissingDomain } + if len(kv.Labels) == 0 { + kv.Labels = map[string]string{ + "default": "default", + } + } ctx, _ = context.WithTimeout(ctx, DefaultTimeout) //check labels exits or not labelID, err := s.LabelsExist(ctx, domain, kv.Labels) @@ -66,6 +71,10 @@ func (s *MongodbService) CreateOrUpdate(ctx context.Context, domain string, kv * if err == ErrLabelNotExists { l, err = s.createLabel(ctx, domain, kv.Labels) if err != nil { + openlogging.Error("create label failed", openlogging.WithTags(openlogging.Tags{ + "k": kv.Key, + "domain": kv.Domain, + })) return nil, err } labelID = l.ID @@ -96,6 +105,7 @@ func (s *MongodbService) CreateOrUpdate(ctx context.Context, domain string, kv * return nil, err } kv.Revision = revision + kv.Domain = "" return kv, nil } @@ -208,7 +218,7 @@ func (s *MongodbService) FindKV(ctx context.Context, domain string, options ...F defer cur.Close(ctx) kvResp := make([]*model.KVResponse, 0) - if opts.Depth == 0 { + if opts.Depth == 0 && opts.Key != "" { openlogging.Debug("find one key", openlogging.WithTags( map[string]interface{}{ "key": opts.Key, @@ -218,6 +228,11 @@ func (s *MongodbService) FindKV(ctx context.Context, domain string, options ...F )) return cursorToOneKV(ctx, cur, opts.Labels) } + openlogging.Debug("find more", openlogging.WithTags(openlogging.Tags{ + "depth": opts.Depth, + "k": opts.Key, + "labels": opts.Labels, + })) for cur.Next(ctx) { curKV := &model.KVDoc{} @@ -231,7 +246,7 @@ func (s *MongodbService) FindKV(ctx context.Context, domain string, options ...F openlogging.Debug("so deep, skip this key") continue } - openlogging.Info(fmt.Sprintf("%v", curKV)) + openlogging.Debug(fmt.Sprintf("%v", curKV)) var groupExist bool var labelGroup *model.KVResponse for _, labelGroup = range kvResp { diff --git a/server/resource/v1/common.go b/server/resource/v1/common.go index dcf9901..9b01260 100644 --- a/server/resource/v1/common.go +++ b/server/resource/v1/common.go @@ -77,6 +77,9 @@ func ReadLabelCombinations(req *goRestful.Request) ([]map[string]string, error) } labelCombinations = append(labelCombinations, labels) } + if len(labelCombinations) == 0 { + return []map[string]string{{"default": "default"}}, nil + } return labelCombinations, nil } diff --git a/server/resource/v1/common_test.go b/server/resource/v1/common_test.go index d662799..792383c 100644 --- a/server/resource/v1/common_test.go +++ b/server/resource/v1/common_test.go @@ -44,5 +44,21 @@ var _ = Describe("Common", func() { }) }) + Context("find default", func() { + r, err := http.NewRequest("GET", + "/kv", + nil) + It("should not return err ", func() { + Expect(err).Should(BeNil()) + }) + c, err := ReadLabelCombinations(restful.NewRequest(r)) + It("should not return err ", func() { + Expect(err).Should(BeNil()) + }) + It("should has 1 combinations", func() { + Expect(len(c)).Should(Equal(1)) + }) + + }) }) }) diff --git a/server/resource/v1/kv_resource.go b/server/resource/v1/kv_resource.go index c072dc6..832dae7 100644 --- a/server/resource/v1/kv_resource.go +++ b/server/resource/v1/kv_resource.go @@ -99,11 +99,11 @@ func (r *KVResource) GetByKey(context *restful.Context) { return } kvs, err := s.FindKV(context.Ctx, domain.(string), dao.WithKey(key), dao.WithLabels(labels), dao.WithDepth(d)) - if err == dao.ErrKeyNotExists { - WriteErrResponse(context, http.StatusNotFound, err.Error()) - return - } if err != nil { + if err == dao.ErrKeyNotExists { + WriteErrResponse(context, http.StatusNotFound, err.Error()) + return + } WriteErrResponse(context, http.StatusInternalServerError, err.Error()) return } @@ -146,7 +146,7 @@ func (r *KVResource) SearchByLabels(context *restful.Context) { } if len(kvs) == 0 { - WriteErrResponse(context, http.StatusNotFound, err.Error()) + WriteErrResponse(context, http.StatusNotFound, "no kv found") return } @@ -214,7 +214,7 @@ func (r *KVResource) URLPatterns() []restful.Route { ResourceFuncName: "GetByKey", FuncDesc: "get key values by key and labels", Parameters: []*restful.Parameters{ - DocPathKey, DocHeaderMath, DocHeaderDepth, + DocPathKey, DocHeaderDepth, }, Returns: []*restful.Returns{ { @@ -232,7 +232,7 @@ func (r *KVResource) URLPatterns() []restful.Route { ResourceFuncName: "SearchByLabels", FuncDesc: "search key values by labels combination", Parameters: []*restful.Parameters{ - DocHeaderMath, DocQueryCombination, + DocQueryCombination, }, Returns: []*restful.Returns{ { diff --git a/server/resource/v1/v1_suite_test.go b/server/resource/v1/v1_suite_test.go index 23b7482..99a2884 100644 --- a/server/resource/v1/v1_suite_test.go +++ b/server/resource/v1/v1_suite_test.go @@ -1,3 +1,20 @@ +/* + * 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 v1_test import (