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 (

Reply via email to